<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://alteeve.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Misko</id>
	<title>Alteeve Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://alteeve.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Misko"/>
	<link rel="alternate" type="text/html" href="https://alteeve.com/w/Special:Contributions/Misko"/>
	<updated>2026-04-26T10:47:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6587</id>
		<title>AN!Cluster Tutorial 2</title>
		<link rel="alternate" type="text/html" href="https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6587"/>
		<updated>2015-01-06T15:19:35Z</updated>

		<summary type="html">&lt;p&gt;Misko: /* Initializing vm01-win2008&amp;#039;s Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{howto_header}}&lt;br /&gt;
&lt;br /&gt;
[[image:RN3-m2_01.jpg|thumb|right|400px|A typical &#039;&#039;Anvil!&#039;&#039; build-out]]&lt;br /&gt;
&lt;br /&gt;
This paper has one goal:&lt;br /&gt;
&lt;br /&gt;
* Create an easy to use, fully redundant platform for virtual servers.&lt;br /&gt;
&lt;br /&gt;
Oh, and do have fun!&lt;br /&gt;
&lt;br /&gt;
= What&#039;s New? =&lt;br /&gt;
&lt;br /&gt;
In the last two years, we&#039;ve learned a lot about how to make an even more solid high-availability platform. We&#039;ve created tools to make monitoring and management of the virtual servers and nodes trivially easy. This updated release of our [[2-Node Red Hat KVM Cluster Tutorial|tutorial]] brings these advances to you!&lt;br /&gt;
&lt;br /&gt;
* Many refinements to the cluster stack that protect against corner cases seen over the last two years.&lt;br /&gt;
* Configuration naming convention changes to support the new [[AN!CDB]] dashboard.&lt;br /&gt;
* Addition of the [[AN!CM]] monitoring and alert system.&lt;br /&gt;
* Security improved; [[selinux]] and [[iptables]] now enabled and used.&lt;br /&gt;
&lt;br /&gt;
== A Note on Terminology ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use the following terms:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Anvil!&#039;&#039;: This is our name for the HA platform as a whole.&lt;br /&gt;
* &#039;&#039;Nodes&#039;&#039;: The physical hardware servers used as members in the cluster and which host the virtual servers.&lt;br /&gt;
* &#039;&#039;Servers&#039;&#039;: The virtual servers themselves. &lt;br /&gt;
* &#039;&#039;Compute Pack&#039;&#039;: This describes a pair of nodes that work together to power highly-available servers.&lt;br /&gt;
* &#039;&#039;Foundation Pack&#039;&#039;: This describes the switches, [[PDU]]s and [[UPS]]es used to power and connect the nodes.&lt;br /&gt;
* &#039;&#039;Monitor Pack&#039;&#039;: This describes the equipment used for the [[AN!CDB]] management dashboard.&lt;br /&gt;
&lt;br /&gt;
== Why Should I Follow This (Lengthy) Tutorial? ==&lt;br /&gt;
&lt;br /&gt;
Following this tutorial is not the lightest undertaking. It is designed to teach you all the inner details of building an HA platform for virtual servers. When finished, you will have a detailed and deep understanding of what it takes to build a fully redundant, mostly fault-tolerant high-availability platform. Though lengthy, it is very worthwhile if you want to understand high-availability.&lt;br /&gt;
&lt;br /&gt;
In either case, when finished, you will have the following benefits:&lt;br /&gt;
* Totally open source. Everything. This guide and all software used is open!&lt;br /&gt;
* You can host servers running almost any operating system. &lt;br /&gt;
* The HA platform requires no access to the servers and no special software needs to be installed. Your users may well never know that they&#039;re on a virtual machine.&lt;br /&gt;
* Your servers will operate just like servers installed on bare-iron machines. No special configuration is required. The high-availability components will be hidden behind the scenes.&lt;br /&gt;
* The worst failures of core components, such as a mainboard failure in a node, will cause an outage of roughly 30 to 90 seconds.&lt;br /&gt;
* Storage is synchronously replicated, guaranteeing that the total destruction of a node will cause no more data loss than a traditional server losing power.&lt;br /&gt;
* Storage is replicated without the need for a [[SAN]], reducing cost and providing total storage redundancy.&lt;br /&gt;
* Live-migration of servers enables upgrading and node maintenance without downtime. No more weekend maintenance!&lt;br /&gt;
* AN!CM; The &amp;quot;AN! Cluster Monitor&amp;quot;, watches the HA stack is continually. It sends alerts for many events from predictive hardware failure to simple live migration in a single application.&lt;br /&gt;
* Most failures are fault-tolerant and will cause no interruption in services at all.&lt;br /&gt;
&lt;br /&gt;
Ask your local VMware or Microsoft Hyper-V sales person what they&#039;d charge for all this. :)&lt;br /&gt;
&lt;br /&gt;
== High-Level Explanation of How HA Clustering Works ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is an adaptation of [http://lists.linux-ha.org/pipermail/linux-ha/2013-October/047633.html this post] to the [http://lists.linux-ha.org/mailman/listinfo/linux-ha Linux-HA] mailing list. If you find this section hard to follow, please don&#039;t worry. Each component is explained in the &amp;quot;Concepts&amp;quot; section below.}}&lt;br /&gt;
&lt;br /&gt;
Before digging into the details, it might help to start with a high-level explanation of how HA clustering works.&lt;br /&gt;
&lt;br /&gt;
[[Corosync]] uses the [[totem]] protocol for &amp;quot;heartbeat&amp;quot;-like monitoring of the other node&#039;s health. A token is passed around to each node, the node does some work (like acknowledge old messages, send new ones), and then it passes the token on to the next node. This goes around and around all the time. Should a node not pass its token on after a short time-out period, the token is declared lost, an error count goes up and a new token is sent. If too many tokens are lost in a row, the node is declared lost.&lt;br /&gt;
&lt;br /&gt;
Once the node is declared lost, the remaining nodes reform a new cluster. If enough nodes are left to form [[quorum]] (simple majority), then the new cluster will continue to provide services. In two-node clusters, like the ones we&#039;re building here, quorum is disabled so each node can work on its own.&lt;br /&gt;
&lt;br /&gt;
Corosync itself only cares about who is a cluster member and making sure all members get all [[CPG|messages]]. What happens after the cluster reforms is up to the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, and the resource group manager, [[rgmanager]].&lt;br /&gt;
&lt;br /&gt;
The first thing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; does after being notified that a node was lost is initiate a [[fence]] against the lost node. This is a process where the lost node is powered off by the healthy node (power fencing), or cut off from the network/storage (fabric fencing). In either case, the idea is to make sure that the lost node is in a known state. If this is skipped, the node could recover later and try to provide cluster services, not having realized that it was removed from the cluster. This could cause problems from confusing switches to corrupting data.&lt;br /&gt;
&lt;br /&gt;
When rgmanager is told that membership has changed because a node died, it looks to see what services might have been lost. Once it knows what was lost, it looks at the rules it&#039;s been given and decides what to do. These rules are defined in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|cluster.conf]]&#039;s&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element. We&#039;ll go into detail on this later.&lt;br /&gt;
&lt;br /&gt;
In two-node clusters, there is also a chance of a &amp;quot;split-brain&amp;quot;. Quorum has to be disabled, so it is possible for both nodes to think the other node is dead and both try to provide the same cluster services. By using fencing, after the nodes break from one another (which could happen with a network failure, for example), neither node will offer services until one of them has fenced the other. The faster node will win and the slower node will shut down (or be isolated). The survivor can then run services safely without risking a split-brain.&lt;br /&gt;
&lt;br /&gt;
Once the dead/slower node has been fenced, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; then decides what to do with the services that had been running on the lost node. Generally, this means restarting the services locally that had been running on the dead node. The details of this are decided by you when you configure the resources in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. As we will see with each node&#039;s local storage service, the service is not recovered but instead left stopped.&lt;br /&gt;
&lt;br /&gt;
= The Task Ahead =&lt;br /&gt;
&lt;br /&gt;
Before we start, let&#039;s take a few minutes to discuss clustering and its complexities.&lt;br /&gt;
&lt;br /&gt;
== A Note on Patience ==&lt;br /&gt;
&lt;br /&gt;
When someone wants to become a pilot, they can&#039;t jump into a plane and try to take off. It&#039;s not that flying is inherently hard, but it requires a foundation of understanding. Clustering is the same in this regard; there are many different pieces that have to work together just to get off the ground. &lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;must&#039;&#039;&#039; have patience.&lt;br /&gt;
&lt;br /&gt;
Like a pilot on their first flight, seeing a cluster come to life is a fantastic experience. Don&#039;t rush it! Do your homework and you&#039;ll be on your way before you know it.&lt;br /&gt;
&lt;br /&gt;
Coming back to earth:&lt;br /&gt;
&lt;br /&gt;
Many technologies can be learned by creating a very simple base and then building on it. The classic &amp;quot;Hello, World!&amp;quot; script created when first learning a programming language is an example of this. Unfortunately, there is no real analogue to this in clustering. Even the most basic cluster requires several pieces be in place and working well together. If you try to rush, by ignoring pieces you think are not important, you will almost certainly waste time. A good example is setting aside [[fencing]], thinking that your test cluster&#039;s data isn&#039;t important. The cluster software has no concept of &amp;quot;test&amp;quot;. It treats everything as critical all the time and &#039;&#039;will&#039;&#039; shut down if anything goes wrong.&lt;br /&gt;
&lt;br /&gt;
Take your time, work through these steps, and you will have the foundation cluster sooner than you realize. Clustering is fun &#039;&#039;&#039;because&#039;&#039;&#039; it is a challenge.&lt;br /&gt;
&lt;br /&gt;
== Technologies We Will Use ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Red Hat Enterprise Linux 6&#039;&#039; ([[EL6]]); You can use  a derivative like [[CentOS]] v6. Specifically, we&#039;re using 6.5.&lt;br /&gt;
* &#039;&#039;Red Hat Cluster Services&#039;&#039; &amp;quot;Stable&amp;quot; version 3. This describes the following core components:&lt;br /&gt;
** &#039;&#039;Corosync&#039;&#039;; Provides cluster communications using the [[totem]] protocol.&lt;br /&gt;
** &#039;&#039;Cluster Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[cman]]&amp;lt;/span&amp;gt;); Manages the starting, stopping and managing of the cluster.&lt;br /&gt;
** &#039;&#039;Resource Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[rgmanager]]&amp;lt;/span&amp;gt;); Manages cluster resources and services. Handles service recovery during failures.&lt;br /&gt;
** &#039;&#039;Clustered Logical Volume Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[clvm]]&amp;lt;/span&amp;gt;); Cluster-aware (disk) volume manager. Backs [[GFS2]] [[filesystem]]s and [[KVM]] virtual machines.&lt;br /&gt;
** &#039;&#039;Global File System&#039;&#039; version 2 (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[gfs2]]&amp;lt;/span&amp;gt;); Cluster-aware, concurrently mountable file system.&lt;br /&gt;
* &#039;&#039;Distributed Redundant Block Device&#039;&#039; ([[DRBD]]); Keeps shared data synchronized across cluster nodes.&lt;br /&gt;
* &#039;&#039;KVM&#039;&#039;; [[Hypervisor]] that controls and supports virtual machines.&lt;br /&gt;
* Alteeve&#039;s Niche! Cluster Dashboard and Cluster Monitor&lt;br /&gt;
&lt;br /&gt;
== A Note on Hardware ==&lt;br /&gt;
&lt;br /&gt;
[[Image:RX300-S7_close-up_01.jpg|thumb|right|500px|RX300 S7]]&lt;br /&gt;
&lt;br /&gt;
Another new change is that Alteeve&#039;s Niche!, after years of experimenting with various hardware, has partnered with [[Fujitsu]]. We chose them because of the unparalleled quality of their equipment. &lt;br /&gt;
&lt;br /&gt;
This tutorial can be used on any manufacturer&#039;s hardware, provided it meets the minimum requirements listed below. That said, we strongly recommend readers give Fujitsu&#039;s [http://www.fujitsu.com/fts/products/computing/servers/primergy/rack/ RX-line] of servers a close look. We do not get a discount for this recommendation, we genuinely love the quality of their gear. The only technical argument for using Fujitsu hardware is that we do all our cluster stack monitoring software development on Fujitsu RX200 and RX300 servers, so we can say with confidence that the AN! software components will work well on their kit.&lt;br /&gt;
&lt;br /&gt;
If you use any other hardware vendor and run into any trouble, please don&#039;t hesitate to [[Support|contact us]]. We want to make sure that our HA stack works on as many systems as possible and will be happy to help out. Of course, all Alteeve code is open source, so [https://github.com/digimer/an-cdb contributions] are always welcome, too!&lt;br /&gt;
&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
&lt;br /&gt;
The goal of this tutorial is to help you build an HA platform with zero single points of failure. In order to do this, certain minimum technical requirements must be met.&lt;br /&gt;
&lt;br /&gt;
Bare minimum requirements:&lt;br /&gt;
&lt;br /&gt;
* Two servers with the following;&lt;br /&gt;
** A CPU with [https://en.wikipedia.org/wiki/Hardware-assisted_virtualization hardware-accelerated virtualization]&lt;br /&gt;
** Redundant power supplies&lt;br /&gt;
** [[IPMI]] or vendor-specific [https://en.wikipedia.org/wiki/Integrated_Remote_Management_Controller out-of-band management], like Fujitsu&#039;s iRMC, HP&#039;s iLO, Dell&#039;s iDRAC, etc&lt;br /&gt;
** Six network interfaces, 1 [[Gbit]] or faster (yes, six!)&lt;br /&gt;
** 2 [[GiB]] of RAM and 44.5 GiB of storage for the host operating system, plus sufficient RAM and storage for your VMs&lt;br /&gt;
* Two switched [[PDU]]s; APC-brand recommended but any with a supported [[fence agent]] is fine&lt;br /&gt;
* Two network switches&lt;br /&gt;
&lt;br /&gt;
== Recommended Hardware; A Little More Detail ==&lt;br /&gt;
&lt;br /&gt;
The previous section covered the bare-minimum system requirements for following this tutorial. If you are looking to build an &#039;&#039;Anvil!&#039;&#039; for production, we need to discuss important considerations for selecting hardware.&lt;br /&gt;
&lt;br /&gt;
=== The Most Important Consideration - Storage ===&lt;br /&gt;
&lt;br /&gt;
There is probably no single consideration more important than choosing the storage you will use.&lt;br /&gt;
&lt;br /&gt;
In our years of building &#039;&#039;Anvil!&#039;&#039; HA platforms, we&#039;ve found no single issue more important than storage latency. This is true for all virtualized environments, in fact.&lt;br /&gt;
&lt;br /&gt;
The problem is this:&lt;br /&gt;
&lt;br /&gt;
Multiple servers on shared storage can cause particularly random storage access. Traditional hard drives have disks with mechanical read/write heads on the ends of arms that sweep back and forth across the disk surfaces. These platters are broken up into &amp;quot;tracks&amp;quot; and each track is itself cut up into &amp;quot;sectors&amp;quot;. When a server needs to read or write data, the hard drive needs to sweep the arm over the track it wants and then wait there for the sector it wants to pass underneath.&lt;br /&gt;
&lt;br /&gt;
This time taken to get the read/write head onto the track and then wait for the sector to pass underneath is called &amp;quot;seek latency&amp;quot;. How long this latency actually is depends on a few things:&lt;br /&gt;
&lt;br /&gt;
* How fast are the platters rotating? The faster the platter speed, the less time it takes for a sector to pass under the read/write head.&lt;br /&gt;
* How fast the read/write arms can move and how far do they have to travel between tracks? Highly random read/write requests can cause a lot of head travel and increase seek time.&lt;br /&gt;
* How many read/write requests ([[IOPS]]) can your storage handle? If your storage can not process the incoming read/write requests fast enough, your storage can slow down or stall entirely.&lt;br /&gt;
&lt;br /&gt;
When many people think about hard drives, they generally worry about maximum write speeds. For environments with many virtual servers, this is actually far less important than it might seem. Reducing latency to ensure that read/write requests don&#039;t back up is far more important. This is measured as the storage&#039;s [[IOPS]] performance. If too many requests back up in the cache, storage performance can collapse or stall out entirely. &lt;br /&gt;
&lt;br /&gt;
This is particularly problematic when multiple servers try to boot at the same time. If, for example, a node with multiple servers dies, the surviving node will try to start the lost servers at nearly the same time. This causes a sudden dramatic rise in read requests and can cause all servers to hang entirely, a condition called a &amp;quot;boot storm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, this latency problem can be easily dealt with in one of three ways;&lt;br /&gt;
&lt;br /&gt;
# Use solid-state drives. These have no moving parts, so there is less penalty for highly random read/write requests.&lt;br /&gt;
# Use fast platter drives and proper [[RAID]] controllers with [[write-back]] caching.&lt;br /&gt;
# Isolate each server onto dedicated platter drives.&lt;br /&gt;
&lt;br /&gt;
Each of these solutions have benefits and downsides;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;amp;nbsp;&lt;br /&gt;
!Pro&lt;br /&gt;
!Con&lt;br /&gt;
|-&lt;br /&gt;
|Fast drives + [[Write-back caching]]&lt;br /&gt;
|15,000rpm SAS drives are extremely reliable and the high rotation speeds minimize latency caused by waiting for sectors to pass under the read/write heads. Using multiple drives in [[RAID]] [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_5|level 5]] or [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_6|level 6]] breaks up reads and writes into smaller pieces, allowing requests to be serviced quickly and to help keep the read/write buffer empty. Write-back caching allows RAM-like write speeds and the ability to re-order disk access to minimize head movement.&lt;br /&gt;
|The main con is the number of disks needed to get effective performance gains from [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|striping]]. Alteeve always uses a minimum of six disks, but many entry-level servers support a maximum of 4 drives. You need to account for the number of disks you plan to use when selecting your hardware.&lt;br /&gt;
|-&lt;br /&gt;
|SSDs&lt;br /&gt;
|They have no moving parts, so read and write requests do not have to wait for mechanical movements to happen, drastically reducing latency. The minimum number of drives for SSD-based configuration is two.&lt;br /&gt;
|Solid state drives use [[NAND]] flash, which can only be written to a finite number of times. All drives in our &#039;&#039;Anvil!&#039;&#039; will be written to roughly the same amount, so hitting this write-limit could mean that all drives in both nodes would fail at nearly the same time. Avoiding this requires careful monitoring of the drives and replacing them before their write limits are hit.&lt;br /&gt;
{{note|1=Enterprise grade SSDs are designed to handle highly random, multi-threaded workloads and come at a significant cost. Consumer-grade SSDs are designed principally for single threaded, large accesses and do not offer the same benefits.}}&lt;br /&gt;
|-&lt;br /&gt;
|Isolated Storage&lt;br /&gt;
|Dedicating hard drives to virtual servers avoids the highly random read/write issues found when multiple servers share the same storage. This allows for the safe use of cheap, inexpensive hard drives. This also means that dedicated hardware RAID controllers with battery-backed cache are not needed. This makes it possible to save a good amount of money in the hardware design.&lt;br /&gt;
|The obvious down-side to isolated storage is that you significantly limit the number of servers you can host on your &#039;&#039;Anvil!&#039;&#039;. If you only need to support one or two servers, this should not be an issue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last piece to consider is the interface of the drives used, be they SSDs or traditional HDDs. The two common interface types are [[SATA]] and [[SAS]]. &lt;br /&gt;
&lt;br /&gt;
* SATA HDD drives generally have a platter speed of 7,200rpm. The SATA interface has limited instruction set and provides minimal health reporting. These are &amp;quot;consumer&amp;quot; grade devices that are far less expensive, and far less reliable, than SAS drives.&lt;br /&gt;
* SAS drives are generally aimed at the enterprise environment and are built to much higher quality standards. SAS HDDs have rotational speeds of up to 15,000rpm and can handle far more read/write operations per second. Enterprise SSDs using the SAS interface are also much more reliable than their commercial counterpart. The main downside to SAS drives is their cost.  &lt;br /&gt;
&lt;br /&gt;
In all production environments, we strongly, strongly recommend SAS-connected drives. For non-production environments, SATA drives are fine.&lt;br /&gt;
&lt;br /&gt;
==== Extra Security - LSI SafeStore ====&lt;br /&gt;
&lt;br /&gt;
If security is a particular concern of yours, then you can look at using [https://en.wikipedia.org/wiki/Hardware-based_full_disk_encryption self-encrypting] hard drives along with LSI&#039;s [[LSI SafeStore|SafeStore]] option. An example hard drive, which we&#039;ve tested and validated, would be the Seagate [http://www.seagate.com/internal-hard-drives/enterprise-hard-drives/hdd/enterprise-performance-10K-hdd/ ST1800MM0038] drives. In general, if the drive advertises &amp;quot;[http://www.seagate.com/tech-insights/protect-data-with-seagate-secure-self-encrypting-drives-master-ti/ SED]&amp;quot; support, it should work fine.&lt;br /&gt;
&lt;br /&gt;
The provides the ability to:&lt;br /&gt;
* Encrypt all data with [https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES-256] grade encryption without a performance hit.&lt;br /&gt;
* Require a pass phrase on boot to decrypt the server&#039;s data.&lt;br /&gt;
* Protect the contents of the drives while &amp;quot;at rest&amp;quot; (ie: while being shipped somewhere).&lt;br /&gt;
* Execute a [https://github.com/digimer/striker/blob/master/tools/anvil-self-destruct self-destruct] sequence.&lt;br /&gt;
&lt;br /&gt;
Obviously, most users won&#039;t need this, but it might be useful to some users in sensitive environments like embassies in less than friendly host countries.&lt;br /&gt;
&lt;br /&gt;
=== RAM - Preparing for Degradation ===&lt;br /&gt;
&lt;br /&gt;
RAM is a far simpler topic than storage, thankfully. Here, all you need to do is add up how much RAM you plan to assign to servers, add at least 2 [[GiB]] for the host, and then install that much memory in both of your nodes. &lt;br /&gt;
&lt;br /&gt;
In production, there are two technologies you will want to consider;&lt;br /&gt;
&lt;br /&gt;
* [[ECC]], error-correcting code, provide the ability for RAM to recover from single-[[bit]] errors. If you are familiar with how [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|parity]] in RAID arrays work, ECC in RAM is the same idea. This is often included in server-class hardware by default. It is highly recommended.&lt;br /&gt;
* [http://www.fujitsu.com/global/services/computing/server/sparcenterprise/technology/availability/memory.html Memory Mirroring] is, continuing our storage comparison, [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] for RAM. All writes to memory go to two different chips. Should one fail, the contents of the RAM can still be read from the surviving module.&lt;br /&gt;
&lt;br /&gt;
=== Never Over-Provision! ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Over-provisioning&amp;quot;, also called &amp;quot;[https://en.wikipedia.org/wiki/Thin_provisioning thin provisioning]&amp;quot; is a concept made popular in many &amp;quot;cloud&amp;quot; technologies. It is a concept that has almost no place in HA environments.&lt;br /&gt;
&lt;br /&gt;
A common example is creating virtual disks of a given apparent size, but which only pull space from real storage as needed. So if you created a &amp;quot;thin&amp;quot; virtual disk that was 80 [[GiB]] large, but only 20 GiB worth of data was used, only 20 GiB from the real storage would be used. &lt;br /&gt;
&lt;br /&gt;
In essence; Over-provisioning is where you allocate more resources to servers than the nodes can actually provide, banking on the hopes that most servers will not use all of the resources allocated to them. The danger here, and the reason it has almost no place in HA, is that if the servers collectively use more resources than the nodes can provide, something is going to crash.&lt;br /&gt;
&lt;br /&gt;
=== CPU Cores - Possibly Acceptable Over-Provisioning ===&lt;br /&gt;
&lt;br /&gt;
Over provisioning of RAM and storage is never acceptable in an HA environment, as mentioned. Over-allocating CPU cores is possibly acceptable though.&lt;br /&gt;
&lt;br /&gt;
When selecting which CPUs to use in your nodes, the number of cores and the speed of the cores will determine how much computational horse-power you have to allocate to your servers. The main considerations are:&lt;br /&gt;
&lt;br /&gt;
* Core speed; Any given &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; can be processed by a single CPU core at a time. The faster the given core is, the faster it can process any given request. Many applications do not support [https://en.wikipedia.org/wiki/Thread_%28computing%29#Multithreading multithreading], meaning that the only way to improve performance is to use faster cores, not more cores.&lt;br /&gt;
* Core count; Some applications support breaking up jobs into many threads, and passing them to multiple CPU cores at the same time for simultaneous processing. This way, the application feels faster to users because each CPU has to do less work to get a job done. Another benefit of multiple cores is that if one application consumes the processing power of a single core, other cores remain available for other applications, preventing processor congestion.&lt;br /&gt;
&lt;br /&gt;
In processing, each CPU &amp;quot;[https://en.wikipedia.org/wiki/Multi-core_processor core]&amp;quot; can handle one program &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; at a time. Since the earliest days of [https://en.wikipedia.org/wiki/Multitasking multitasking], operating systems have been able to handle threads waiting for a CPU resource to free up. So the risk of over-provisioning CPUs is restricted to performance issues only.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re building an &#039;&#039;Anvil!&#039;&#039; to support multiple servers and it&#039;s important that, no matter how busy the other servers are, the performance of each server can not degrade, then you need to be sure you have as many real CPU cores as you plan to assign to servers.&lt;br /&gt;
&lt;br /&gt;
So for example, if you plan to have three servers and you plan to allocate each server four virtual CPU cores, you need a minimum of 13 real CPU cores (3 servers x 4 cores each plus at least one core for the node). In this scenario, you will want to choose servers with dual 8-core CPUs, for a total of 16 available real CPU cores. You may choose to buy two 6-core CPUs, for a total of 12 real cores, but you risk congestion still. If all three servers fully utilize their four cores at the same time, the host OS will be left with no available core for its software, which manages the HA stack.&lt;br /&gt;
&lt;br /&gt;
In many cases, however, risking a performance loss under periods of high CPU load is acceptable. In these cases, allocating more virtual cores than you have real cores is fine. Should the load of the servers climb to a point where all real cores are under 100% utilization, then some applications will slow down as they wait for their turn in the CPU.&lt;br /&gt;
&lt;br /&gt;
In the end, the decision whether to over-provision CPU cores or not, and if so by how much, is up to you, the reader. Remember to consider balancing out faster cores with the number of cores. If your expected load will be short bursts of computationally intense jobs, then few-but-faster cores may be the best solution.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Hyper-Threading ====&lt;br /&gt;
&lt;br /&gt;
Intel&#039;s [https://en.wikipedia.org/wiki/Hyper-threading hyper-threading] technology can make a CPU appear to the OS to have twice as many real cores than it actually has. For example, a CPU listed as &amp;quot;4c/8t&amp;quot; (four cores, eight threads) will appear to the node as an 8-core CPU. In fact, you only have four cores and the additional four cores are emulated attempts to make more efficient use of the processing of each core. &lt;br /&gt;
&lt;br /&gt;
Simply put, the idea behind this technology is to &amp;quot;slip in&amp;quot; a second thread when the CPU would otherwise be idle. For example, if the CPU core has to wait for memory to be fetched for the currently active thread, instead of sitting idle, a thread in the second core will be worked on. &lt;br /&gt;
&lt;br /&gt;
How much benefit this gives you in the real world is debatable and highly depended on your applications. For the purposes of HA, it&#039;s recommended to not count the &amp;quot;HT cores&amp;quot; as real cores. That is to say, when calculating load, treat &amp;quot;4c/8t&amp;quot; CPUs as a 4-core CPUs.&lt;br /&gt;
&lt;br /&gt;
=== Six Network Interfaces, Seriously? ===&lt;br /&gt;
&lt;br /&gt;
Yes, seriously.&lt;br /&gt;
&lt;br /&gt;
Obviously, you can put everything on a single network card and your HA software will work, but it would not be advised.&lt;br /&gt;
&lt;br /&gt;
We will go into the network configuration at length later on. For now, here&#039;s an overview:&lt;br /&gt;
&lt;br /&gt;
* Each network needs two links in order to be fault-tolerant. One link will go to the first network switch and the second link will go to the second network switch. This way, the failure of a network cable, port or switch will not interrupt traffic.&lt;br /&gt;
* There are three main networks in an &#039;&#039;Anvil!&#039;&#039;;&lt;br /&gt;
** Back-Channel Network; This is used by the cluster stack and is sensitive to latency. Delaying traffic on this network can cause the nodes to &amp;quot;partition&amp;quot;, breaking the cluster stack.&lt;br /&gt;
** Storage Network; All disk writes will travel over this network. As such, it is easy to saturate this network. Sharing this traffic with other services would mean that it&#039;s very possible to significantly impact network performance under high disk write loads. For this reason, it is isolated.&lt;br /&gt;
** Internet-Facing Network; This network carries traffic to and from your servers. By isolating this network, users of your servers will never experience performance loss during storage or cluster high loads. Likewise, if your users place a high load on this network, it will not impact the ability of the &#039;&#039;Anvil!&#039;&#039; to function properly. It also isolates untrusted network traffic.&lt;br /&gt;
&lt;br /&gt;
So, three networks, each using two links for redundancy, means that we need six network interfaces. It is strongly recommended that you use three separate dual-port network cards. Using a single network card, as we will discuss in detail later, leaves you vulnerable to losing entire networks should the controller fail.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Dedicated IPMI Interfaces ====&lt;br /&gt;
&lt;br /&gt;
Some server manufacturers provide access to [[IPMI]] using the same physical interface as one of the on-board network cards. Usually these companies provide optional upgrades to break the IPMI connection out to a dedicated network connector.&lt;br /&gt;
&lt;br /&gt;
Whenever possible, it is recommended that you go with a dedicated IPMI connection.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve found that it rarely, if ever, is possible for a node to talk to its own network interface using a shared physical port. This is not strictly a problem, but it can certainly make testing and diagnostics easier when the node can ping and query its own IPMI interface over the network.&lt;br /&gt;
&lt;br /&gt;
=== Network Switches ===&lt;br /&gt;
&lt;br /&gt;
The ideal switches to use in HA clusters are [https://en.wikipedia.org/wiki/Stackable_switch stackable] and [https://en.wikipedia.org/wiki/Managed_switch managed] switches in pairs. At the very least, a pair of switches that support [https://en.wikipedia.org/wiki/Virtual_LAN VLANs] is recommended. None of this is strictly required, but here are the reasons they&#039;re recommended:&lt;br /&gt;
&lt;br /&gt;
* VLAN allows for totally isolating the [[BCN]], [[SN]] and [[IFN]] traffic. This adds security and reduces broadcast traffic.&lt;br /&gt;
* Managed switches provide a unified interface for configuring both switches at the same time. This drastically simplifies complex configurations, like setting up VLANs that span the physical switches.&lt;br /&gt;
* Stacking provides a link between the two switches that effectively makes them work like one. Generally, the bandwidth available in the stack cable is much higher than the bandwidth of individual ports. This provides a high-speed link for all three VLANs in one cable and it allows for multiple links to fail without risking performance degradation. We&#039;ll talk more about this later.&lt;br /&gt;
&lt;br /&gt;
Beyond these suggested features, there are a few other things to consider when choosing switches:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!Consideration&lt;br /&gt;
|-&lt;br /&gt;
|[https://en.wikipedia.org/wiki/Maximum_transmission_unit MTU] size&lt;br /&gt;
|&lt;br /&gt;
# The default packet size on a network is 1500 [[bytes]]. If you build your VLANs in software, you need to account for the extra size needed for the VLAN header. If your switch supports &amp;quot;[https://en.wikipedia.org/wiki/Jumbo_Frames Jumbo Frames]&amp;quot;, then there should be no problem. However, some cheap switches do not support jumbo frames, requiring you to reduce the MTU size value for the interfaces on your nodes.&lt;br /&gt;
# If you have particularly large chunks of data to transmit, you may want to enable the largest MTU possible. This maximum value is determined by the smallest MTU in your network equipment. If you have nice network cards that support traditional 9 [[KiB]] MTU, but you have a cheap switch that supports a small jumbo frame, say 4 KiB, your effective MTU is 4 [[KiB]].&lt;br /&gt;
|-&lt;br /&gt;
|Packets Per Second&lt;br /&gt;
|This is a measure of how many packets can be routed per second, and generally is a reflection of the switch&#039;s processing power and memory. Cheaper switches will not have the ability to route a high number of packets at the same time, potentially causing congestion.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multicast]] Groups&lt;br /&gt;
|Some fancy switches, like some Cisco hardware, don&#039;t maintain multicast groups persistently. The cluster software uses multicast for communication, so if your switch drops a multicast group, it will cause your cluster to partition. If you have a managed switch, ensure that persistent multicast groups are enabled. We&#039;ll talk more about this later.&lt;br /&gt;
|-&lt;br /&gt;
|Port speed and count versus Internal Fabric Bandwidth&lt;br /&gt;
|A switch that has, say, 48 [[Gbps]] ports may not be able to route 48 Gbps. This is a problem similar to over-provisioning we discussed above. If an inexpensive 48 port switch has an internal switch fabric of only 20 Gbps, then it can handle only up to 20 saturated ports at a time. Be sure to review the internal fabric capacity and make sure it&#039;s high enough to handle all connected interfaces running full speed. Note, of course, that only one link in a given [[network bonding|bond]] will be active at a time.&lt;br /&gt;
|-&lt;br /&gt;
|Uplink speed&lt;br /&gt;
|If you have a gigabit switch and you simply link the ports between the two switches, the link speed will be limited to 1 gigabit. Normally, all traffic will be kept on one switch, so this is fine. If a single link fails over to the backup switch, then its traffic will bounce up via the uplink cable to the main switch at full speed. However, if a second link fails, both will be sharing the single gigabit uplink, so there is a risk of congestion on the link. If you can&#039;t get stacked switches, which generally have 10 Gbps speeds or higher, then look for switches with 10 Gbps dedicated uplink ports and use those for uplinks.&lt;br /&gt;
|-&lt;br /&gt;
|Uplinks and VLANs&lt;br /&gt;
|When using normal ports for uplinks with VLANs defined in the switch, each uplink port will be restricted to the VLAN it is a member of. In this case, you will need one uplink cable per VLAN.&lt;br /&gt;
|-&lt;br /&gt;
|Port [https://en.wikipedia.org/wiki/Link_aggregation Trunking]&lt;br /&gt;
|If your existing network supports it, choosing a switch with port trunking provides a backup link from the foundation pack switches to the main network. This extends the network redundancy out to the rest of your network. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are numerous other valid considerations when choosing network switches for your &#039;&#039;Anvil!&#039;&#039;. These are the most prescient considerations, though.&lt;br /&gt;
&lt;br /&gt;
=== Why Switched PDUs? ===&lt;br /&gt;
&lt;br /&gt;
We will discuss this in detail later on, but in short, when a node stops responding, we can not simply assume that it is dead. To do so would be to risk a &amp;quot;[[split-brain]]&amp;quot; condition which can lead to data divergence, data loss and data corruption.&lt;br /&gt;
&lt;br /&gt;
To deal with this, we need a mechanism of putting a node that is in an unknown state into a known state. A process called &amp;quot;[[fencing]]&amp;quot;. Many people who build HA platforms use the [[IPMI]] interface for this purpose, as will we. The idea here is that, when a node stops responding, the surviving node connects to the lost node&#039;s [[IPMI]] interface and forces the machine to power off. The IPMI [[BMC]] is, effectively, a little computer inside the main computer, so it will work regardless of what state the node itself is in.&lt;br /&gt;
&lt;br /&gt;
Once the node has been confirmed to be off, the services that had been running on it can be restarted on the remaining good node, safe in knowing that the lost peer is not also hosting these services. In our case, these &amp;quot;services&amp;quot; are the shared storage and the virtual servers.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this though. Actually, two.&lt;br /&gt;
&lt;br /&gt;
# The IPMI draws its power from the same power source as the server itself. If the host node loses power entirely, IPMI goes down with the host.&lt;br /&gt;
# The IPMI BMC has a single network interface and it is a single device. &lt;br /&gt;
&lt;br /&gt;
If we relied on IPMI-based fencing alone, we&#039;d have a single point of failure. If the surviving node can not put the lost node into a known state, it will intentionally hang. The logic being that a hung cluster is better than risking corruption or a [[split-brain]]. This means that, with IPMI-based fencing alone, the loss of power to a single node would not be automatically recoverable.&lt;br /&gt;
&lt;br /&gt;
That just will not do!&lt;br /&gt;
&lt;br /&gt;
To make fencing redundant, we will use switched [[PDU]]s. Think of these as network-connected power bars.&lt;br /&gt;
&lt;br /&gt;
Imagine now that one of the nodes blew itself up. The surviving node would try to connect to its IPMI interface and, of course, get no response. Then it would log into both PDUs (one behind either side of the redundant power supplies) and cut the power going to the node. By doing this, we now have a way of putting a lost node into a known state.&lt;br /&gt;
&lt;br /&gt;
So now, no matter how badly things go wrong, we can always recover!&lt;br /&gt;
&lt;br /&gt;
=== Network Managed UPSes Are Worth It ===&lt;br /&gt;
&lt;br /&gt;
We have found that a surprising number of issues that affect service availability are power related. A network-connected smart UPS allows you to monitor the power coming from the building mains. Thanks to this, we&#039;ve been able to detect far more than simple &amp;quot;lost power&amp;quot; events. We&#039;ve been able to detect failing transformers and regulators, over and under voltage events and so on. Events that, if caught ahead of time, avoid full power outages. It also protects the rest of your gear that isn&#039;t behind a UPS.&lt;br /&gt;
&lt;br /&gt;
So strictly speaking, you don&#039;t need network managed UPSes. However, we have found them to be [http://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427ebgdg6ijlui worth their weight in gold]. We will, of course, be using them in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Dashboard Servers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; will be managed by [[AN!CDB - Cluster Dashboard]], a small little dedicated server. This can be a virtual machine on a laptop or desktop, or a dedicated little server. All that matters is that it can run [[RHEL]] or [[CentOS]] version 6 with a minimal desktop.&lt;br /&gt;
&lt;br /&gt;
Normally, we setup a couple of [http://www.asus.com/ca-en/Eee_Box_PCs/EeeBox_PC_EB1033 ASUS EeeBox] machines, for redundancy of course, hanging off the back of a monitor. Users can connect to the dashboard using a browser from any device and control the servers and nodes easily from it. It also provides [https://en.wikipedia.org/wiki/KVM_switch KVM-like] access to the servers on the &#039;&#039;Anvil!&#039;&#039;, allowing them to work on the servers when they can&#039;t connect over the network. For this reason, you will probably want to pair up the dashboard machines with a monitor that offers a decent resolution to make it easy to see the desktop of the hosted servers.&lt;br /&gt;
&lt;br /&gt;
== What You Should Know Before Beginning ==&lt;br /&gt;
&lt;br /&gt;
It is assumed that you are familiar with Linux systems administration, specifically [[Red Hat]] [[Enterprise Linux]] and its derivatives. You will need to have somewhat advanced networking experience as well. You should be comfortable working in a terminal (directly or over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ssh]]&amp;lt;/span&amp;gt;). Familiarity with [[XML]] will help, but is not terribly required as its use here is pretty self-evident.&lt;br /&gt;
&lt;br /&gt;
If you feel a little out of depth at times, don&#039;t hesitate to set this tutorial aside. Browse over to the components you feel the need to study more, then return and continue on. Finally, and perhaps most importantly, you &#039;&#039;&#039;must&#039;&#039;&#039; have patience! If you have a manager asking you to &amp;quot;go live&amp;quot; with a cluster in a month, tell him or her that it simply &#039;&#039;&#039;won&#039;t happen&#039;&#039;&#039;. If you rush, you will skip important points and &#039;&#039;&#039;you will fail&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Patience is vastly more important than any pre-existing skill.&lt;br /&gt;
&lt;br /&gt;
== A Word on Complexity ==&lt;br /&gt;
&lt;br /&gt;
Introducing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Fabimer principle&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Clustering is not inherently hard, but it is inherently complex. Consider:&lt;br /&gt;
&lt;br /&gt;
* Any given program has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; bugs.&lt;br /&gt;
** [[RHCS]] uses; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, and many more smaller apps.&lt;br /&gt;
** We will be adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DRBD&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GFS2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;KVM&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Right there, we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N * 10&amp;lt;/span&amp;gt; possible bugs. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;.&lt;br /&gt;
* A cluster has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt; nodes.&lt;br /&gt;
** In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; nodes, each with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; networks across &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; interfaces bonded into pairs.&lt;br /&gt;
** The network infrastructure (Switches, routers, etc). We will be using two managed switches, adding another layer of complexity.&lt;br /&gt;
** This gives us another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y * (2*(3*2))+2&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;+2&amp;lt;/span&amp;gt; for managed switches. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;B&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Let&#039;s add the human factor. Let&#039;s say that a person needs roughly 5 years of cluster experience to be considered an proficient. For each year less than this, add a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Z&amp;lt;/span&amp;gt; &amp;quot;oops&amp;quot; factor, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(5-Z) * 2&amp;lt;/span&amp;gt;. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt;.&lt;br /&gt;
* So, finally, add up the complexity, using this tutorial&#039;s layout, 0-years of experience and managed switches.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(N * 10) * (Y * (2*(3*2))+2) * ((5-0) * 2) == (A * B * C)&amp;lt;/span&amp;gt; == an-unknown-but-big-number.&lt;br /&gt;
&lt;br /&gt;
This isn&#039;t meant to scare you away, but it is meant to be a sobering statement. Obviously, those numbers are somewhat artificial, but the point remains.&lt;br /&gt;
&lt;br /&gt;
Any one piece is easy to understand, thus, clustering is inherently easy. However, given the large number of variables, you must really understand all the pieces and how they work together. &#039;&#039;&#039;&#039;&#039;DO NOT&#039;&#039;&#039;&#039;&#039; think that you will have this mastered and working in a month. Certainly don&#039;t try to sell clusters as a service without a &#039;&#039;lot&#039;&#039; of internal testing.&lt;br /&gt;
&lt;br /&gt;
Clustering is kind of like chess. The rules are pretty straight forward, but the complexity can take some time to master.&lt;br /&gt;
&lt;br /&gt;
= Overview of Components =&lt;br /&gt;
&lt;br /&gt;
When looking at a cluster, there is a tendency to want to dive right into the configuration file. That is not very useful in clustering.&lt;br /&gt;
&lt;br /&gt;
* When you look at the configuration file, it is quite short.&lt;br /&gt;
&lt;br /&gt;
Clustering isn&#039;t like most applications or technologies. Most of us learn by taking something such as a configuration file, and tweaking it to see what happens. I tried that with clustering and learned only what it was like to bang my head against the wall.&lt;br /&gt;
&lt;br /&gt;
* Understanding the parts and how they work together is critical.&lt;br /&gt;
&lt;br /&gt;
You will find that the discussion on the components of clustering, and how those components and concepts interact, will be much longer than the initial configuration. It is true that we could talk very briefly about the actual syntax, but it would be a disservice. Please don&#039;t rush through the next section, or worse, skip it and go right to the configuration. You will waste far more time than you will save.&lt;br /&gt;
&lt;br /&gt;
* Clustering is easy, but it has a complex web of inter-connectivity. You must grasp this network if you want to be an effective cluster administrator!&lt;br /&gt;
&lt;br /&gt;
== Component; Cman ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; portion of the the cluster is the &#039;&#039;&#039;c&#039;&#039;&#039;luster &#039;&#039;&#039;man&#039;&#039;&#039;ager. In the 3.0 series used in [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; acts mainly as a [[quorum]] provider. That is, is adds up the votes from the cluster members and decides if there is a simple majority. If there is, the cluster is &amp;quot;quorate&amp;quot; and is allowed to provide cluster services. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; service will be used to start and stop all of the components needed to make the cluster operate.&lt;br /&gt;
&lt;br /&gt;
== Component; Corosync ==&lt;br /&gt;
&lt;br /&gt;
Corosync is the heart of the cluster. Almost all other cluster compnents operate though this.&lt;br /&gt;
&lt;br /&gt;
In Red Hat clusters, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is configured via the central &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. It can be configured directly in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt;, but given that we will be building an RHCS cluster, we will only use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. That said, almost all &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt; options are available in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. This is important to note as you will see references to both configuration files when searching the Internet.&lt;br /&gt;
&lt;br /&gt;
Corosync sends messages using [[multicast]] messaging by default. Recently, [[unicast]] support has been added, but due to network latency, it is only recommended for use with small clusters of two to four nodes. We will be using [[multicast]] in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== A Little History ===&lt;br /&gt;
&lt;br /&gt;
There were significant changes between [[RHCS]] the old version 2 and version 3 available on [[EL6]], which we are using.&lt;br /&gt;
&lt;br /&gt;
In the RHCS version 2, there was a component called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;openais&amp;lt;/span&amp;gt; which provided &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt;. The OpenAIS project was designed to be the heart of the cluster and was based around the [http://www.saforum.org/ Service Availability Forum]&#039;s [http://www.saforum.org/Application-Interface-Specification~217404~16627.htm Application Interface Specification]. AIS is an open [[API]] designed to provide inter-operable high availability services.&lt;br /&gt;
&lt;br /&gt;
In 2008, it was decided that the AIS specification was overkill for most clustered applications being developed in the open source community.  At that point, OpenAIS was split in to two projects: Corosync and OpenAIS. The former, Corosync, provides totem, cluster membership, messaging, and basic APIs for use by clustered applications, while the OpenAIS project became an optional add-on to corosync for users who want the full AIS API.&lt;br /&gt;
&lt;br /&gt;
You will see a lot of references to OpenAIS while searching the web for information on clustering. Understanding its evolution will hopefully help you avoid confusion.&lt;br /&gt;
&lt;br /&gt;
=== The Future of Corosync ===&lt;br /&gt;
&lt;br /&gt;
In [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is version 1.4. Upstream, however, it&#039;s passed version 2. One of the major changes in the 2+ version is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; becomes a quorum provider, helping to remove the need for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. If you experiment with clustering on [[Fedora]], for example, you will find that cman is gone entirely.&lt;br /&gt;
&lt;br /&gt;
== Concept; Quorum ==&lt;br /&gt;
&lt;br /&gt;
[[Quorum]] is defined as the minimum set of hosts required in order to provide clustered services and is used to prevent [[split-brain]] situations.&lt;br /&gt;
&lt;br /&gt;
The quorum algorithm used by the RHCS cluster is called &amp;quot;simple majority quorum&amp;quot;, which means that more than half of the hosts must be online and communicating in order to provide service. While simple majority quorum is a very common quorum algorithm, other quorum algorithms exist ([[grid quorum]], [[YKD Dyanamic Linear Voting]], etc.).&lt;br /&gt;
&lt;br /&gt;
The idea behind quorum is that, when a cluster splits into two or more partitions, which ever group of machines has quorum can safely start clustered services knowing that no other lost nodes will try to do the same.&lt;br /&gt;
&lt;br /&gt;
Take this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a cluster of four nodes, each with one vote.&lt;br /&gt;
** The cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;. A clear majority, in this case, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; because &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(4/2)+1&amp;lt;/span&amp;gt;, rounded down, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Now imagine that there is a failure in the network equipment and one of the nodes disconnects from the rest of the cluster.&lt;br /&gt;
** You now have two partitions; One partition contains three machines and the other partition has one.&lt;br /&gt;
** The three machines will have quorum, and the other machine will lose quorum.&lt;br /&gt;
** The partition with quorum will reconfigure and continue to provide cluster services.&lt;br /&gt;
** The partition without quorum will withdraw from the cluster and shut down all cluster services.&lt;br /&gt;
&lt;br /&gt;
When the cluster reconfigures and the partition wins quorum, it will fence the node(s) in the partition without quorum. Once the fencing has been confirmed successful, the partition with quorum will begin accessing clustered resources, like shared filesystems.&lt;br /&gt;
&lt;br /&gt;
This also helps explain why an even &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; is not enough to have quorum, a common question for people new to clustering. Using the above scenario, imagine if the split were 2 and 2 nodes. Because either can&#039;t be sure what the other would do, neither can safely proceed. If we allowed an even 50% to have quorum, both partition might try to take over the clustered services and disaster would soon follow.&lt;br /&gt;
&lt;br /&gt;
There is one, and &#039;&#039;&#039;only&#039;&#039;&#039; one except to this rule.&lt;br /&gt;
&lt;br /&gt;
In the case of a two node cluster, as we will be building here, any failure results in a 50/50 split. If we enforced quorum in a two-node cluster, there would never be high availability because and failure would cause both nodes to withdraw. The risk with this exception is that we now place the entire safety of the cluster on [[fencing]], a concept we will cover in a second. Fencing is a second line of defense and something we are loath to rely on alone.&lt;br /&gt;
&lt;br /&gt;
Even in a two-node cluster though, proper quorum can be maintained by using a quorum disk, called a [[qdisk]]. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; on a [[DRBD]] resource comes with its own problems, so we will not be able to use it here.&lt;br /&gt;
&lt;br /&gt;
== Concept; Virtual Synchrony ==&lt;br /&gt;
&lt;br /&gt;
Many cluster operations, like distributed locking and so on, have to occur in the same order across all nodes. This concept is called &amp;quot;virtual synchrony&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; using &amp;quot;closed process groups&amp;quot;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[CPG]]&amp;lt;/span&amp;gt;. A closed process group is simply a private group of processes in a cluster. Within this closed group, all messages between members are ordered. Delivery, however, is not guaranteed. If a member misses messages, it is up to the member&#039;s application to decide what action to take.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at two scenarios showing how locks are handled using CPG:&lt;br /&gt;
&lt;br /&gt;
* The cluster starts up cleanly with two members.&lt;br /&gt;
* Both members are able to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Both want to start it, but need a lock from [[DLM]] to do so.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member has its totem token, and sends its request for the lock.&lt;br /&gt;
** DLM issues a lock for that service to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member requests a lock for the same service.&lt;br /&gt;
** DLM rejects the lock request.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member successfully starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; and announces this to the CPG members.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sees that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; is now running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and no longer tries to start the service.&lt;br /&gt;
&lt;br /&gt;
* The two members want to write to a common area of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; GFS2 partition.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sends a request for a DLM lock against the FS, gets it.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; sends a request for the same lock, but DLM sees that a lock is pending and rejects the request.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member finishes altering the file system, announces the changed over CPG and releases the lock.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member updates its view of the filesystem, requests a lock, receives it and proceeds to update the filesystems.&lt;br /&gt;
** It completes the changes, annouces the changes over CPG and releases the lock.&lt;br /&gt;
&lt;br /&gt;
Messages can only be sent to the members of the CPG while the node has a totem token from corosync.&lt;br /&gt;
&lt;br /&gt;
== Concept; Fencing ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=DO NOT BUILD A CLUSTER WITHOUT PROPER, WORKING AND TESTED FENCING.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:fence_meme.jpg|right|300px|thumb|Laugh, but this is a weekly conversation.]]&lt;br /&gt;
&lt;br /&gt;
Fencing is a &#039;&#039;&#039;absolutely critical&#039;&#039;&#039; part of clustering. Without &#039;&#039;&#039;fully&#039;&#039;&#039; working fence devices, &#039;&#039;&#039;&#039;&#039;your cluster will fail&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sorry, I promise that this will be the only time that I speak so strongly. Fencing really is critical, and explaining the need for fencing is nearly a weekly event. &lt;br /&gt;
&lt;br /&gt;
So then, let&#039;s discuss fencing.&lt;br /&gt;
&lt;br /&gt;
When a node stops responding, an internal timeout and counter start ticking away. During this time, no [[DLM]] locks are allowed to be issued. Anything using DLM, including &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, are effectively hung. The hung node is detected using a totem token timeout. That is, if a token is not received from a node within a period of time, it is considered lost and a new token is sent. After a certain number of lost tokens, the cluster declares the node dead. The remaining nodes reconfigure into a new cluster and, if they have quorum (or if quorum is ignored), a fence call against the silent node is made.&lt;br /&gt;
&lt;br /&gt;
The fence daemon will look at the cluster configuration and get the fence devices configured for the dead node. Then, one at a time and in the order that they appear in the configuration, the fence daemon will call those fence devices, via their fence agents, passing to the fence agent any configured arguments like username, password, port number and so on. If the first fence agent returns a failure, the next fence agent will be called. If the second fails, the third will be called, then the forth and so on. Once the last (or perhaps only) fence device fails, the fence daemon will retry again, starting back at the start of the list. It will do this indefinitely until one of the fence devices succeeds.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow, in point form:&lt;br /&gt;
&lt;br /&gt;
* The totem token moves around the cluster members. As each member gets the token, it sends sequenced messages to the CPG members.&lt;br /&gt;
* The token is passed from one node to the next, in order and continuously during normal operation.&lt;br /&gt;
* Suddenly, one node stops responding.&lt;br /&gt;
** A timeout starts (~&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238&amp;lt;/span&amp;gt;ms by default), and each time the timeout is hit, and error counter increments and a replacement token is created.&lt;br /&gt;
** The silent node responds before the failure counter reaches the limit.&lt;br /&gt;
*** The failure counter is reset to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
*** The cluster operates normally again.&lt;br /&gt;
* Again, one node stops responding.&lt;br /&gt;
** Again, the timeout begins. As each totem token times out, a new packet is sent and the error count increments.&lt;br /&gt;
** The error counts exceed the limit (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; errors is the default); Roughly one second has passed (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238ms * 4&amp;lt;/span&amp;gt; plus some overhead).&lt;br /&gt;
** The node is declared dead.&lt;br /&gt;
** The cluster checks which members it still has, and if that provides enough votes for quorum.&lt;br /&gt;
*** If there are too few votes for quorum, the cluster software freezes and the node(s) withdraw from the cluster.&lt;br /&gt;
*** If there are enough votes for quorum, the silent node is declared dead.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, telling it to fence the node.&lt;br /&gt;
**** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon notifies [[DLM]] and locks are blocked.&lt;br /&gt;
**** Which fence device(s) to use, that is, what &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to call and what arguments to pass, is gathered.&lt;br /&gt;
**** For each configured fence device:&lt;br /&gt;
***** The agent is called and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; waits for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to exit.&lt;br /&gt;
***** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt;&#039;s exit code is examined. If it&#039;s a success, recovery starts. If it failed, the next configured fence agent is called.&lt;br /&gt;
**** If all (or the only) configured fence fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will start over.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will wait and loop forever until a fence agent succeeds. During this time, &#039;&#039;&#039;the cluster is effectively hung&#039;&#039;&#039;.&lt;br /&gt;
*** Once a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; succeeds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; notifies DLM and lost locks are recovered.&lt;br /&gt;
**** [[GFS2]] partitions recover using their journal.&lt;br /&gt;
**** Lost cluster resources are recovered as per &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;&#039;s configuration (including file system recovery as needed).&lt;br /&gt;
* Normal cluster operation is restored, minus the lost node.&lt;br /&gt;
&lt;br /&gt;
This skipped a few key things, but the general flow of logic should be there.&lt;br /&gt;
&lt;br /&gt;
This is why fencing is so important. Without a properly configured and tested fence device or devices, the cluster will never successfully fence and the cluster will remain hung until a human can intervene.&lt;br /&gt;
&lt;br /&gt;
=== Is &amp;quot;Fencing&amp;quot; the same as STONITH? ===&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
In the old days, there were two distinct open-source HA clustering stacks. The Linux-HA&#039;s project used the term &amp;quot;STONITH&amp;quot;, an acronym for &amp;quot;Shoot The Other Node In The Head&amp;quot;, for fencing. Red Hat&#039;s cluster stack used the term &amp;quot;fencing&amp;quot; for the same concept.&lt;br /&gt;
&lt;br /&gt;
We prefer the term &amp;quot;fencing&amp;quot; because the fundamental goal is to put the target node into a state where it can not effect cluster resources or provide clustered services. This can be accomplished by powering it off, called &amp;quot;power fencing&amp;quot;, or by disconnecting it from SAN storage and/or network, a process called &amp;quot;fabric fencing&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;STONITH&amp;quot;, based on its acronym, implies power fencing. This is not a big deal, but it is the reason this tutorial sticks with the term &amp;quot;fencing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Component; Totem ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; protocol defines message passing within the cluster and it is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;. A token is passed around all the nodes in the cluster, and nodes can only send messages while they have the token. A node will keep its messages in memory until it gets the token back with no &amp;quot;not ack&amp;quot; messages. This way, if a node missed a message, it can request it be resent when it gets its token. If a node isn&#039;t up, it will simply miss the messages.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt; protocol supports something called &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;&#039;, &#039;&#039;&#039;R&#039;&#039;&#039;edundant &#039;&#039;&#039;R&#039;&#039;&#039;ing &#039;&#039;&#039;P&#039;&#039;&#039;rotocol. Through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;, you can add a second backup ring on a separate network to take over in the event of a failure in the first ring. In RHCS, these rings are known as &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 0&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 1&amp;lt;/span&amp;gt;&amp;quot;. The RRP is being re-introduced in RHCS version 3. Its use is experimental and should only be used with plenty of testing.&lt;br /&gt;
&lt;br /&gt;
== Component; Rgmanager ==&lt;br /&gt;
&lt;br /&gt;
When the cluster membership changes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; that it needs to recheck its services. It will examine what changed and then will start, stop, migrate or recover cluster resources as needed.&lt;br /&gt;
&lt;br /&gt;
Within &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, one or more &#039;&#039;resources&#039;&#039; are brought together as a &#039;&#039;service&#039;&#039;. This service is then optionally assigned to a &#039;&#039;failover domain&#039;&#039;, an subset of nodes that can have preferential ordering.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; daemon runs separately from the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. This means that, to fully start the cluster, we need to start both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What about Pacemaker? ===&lt;br /&gt;
&lt;br /&gt;
[[Pacemaker]] is also a resource manager, like rgmanager. You can not use both in the same cluster.&lt;br /&gt;
&lt;br /&gt;
Back prior to 2008, there were two distinct open-source cluster projects:&lt;br /&gt;
&lt;br /&gt;
* Red Hat&#039;s Cluster Service&lt;br /&gt;
* Linux-HA&#039;s Heartbeat&lt;br /&gt;
&lt;br /&gt;
Pacemaker was born out of the Linux-HA project as an advanced resource manager that could use either heartbeat or openais for cluster membership and communication. Unlike RHCS and heartbeat, its sole focus was resource management.&lt;br /&gt;
&lt;br /&gt;
In 2008, plans were made to begin the slow process of merging the two independent stacks into one. As mentioned in the corosync overview, it replaced openais and became the default cluster membership and communication layer for both RHCS and Pacemaker. Development of heartbeat was ended, though [http://www.linbit.com/en/company/news/125-linbit-takes-over-heartbeat-maintenance Linbit] continues to maintain the heartbeat code to this day.&lt;br /&gt;
&lt;br /&gt;
The fence and resource agents, software that acts as a glue between the cluster and the devices and resource they manage, were merged next. You can now use the same set of agents on both pacemaker and RHCS.&lt;br /&gt;
&lt;br /&gt;
Red Hat introduced pacemaker as &amp;quot;Tech Preview&amp;quot; in [[RHEL]] 6.0. It has been available beside RHCS ever since, though support is not offered yet[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6-Beta/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ *].&lt;br /&gt;
&lt;br /&gt;
{{note|1=Pacemaker entered full support with the release of RHEL 6.5. It is also the only available HA stack on RHEL 7 beta. This is a strong indication that, indeed, corosync and pacemaker will be the future HA stack on RHEL.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat has a strict policy of not saying what will happen in the future. That said, the speculation is that Pacemaker will become supported soon and will replace rgmanager entirely in RHEL 7, given that cman and rgmanager no longer exist upstream in Fedora.&lt;br /&gt;
&lt;br /&gt;
So why don&#039;t we use pacemaker here?&lt;br /&gt;
&lt;br /&gt;
We believe that, no matter how promising software looks, stability is king. Pacemaker on other distributions has been stable and supported for a long time. However, on RHEL, it&#039;s a recent addition and the developers have been doing a tremendous amount of work on pacemaker and associated tools. For this reason, we feel that on RHEL 6, pacemaker is too much of a moving target at this time. That said, we do intend to switch to pacemaker some time in the next year or two, depending on how the Red Hat stack evolves.&lt;br /&gt;
&lt;br /&gt;
== Component; Qdisk ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; does not work reliably on a DRBD resource, so we will not be using it in this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
A Quorum disk, known as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; is small partition on [[SAN]] storage used to enhance quorum. It generally carries enough votes to allow even a single node to take quorum during a cluster partition. It does this by using configured heuristics, that is custom tests, to decided which node or partition is best suited for providing clustered services during a cluster reconfiguration. These heuristics can be simple, like testing which partition has access to a given router, or they can be as complex as the administrator wishes using custom scripts.&lt;br /&gt;
&lt;br /&gt;
Though we won&#039;t be using it here, it is well worth knowing about when you move to a cluster with [[SAN]] storage.&lt;br /&gt;
&lt;br /&gt;
== Component; DRBD ==&lt;br /&gt;
&lt;br /&gt;
[[DRBD]]; Distributed Replicating Block Device, is a technology that takes raw storage from two nodes and keeps their data synchronized in real time. It is sometimes described as &amp;quot;network [[RAID_level_5#Level_1|RAID Level 1]]&amp;quot;, and that is conceptually accurate. In this tutorial&#039;s cluster, DRBD will be used to provide that back-end storage as a cost-effective alternative to a traditional [[SAN]] device.&lt;br /&gt;
&lt;br /&gt;
DRBD is, fundamentally, a raw block device. If you&#039;ve ever used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[mdadm]]&amp;lt;/span&amp;gt; to create a software RAID array, then you will be familiar with this.&lt;br /&gt;
&lt;br /&gt;
Think of it this way;&lt;br /&gt;
&lt;br /&gt;
With traditional software raid, you would take:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sdb5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With DRBD, you have this:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node1:/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node2:/dev/sda5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;both:/dev/drbd0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, as soon as you create the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;md0&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd0&amp;lt;/span&amp;gt; device, you pretend like the member devices no longer exist. You format a [[filesystem]] onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;, use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; as an [[LVM]] physical volume, and so on.&lt;br /&gt;
&lt;br /&gt;
The main difference with DRBD is that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; will always be the same on both nodes. If you write something to node 1, it&#039;s instantly available on node 2, and vice versa. Of course, this means that what ever you put on top of DRBD has to be &amp;quot;cluster aware&amp;quot;. That is to say, the program or file system using the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; device has to understand that the contents of the disk might change because of another node.&lt;br /&gt;
&lt;br /&gt;
== Component; Clustered LVM ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the raw storage for the cluster, we must next consider partitions. This is where Clustered [[LVM]], known as [[CLVM]], comes into play.&lt;br /&gt;
&lt;br /&gt;
CLVM is ideal in that by using [[DLM]], the distributed lock manager. It won&#039;t allow access to cluster members outside of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;&#039;s closed process group, which, in turn, requires quorum.&lt;br /&gt;
&lt;br /&gt;
It is ideal because it can take one or more raw devices, known as &amp;quot;physical volumes&amp;quot;, or simple as [[PV]]s, and combine their raw space into one or more &amp;quot;volume groups&amp;quot;, known as [[VG]]s. These volume groups then act just like a typical hard drive and can be &amp;quot;partitioned&amp;quot; into one or more &amp;quot;logical volumes&amp;quot;, known as [[LV]]s. These LVs are where [[KVM]]&#039;s virtual machine guests will exist and where we will create our [[GFS2]] clustered file system.&lt;br /&gt;
&lt;br /&gt;
LVM is particularly attractive because of how flexible it is. We can easily add new physical volumes later, and then grow an existing volume group to use the new space. This new space can then be given to existing logical volumes, or entirely new logical volumes can be created. This can all be done while the cluster is online offering an upgrade path with no down time.&lt;br /&gt;
&lt;br /&gt;
== Component; GFS2 ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the clusters raw storage space, and [[Clustered LVM]] providing the logical partitions, we can now look at the clustered file system. This is the role of the Global File System version 2, known simply as [[GFS2]].&lt;br /&gt;
&lt;br /&gt;
It works much like standard filesystem, with user-land tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck.gfs2&amp;lt;/span&amp;gt; and so on. The major difference is that it and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; use the cluster&#039;s [[DLM|distributed locking mechanism]] provided by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; daemon. Once formatted, the GFS2-formatted partition can be mounted and used by any node in the cluster&#039;s [[CPG|closed process group]]. All nodes can then safely read from and write to the data on the partition simultaneously.&lt;br /&gt;
&lt;br /&gt;
{{note|1=GFS2 is &#039;&#039;&#039;only&#039;&#039;&#039; supported when run on top of Clustered LVM [[LV]]s. This is because, in certain error states, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_controld&amp;lt;/span&amp;gt; will call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to disconnect the GFS2 partition from its storage in certain failure states.}}&lt;br /&gt;
&lt;br /&gt;
== Component; DLM ==&lt;br /&gt;
&lt;br /&gt;
One of the major roles of a cluster is to provide [[DLM|distributed locking]] for clustered storage and resource management.&lt;br /&gt;
&lt;br /&gt;
Whenever a resource, GFS2 filesystem or clustered LVM LV needs a lock, it sends a request to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; which runs in userspace. This communicates with DLM in kernel. If the lockspace does not yet exist, DLM will create it and then give the lock to the requester. Should a subsequant lock request come in for the same lockspace, it will be rejected. Once the application using the lock is finished with it, it will release the lock. After this, another node may request and receive a lock for the lockspace.&lt;br /&gt;
&lt;br /&gt;
If a node fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; that a fence is pending and new lock requests will block. After a successful fence, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert DLM that the node is gone and any locks the victim node held are released. At this time, other nodes may request a lock on the lockspaces the lost node held and can perform recovery, like replaying a GFS2 filesystem journal, prior to resuming normal operation.&lt;br /&gt;
&lt;br /&gt;
Note that DLM locks are not used for actually locking the file system. That job is still handled by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;plock()&amp;lt;/span&amp;gt; calls ([[POSIX]] locks).&lt;br /&gt;
&lt;br /&gt;
== Component; KVM ==&lt;br /&gt;
&lt;br /&gt;
Two of the most popular open-source virtualization platforms available in the Linux world today and [[Xen]] and [[KVM]]. The former is maintained by [http://www.citrix.com/xenserver Citrix] and the other by [http://www.redhat.com/solutions/virtualization/ Redhat]. It would be difficult to say which is &amp;quot;better&amp;quot;, as they&#039;re both very good. Xen can be argued to be more mature where KVM is the &amp;quot;official&amp;quot; solution supported by Red Hat in [[EL6]].&lt;br /&gt;
&lt;br /&gt;
We will be using the KVM [[hypervisor]] within which our highly-available virtual machine guests will reside. It is a type-1 hypervisor, which means that the host operating system runs directly on the bare hardware. Contrasted against Xen, which is a type-2 hypervisor where even the installed OS is itself just another virtual machine.&lt;br /&gt;
&lt;br /&gt;
= Node Installation =&lt;br /&gt;
&lt;br /&gt;
We need a baseline, a minimum system requirement of sorts. I will refer fairly frequently to the specific setup I used. Please don&#039;t take this as &amp;quot;the ideal setup&amp;quot; though... Every cluster will have its own needs, and you should plan and purchase for your particular needs.&lt;br /&gt;
&lt;br /&gt;
== Node Host Names ==&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&lt;br /&gt;
&lt;br /&gt;
We need to decide what naming convention and IP ranges to use for our nodes and their networks.&lt;br /&gt;
&lt;br /&gt;
The IP addresses and subnets you decide to use are completely up to you. The host names though need to follow a certain standard, &#039;&#039;&#039;if&#039;&#039;&#039; you wish to use the [[AN!CDB]] dashboard, as we will do here. Specifically, the node names on your nodes must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; for node #1 and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for node #2. The reason for this will be discussed later. &lt;br /&gt;
&lt;br /&gt;
The node host name convention that we&#039;ve created is this:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-cYYn0{1,2}&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; is a two or three letter prefix used to denote the company, group or person who owns the &#039;&#039;Anvil!&#039;&#039;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cYY&amp;lt;/span&amp;gt; is a simple zero-padded sequence number number.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n0{1,2}&amp;lt;/span&amp;gt; indicated the node in the cluster.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, the &#039;&#039;Anvil!&#039;&#039; is owned and operated by &amp;quot;Alteeve&#039;s Niche!&amp;quot;, so the prefix &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an&amp;lt;/span&amp;gt;&amp;quot; is used. This is the fifth cluster we&#039;ve got, so the cluster name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;, so the host name&#039;s cluster number is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c05&amp;lt;/span&amp;gt;. Thus, node #1 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and node #2 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we have three distinct networks, we have three network-specific suffixes we apply to these host names which we will map to subnets in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; later.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.bcn&amp;lt;/span&amp;gt;; Back-Channel Network host name.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.sn&amp;lt;/span&amp;gt;; Storage Network hostname.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.ifn&amp;lt;/span&amp;gt;; Internet-Facing Network host name.&lt;br /&gt;
&lt;br /&gt;
Again, what you use is entirely up to you. Just remember that the node&#039;s host name must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for AN!CDB to work.&lt;br /&gt;
&lt;br /&gt;
== Foundation Pack Host Names ==&lt;br /&gt;
&lt;br /&gt;
The foundation pack devices, switches, PDUs and UPSes, can support multiple &#039;&#039;Anvil!&#039;&#039; platforms. Likewise, the [[AN!CDB|dashboard]] servers support multiple &#039;&#039;Anvil!&#039;&#039;s as well. For this reason, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cXX&amp;lt;/span&amp;gt; portion of the host name does not make sense when choosing host names for these devices.&lt;br /&gt;
&lt;br /&gt;
As always, you are free to choose host names that make sense to you. For this tutorial, the following host names are used;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device&lt;br /&gt;
!Host name&lt;br /&gt;
!Examples&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|Network Switches&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-sYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Switch #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Switch #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Switched [[PDU]]s&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-pYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* PDU #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p01&amp;lt;/span&amp;gt;&lt;br /&gt;
* PDU #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Network Managed [[UPS]]es&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-uYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* UPS #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
* UPS #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Dashboard Servers&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-mYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Dashboard #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dashboard #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number. Note that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; letter was chosen for historical reasons. The dashboard used to be called &amp;quot;monitoring servers&amp;quot;. For consistency with existing dashboards, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; has remained. Note also that the dashboards will connect to both the [[BCN]] and [[SN]], so like the nodes, host names with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.bcn&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.ifn&amp;lt;/span&amp;gt; suffixes will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OS Installation ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=[[EL6]].1 shipped with a version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[corosync]]&amp;lt;/span&amp;gt; that had a token retransmit bug. On slower systems, there would be a form of race condition which would cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; tokens the be retransmitted and cause significant performance problems. This has been resolved in [[EL6]].2 so please be sure to upgrade.}}&lt;br /&gt;
&lt;br /&gt;
Beyond being based on [[RHEL]] 6, there are no requirements for how the operating system is installed. This tutorial is written using &amp;quot;minimal&amp;quot; installs, and as such, installation instructions will be provided that will install all needed packages if they aren&#039;t already installed on your nodes.&lt;br /&gt;
&lt;br /&gt;
== Network Security Considerations ==&lt;br /&gt;
&lt;br /&gt;
When building production clusters, you will want to consider two options with regard to network security.&lt;br /&gt;
&lt;br /&gt;
First, the interfaces connected to an untrusted network, like the Internet, should not have an IP address, though the interfaces themselves will need to be up so that virtual machines can route through them to the outside world. Alternatively, anything inbound from the virtual machines or inbound from the untrusted network should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt;ed by the firewall.&lt;br /&gt;
&lt;br /&gt;
Second, if you can not run the cluster communications or storage traffic on dedicated network connections over isolated subnets, you will need to configure the firewall to block everything except the ports needed by storage and cluster traffic.&lt;br /&gt;
&lt;br /&gt;
{{note|1=As of [[EL6]].2, you can now use [[unicast]] for totem communication instead of multicast. This is &#039;&#039;&#039;not&#039;&#039;&#039; advised, and should only be used for clusters of two or three nodes on networks where unresolvable [[multicast]] issues exist. If using [[gfs2]], as we do here, using unicast for totem is strongly discouraged.}}&lt;br /&gt;
&lt;br /&gt;
== SELinux Considerations ==&lt;br /&gt;
&lt;br /&gt;
There are two important changes needed to make our &#039;&#039;Anvil!&#039;&#039; work with [[SELinux]]. Both are presented in this tutorial when they&#039;re first needed. If you do not plan to follow this tutorial linearly, please be sure to read:&lt;br /&gt;
&lt;br /&gt;
* [[#SELinux and apcupsd|SELinux and apcupsd]]&lt;br /&gt;
* [[#Solving_vm01-win2008_.22Failure_to_Enable.22_Error|Solving vm01-win2008 &amp;quot;Failure to Enable Error&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&#039;s take a look at a block diagram of what we&#039;re going to build. This will help when trying to see what we&#039;ll be talking about.&lt;br /&gt;
&lt;br /&gt;
== A Map! ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Nodes                                                                                        \_/                                                                                           &lt;br /&gt;
  ____________________________________________________________________________             _____|____              ____________________________________________________________________________ &lt;br /&gt;
 | an-c05n01.alteeve.ca                                                       |  /--------{_Internet_}---------\  |                                                       an-c05n02.alteeve.ca |&lt;br /&gt;
 |                                 Network:                                   |  |                             |  |                                   Network:                                 |&lt;br /&gt;
 |                                 _________________     _____________________|  |  _________________________  |  |_____________________     _________________                                 |&lt;br /&gt;
 |      Servers:                  |      vbr2       |---| bond2               |  | | an-s01         Switch 1 | |  |               bond2 |---|      vbr2       |                  Servers:      |&lt;br /&gt;
 |      _______________________   |   10.255.50.1   |   | ____________________|  | |____ Internet-Facing ____| |  |____________________ |   |   10.255.50.2   |  .........................     |&lt;br /&gt;
 |     | [ vm01-win2008 ]      |  |_________________|   || eth2               =----=_01_]    Network    [_02_=----=               eth2 ||   |_________________|  :      [ vm01-win2008 ] :     |&lt;br /&gt;
 |     |   ____________________|    | : | | : : | |     || 00:1B:21:81:C3:34 ||  | |____________________[_24_=-/  || 00:1B:21:81:C2:EA ||     : : | | : : | :    :____________________   :     |&lt;br /&gt;
 |     |  | NIC 1              =----/ : | | : : | |     ||___________________||  | | an-s02         Switch 2 |    ||___________________||     : : | | : : | :----=              NIC 1 |  :     |&lt;br /&gt;
 |     |  | 10.255.1.1        ||      : | | : : | |     | ____________________|  | |____                 ____|    |____________________ |     : : | | : : |      :|        10.255.1.1 |  :     |&lt;br /&gt;
 |     |  | ..:..:..:..:..:.. ||      : | | : : | |     || eth5               =----=_01_]  VLAN ID 300  [_02_=----=               eth5 ||     : : | | : : |      :| ..:..:..:..:..:.. |  :     |&lt;br /&gt;
 |     |  |___________________||      : | | : : | |     || A0:36:9F:02:E0:05 ||  | |____________________[_24_=-\  || A0:36:9F:07:D6:2F ||     : : | | : : |      :|___________________|  :     |&lt;br /&gt;
 |     |   ____                |      : | | : : | |     ||___________________||  |                             |  ||___________________||     : : | | : : |      :                ____   :     |&lt;br /&gt;
 |  /--=--[_c:_]               |      : | | : : | |     |_____________________|  \-----------------------------/  |_____________________|     : : | | : : |      :               [_c:_]--=--\  |&lt;br /&gt;
 |  |  |_______________________|      : | | : : | |      _____________________|                                   |_____________________      : : | | : : |      :.......................:  |  |&lt;br /&gt;
 |  |                                 : | | : : | |     | bond1               |     _________________________     |               bond1 |     : : | | : : |                                 |  |&lt;br /&gt;
 |  |     .........................   : | | : : | |     | 10.10.50.1          |    | an-s01         Switch 1 |    |          10.10.50.2 |     : : | | : : |    _______________________      |  |&lt;br /&gt;
 |  |     : [ vm02-win2012 ]      :   : | | : : | |     | ____________________|    |____     Storage     ____|    |____________________ |     : : | | : : |   |      [ vm02-win2012 ] |     |  |&lt;br /&gt;
 |  |     :   ____________________:   : | | : : | |     || eth1               =----=_09_]    Network    [_10_=----=               eth1 ||     : : | | : : |   |____________________   |     |  |&lt;br /&gt;
 |  |     :  | NIC 1              =---: | | : : | |     || 00:19:99:9C:9B:9F ||    |_________________________|    || 00:19:99:9C:A0:6D ||     : : | | : : \---=              NIC 1 |  |     |  |&lt;br /&gt;
 |  |     :  | 10.255.1.2        |:     | | : : | |     ||___________________||    | an-s02         Switch 2 |    ||___________________||     : : | | : :     ||        10.255.1.2 |  |     |  |&lt;br /&gt;
 |  |     :  | ..:..:..:..:..:.. |:     | | : : | |     | ____________________|    |____                 ____|    |____________________ |     : : | | : :     || ..:..:..:..:..:.. |  |     |  |&lt;br /&gt;
 |  |     :  |___________________|:     | | : : | |     || eth4               =----=_09_]  VLAN ID 200  [_10_=----=               eth4 ||     : : | | : :     ||___________________|  |     |  |&lt;br /&gt;
 |  |     :   ____                :     | | : : | |     || A0:36:9F:02:E0:04 ||    |_________________________|    || A0:36:9F:07:D6:2E ||     : : | | : :     |                ____   |     |  |&lt;br /&gt;
 |  |  /--=--[_c:_]               :     | | : : | |     ||___________________||                                   ||___________________||     : : | | : :     |               [_c:_]--=--\  |  |&lt;br /&gt;
 |  |  |  :.......................:     | | : : | |  /--|_____________________|                                   |_____________________|--\  : : | | : :     |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                | | : : | |  |   _____________________|                                   |_____________________   |  : : | | : :                                |  |  |&lt;br /&gt;
 |  |  |   _______________________      | | : : | |  |  | bond0               |     _________________________     |               bond0 |  |  : : | | : :     .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm03-win7 ]         |     | | : : | |  |  | 10.20.50.1          |    | an-s01         Switch 1 |    |          10.20.50.2 |  |  : : | | : :     :      [ vm02-win2012 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|     | | : : | |  |  | ____________________|    |____  Back-Channel   ____|    |____________________ |  |  : : | | : :     :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-----/ | : : | |  |  || eth0               =----=_13_]    Network    [_14_=----=               eth0 ||  |  : : | | : :-----=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.3        ||       | : : | |  |  || 00:19:99:9C:9B:9E ||    |_________________________|    || 00:19:99:9C:A0:6C ||  |  : : | | :       :|        10.255.1.3 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||       | : : | |  |  ||___________________||    | an-s02         Switch 2 |    ||___________________||  |  : : | | :       :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||       | : : | |  |  || eth3               =----=_13_]  VLAN ID 100  [_14_=----=               eth3 ||  |  : : | | :       :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |       | : : | |  |  || 00:1B:21:81:C3:35 ||    |_________________________|    || 00:1B:21:81:C2:EB ||  |  : : | | :       :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |       | : : | |  |  ||___________________||                                   ||___________________||  |  : : | | :       :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|       | : : | |  |  |_____________________|                                   |_____________________|  |  : : | | :       :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                  | : : | |  |                        |                                   |                        |  : : | | :                                  |  |  |&lt;br /&gt;
 |  |  |   _______________________        | : : | |  |                        |                                   |                        |  : : | | :       .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm04-win8 ]         |       | : : | |  \                        |                                   |                       /   : : | | :       :         [ vm04-win8 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|       | : : | |   \                       |                                   |                      /    : : | | :       :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-------/ : : | |    |                      |                                   |                      |    : : | | :-------=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.4        ||         : : | |    |                      |                                   |                      |    : : | |         :|        10.255.1.4 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||         : : | |    |                      |                                   |                      |    : : | |         :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||         : : | |    |                      |                                   |                      |    : : | |         :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |         : : | |    |                      |                                   |                      |    : : | |         :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |         : : | |    |                      |                                   |                      |    : : | |         :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|         : : | |    |                      |                                   |                      |    : : | |         :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                    : : | |    |                      |                                   |                      |    : : | |                                    |  |  |&lt;br /&gt;
 |  |  |  .........................         : : | |    |                      |                                   |                      |    : : | |          _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm05-freebsd9 ]     :         : : | |    |                      |                                   |                      |    : : | |         |     [ vm05-freebsd9 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:         : : | |    |                      |                                   |                      |    : : | |         |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | em0                =---------: : | |    |                      |                                   |                      |    : : | \---------=                em0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.5        |:           : | |    |                      |                                   |                      |    : : |           ||        10.255.1.5 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:           : | |    |                      |                                   |                      |    : : |           || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:           : | |    |                      |                                   |                      |    : : |           ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :           : | |    |                      |                                   |                      |    : : |           |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_ada0_]             :           : | |    |                      |                                   |                      |    : : |           |             [_ada0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:           : | |    |                      |                                   |                      |    : : |           |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                      : | |    |                      |                                   |                      |    : : |                                      |  |  |&lt;br /&gt;
 |  |  |  .........................           : | |    |                      |                                   |                      |    : : |            _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm06-solaris11 ]    :           : | |    |                      |                                   |                      |    : : |           |    [ vm06-solaris11 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:           : | |    |                      |                                   |                      |    : : |           |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | net0               =-----------: | |    |                      |                                   |                      |    : : \-----------=               net0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.6        |:             | |    |                      |                                   |                      |    : :             ||        10.255.1.6 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:             | |    |                      |                                   |                      |    : :             || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:             | |    |                      |                                   |                      |    : :             ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :             | |    |                      |                                   |                      |    : :             |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_c3d0_]             :             | |    |                      |                                   |                      |    : :             |             [_c3d0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:             | |    |                      |                                   |                      |    : :             |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                        | |    |                      |                                   |                      |    : :                                        |  |  |&lt;br /&gt;
 |  |  |   _______________________              | |    |                      |                                   |                      |    : :             .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm07-rhel6 ]        |             | |    |                      |                                   |                      |    : :             :        [ vm07-rhel6 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|             | |    |                      |                                   |                      |    : :             :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =-------------/ |    |                      |                                   |                      |    : :-------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.7        ||               |    |                      |                                   |                      |    :               :|        10.255.1.7 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||               |    |                      |                                   |                      |    :               :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||               |    |                      |                                   |                      |    :               :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |               |    |                      |                                   |                      |    :               :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |               |    |                      |                                   |                      |    :               :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|               |    |                      |                                   |                      |    :               :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                          |    |                      |                                   |                      |    :                                          |  |  |&lt;br /&gt;
 |  |  |   _______________________                |    |                      |                                   |                      |    :               .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm08-sles11 ]       |               |    |                      |                                   |                      |    :               :       [ vm08-sles11 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|               |    |                      |                                   |                      |    :               :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =---------------/    |                      |                                   |                      |    :---------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.8        ||                    |                      |                                   |                      |                    :|        10.255.1.8 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||                    |                      |                                   |                      |                    :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||                    |                      |                                   |                      |                    :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |                    |                      |                                   |                      |                    :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |                    |                      |                                   |                      |                    :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|                    |                      |                                   |                      |                    :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |    Storage:                                   |                      |                                   |                      |                                   Storage:    |  |  |&lt;br /&gt;
 |  |  |    __________                                 |                      |                                   |                      |                                 __________    |  |  |&lt;br /&gt;
 |  |  |   [_/dev/sda_]                                |                      |                                   |                      |                                [_/dev/sda_]   |  |  |&lt;br /&gt;
 |  |  |     |   ___________    _______                |                      |                                   |                      |                _______    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda1_]--[_/boot_]               |                      |                                   |                      |               [_/boot_]--[_/dev/sda1_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ________               |                      |                                   |                      |               ________    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda2_]--[_&amp;lt;swap&amp;gt;_]              |                      |                                   |                      |              [_&amp;lt;swap&amp;gt;_]--[_/dev/sda2_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ___                    |                      |                                   |                      |                    ___    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda3_]--[_/_]                   |                      |                                   |                      |                   [_/_]--[_/dev/sda3_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |                      |                                   |                      |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda5_]--[_r0_]--[_/dev/drbd0_]--+                      |                                   |                      +--[_/dev/drbd0_]--[_r0_]--[_/dev/sda5_]--+     |  |  |&lt;br /&gt;
 |  |  |     |                                    |    |                      |                                   |                      |    |                                    |     |  |  |&lt;br /&gt;
 |  |  |     |                                    \----|--\                   |                                   |                   /--|----/                                    |     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |  |                   |                                   |                   |  |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     \--[_/dev/sda6_]--[_r1_]--[_/dev/drbd1_]--/  |                   |                                   |                   |  \--[_/dev/drbd1_]--[_r1_]--[_/dev/sda6_]--/     |  |  |&lt;br /&gt;
 |  |  |                                          |       |                   |                                   |                   |       |                                          |  |  |&lt;br /&gt;
 |  |  |   Clustered LVM:                         |       |                   |                                   |                   |       |                      Clustered LVM:      |  |  |&lt;br /&gt;
 |  |  |   _________________________________      |       |                   |                                   |                   |       |   _________________________________      |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+  |  |&lt;br /&gt;
 |  |  |   __________________________________     |       |                   |                                   |                   |       |   __________________________________     |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+  |  |&lt;br /&gt;
 |  |  |   ___________________________________    |       |                   |                                   |                   |       |   ___________________________________    |  |  |&lt;br /&gt;
 |  |  \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/       |                   |                                   |                   |       \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/  |  |&lt;br /&gt;
 |  |                                                     |                   |                                   |                   |                                                     |  |&lt;br /&gt;
 |  |      _________________________________              |                   |                                   |                   |           _________________________________         |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm01-win2008_]-------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm01-win2008_]--------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm03-win7_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm03-win7_]-----------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm04-win8_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm04-win8_]-----------+  |&lt;br /&gt;
 |  |      _______________________________                |                   |                                   |                   |           _______________________________           |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm07-rhel6_]---------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm07-rhel6_]----------+  |&lt;br /&gt;
 |  |      ________________________________               |                   |                                   |                   |           ________________________________          |  |&lt;br /&gt;
 |  \-----[_/dev/an-c05n02_vg0/vm08-sles11_]--------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm08-sles11_]---------/  |&lt;br /&gt;
 |         ___________________________                    |                   |                                   |                   |           ___________________________                  |&lt;br /&gt;
 |     /--[_/dev/an-c05n01_vg0/shared_]-------------------/                   |                                   |                   \----------[_/dev/an-c05n01_vg0/shared_]--\              |&lt;br /&gt;
 |     |   _________                                                          |     _________________________     |                                                  ________   |              |&lt;br /&gt;
 |     \--[_/shared_]                                                         |    | an-s01         Switch 1 |    |                                                 [_shared_]--/              |&lt;br /&gt;
 |                                                        ____________________|    |____  Back-Channel   ____|    |____________________                                                        |&lt;br /&gt;
 |                                                       | IPMI               =----=_03_]    Network    [_04_=----=               IPMI |                                                       |&lt;br /&gt;
 |                                                       | 10.20.51.1        ||    |_________________________|    ||        10.20.51.2 |                                                       |&lt;br /&gt;
 |                                  _________    _____   | 00:19:99:9C:9B:9E ||    | an-s02         Switch 2 |    || 00:19:99:9A:D8:E8 |   _____    _________                                  |&lt;br /&gt;
 |                                 {_sensors_}--[_BMC_]--|___________________||    |                         |    ||___________________|--[_BMC_]--{_sensors_}                                 |&lt;br /&gt;
 |                                                             ______ ______  |    |       VLAN ID 100       |    |  ______ ______                                                             |&lt;br /&gt;
 |                                                            | PSU1 | PSU2 | |    |____   ____   ____   ____|    | | PSU1 | PSU2 |                                                            |&lt;br /&gt;
 |____________________________________________________________|______|______|_|    |_03_]_[_07_]_[_08_]_[_04_|    |_|______|______|____________________________________________________________|&lt;br /&gt;
                                                                   || ||             |      |      |       |             || ||                                                                  &lt;br /&gt;
                                       /---------------------------||-||-------------|------/      \-------|-------------||-||---------------------------\                                      &lt;br /&gt;
                                       |                           || ||             |                     |             || ||                           |                                      &lt;br /&gt;
                        _______________|___                        || ||   __________|________     ________|__________   || ||                        ___|_______________                       &lt;br /&gt;
                       |             UPS 1 |                       || ||  |             PDU 1 |   |             PDU 2 |  || ||                       |             UPS 2 |                      &lt;br /&gt;
                       | an-u01            |                       || ||  | an-p01            |   | an-p02            |  || ||                       | an-u02            |                      &lt;br /&gt;
             _______   | 10.20.3.1         |                       || ||  | 10.20.2.1         |   | 10.20.2.2         |  || ||                       | 10.20.3.1         |   _______            &lt;br /&gt;
            {_Mains_}==| 00:C0:B7:58:3A:5A |=======================||=||==| 00:C0:B7:56:2D:AC |   | 00:C0:B7:59:55:7C |==||=||=======================| 00:C0:B7:C8:1C:B4 |=={_Mains_}           &lt;br /&gt;
                       |___________________|                       || ||  |___________________|   |___________________|  || ||                       |___________________|                      &lt;br /&gt;
                                                                   || ||                 || ||     || ||                 || ||                                                                  &lt;br /&gt;
                                                                   || \\===[ Port 1 ]====// ||     || \\====[ Port 2 ]===// ||                                                                  &lt;br /&gt;
                                                                   \\======[ Port 1 ]=======||=====//                       ||                                                                  &lt;br /&gt;
                                                                                            \\==============[ Port 2 ]======//                                                                  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:keanu-woah_01.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Subnets ==&lt;br /&gt;
&lt;br /&gt;
The cluster will use three separate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/16&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;255.255.0.0&amp;lt;/span&amp;gt;) networks;&lt;br /&gt;
&lt;br /&gt;
{{note|1=There are situations where it is not possible to add additional network cards, blades being a prime example. In these cases it will be up to the admin to decide how to proceed. If there is sufficient bandwidth, you can merge all networks, but it is advised in such cases to isolate IFN traffic from the SN/BCN traffic using [[VLAN]]s.}}&lt;br /&gt;
&lt;br /&gt;
If you plan to have two or more &#039;&#039;Anvil!&#039;&#039; platforms on the same network, then it is recommended that you use the third octal of the IP addresses to identify the cluster. We&#039;ve found the following works well:&lt;br /&gt;
&lt;br /&gt;
* Third octal is the cluster ID times 10&lt;br /&gt;
* Fourth octal is the node ID.&lt;br /&gt;
&lt;br /&gt;
In our case, we&#039;re building our fifth cluster, so node #1 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.1&amp;lt;/span&amp;gt; and node #2 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.2&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Purpose&lt;br /&gt;
!Subnet&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Internet-Facing Network ([[IFN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Servers hosted by the &#039;&#039;Anvil!&#039;&#039; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.1.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the server&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Storage Network ([[SN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
|-&lt;br /&gt;
|Back-Channel Network ([[BCN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Node-specific [[IPMI]] or other out-of-band management devices will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Network switches will use the IP addresses &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.1.x&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the switch&#039;s sequence number.&lt;br /&gt;
* Switched [[PDU]]s, which we will use as backup fence devices, will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.2.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the PDU&#039;s sequence number.&lt;br /&gt;
* Network-managed [[UPS]]es with use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.3.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the UPS&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We will be using six interfaces, bonded into three pairs of two NICs in Active/Passive (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) configuration. Each link of each bond will be on alternate switches. We will also configure affinity by specifying interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; as primary for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; interfaces, respectively. This way, when everything is working fine, all traffic is routed through the same switch for maximum performance.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Red Hat supports bonding modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; as of [[RHEL]] 6.4. We do not recommend these bonding modes as we&#039;ve found the most reliable and consistent ability to survive switch failure and recovery with mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; only. If you wish to use a different bonding more, please be sure to test various failure modes extensively!}}&lt;br /&gt;
&lt;br /&gt;
If you can not install six interfaces in your server, then four interfaces will do with the [[SN]] and [[BCN]] networks merged.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you wish to merge the [[SN]] and [[BCN]] onto one interface, test to ensure that the storage traffic will not block cluster communication. Test by forming your cluster and then pushing your storage to maximum read and write performance for an extended period of time (minimum of several seconds). If the cluster partitions, you will need to do some advanced quality-of-service or other network configuration to ensure reliable delivery of cluster network traffic.}}&lt;br /&gt;
&lt;br /&gt;
[[image:brocade_icx6610_stock_01.jpg|thumb|right|375px|Brocade [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page ICX6610] switches. Photo by Brocade.]]&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use two [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page Brocade ICX6610] switches, stacked.&lt;br /&gt;
&lt;br /&gt;
* Brocade ICX6610 [[Brocade Notes|stack switch configuration]].&lt;br /&gt;
&lt;br /&gt;
We will be using three [[VLAN]]s to isolate the three networks:&lt;br /&gt;
&lt;br /&gt;
* [[BCN]] will have VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[SN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[IFN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All other unassigned ports will be in the default VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, effectively disabling those ports.&lt;br /&gt;
&lt;br /&gt;
The actual mapping of interfaces to bonds to networks will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Subnet&lt;br /&gt;
!Cable Colour&lt;br /&gt;
![[VLAN]] ID&lt;br /&gt;
!Link 1&lt;br /&gt;
!Link 2&lt;br /&gt;
!Bond&lt;br /&gt;
!IP&lt;br /&gt;
|-&lt;br /&gt;
|[[BCN]]&lt;br /&gt;
|White&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[SN]]&lt;br /&gt;
|Green&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[IFN]]&lt;br /&gt;
|Black&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== A Note on STP ===&lt;br /&gt;
&lt;br /&gt;
Scanning Tree Protocol, [[STP]], is a protocol used for detecting and protecting against switch loops. Without it, if both ends of the same cable plugged into the same switch or VLAN, or if two cables run between the same pair of switches, a [[broadcast storm]] could cause the switches to hang and traffic would stop routing.&lt;br /&gt;
&lt;br /&gt;
The problem with STP in HA clusters though is that the attempt to detect loops requires blocking all other traffic for a short time. Though this is short, it is usually long enough to cause corosync to think that the peer node has failed, triggering a fence action. &lt;br /&gt;
&lt;br /&gt;
For this reason, we need to disable STP, either globally or at least on the ports used by corosync and drbd. How you actually do this will depend on the make and model of switch you have.&lt;br /&gt;
&lt;br /&gt;
With STP disabled, at least partially, the onus does fall on you to ensure that no one causes a switch loop. Please be sure to inform anyone who might plug things into the cluster&#039;s switches about this issue. Ensure that people are careful about what they plug into the switches and that new connections will not trigger a loop.&lt;br /&gt;
&lt;br /&gt;
== Setting Up the Network ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The following steps can easily get confusing, given how many files we need to edit. Losing access to your server&#039;s network is a very real possibility! &#039;&#039;&#039;Do not continue without direct access to your servers!&#039;&#039;&#039; If you have out-of-band access via [[iKVM]], console redirection or similar, be sure to test that it is working before proceeding.}}&lt;br /&gt;
&lt;br /&gt;
=== Planning The Use of Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
In production clusters, I generally intentionally get three separate dual-port controllers (two on-board interfaces plus two separate dual-port PCIe cards). I then ensure that no bond uses two interfaces on the same physical board. Thus, should a card or its bus interface fail, none of the bonds will fail completely.&lt;br /&gt;
&lt;br /&gt;
Lets take a look at an example layout;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ____________________                            &lt;br /&gt;
| [ an-c05n01 ]      |                           &lt;br /&gt;
|         ___________|            _______              &lt;br /&gt;
|        |     ______|           | bond0 |             &lt;br /&gt;
|        | O  | eth0 =-----------=---.---=------{&lt;br /&gt;
|        | n  |_____||  /--------=--/    |             &lt;br /&gt;
|        | b         |  |        |_______|             &lt;br /&gt;
|        | o   ______|  |         _______        &lt;br /&gt;
|        | a  | eth1 =--|--\     | bond1 |      &lt;br /&gt;
|        | r  |_____||  |   \----=--.----=------{&lt;br /&gt;
|        | d         |  |  /-----=--/    |       &lt;br /&gt;
|        |___________|  |  |     |_______|       &lt;br /&gt;
|         ___________|  |  |      _______        &lt;br /&gt;
|        |     ______|  |  |     | bond2 |       &lt;br /&gt;
|        | P  | eth2 =--|--|-----=---.---=------{&lt;br /&gt;
|        | C  |_____||  |  |  /--=--/    |       &lt;br /&gt;
|        | I         |  |  |  |  |_______|       &lt;br /&gt;
|        | e   ______|  |  |  |                  &lt;br /&gt;
|        |    | eth3 =--/  |  |                  &lt;br /&gt;
|        | 1  |_____||     |  |                  &lt;br /&gt;
|        |___________|     |  |                  &lt;br /&gt;
|         ___________|     |  |                  &lt;br /&gt;
|        |     ______|     |  |                  &lt;br /&gt;
|        | P  | eth4 =-----/  |                  &lt;br /&gt;
|        | C  |_____||        |                  &lt;br /&gt;
|        | I         |        |                  &lt;br /&gt;
|        | e   ______|        |                  &lt;br /&gt;
|        |    | eth5 =--------/                  &lt;br /&gt;
|        | 2  |_____||                           &lt;br /&gt;
|        |___________|                           &lt;br /&gt;
|____________________|                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the possible failure scenarios:&lt;br /&gt;
&lt;br /&gt;
* The on-board controllers fail;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 1&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
* The PCIe #1 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
* The PCIe #2 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
&lt;br /&gt;
In all three failure scenarios, no network interruption occurs making for the most robust configuration possible.&lt;br /&gt;
&lt;br /&gt;
=== Connecting Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
As we will see soon, each node can be fenced either by calling its [[IPMI]] interface or by calling the [[PDU]] and cutting the node&#039;s power. Each of these methods are inherently single points of failure as each has only one network connection. To work around this concern, we will connect all IPMI interfaces to one switch and the PDUs to the secondary switch. This way, should a switch fail, only one of the two fence devices will fail and fencing in general will still be possible via the alternate fence device.&lt;br /&gt;
&lt;br /&gt;
By convention, we always connect the IPMI interfaces to the primary switch and the PDUs to the second switch.&lt;br /&gt;
&lt;br /&gt;
= Let&#039;s Build! =&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to need to install a bunch of programs, and one of those programs is needed before we can reconfigure the network. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge-utils&amp;lt;/span&amp;gt; has to be installed right away, so now is a good time to just install everything we need.&lt;br /&gt;
&lt;br /&gt;
== Why so Much Duplication of Commands? ==&lt;br /&gt;
&lt;br /&gt;
Most, but &#039;&#039;&#039;not&#039;&#039;&#039; all, commands will be issues equally on both nodes. At least up until we start configuring the cluster. To make it clear what to run on which node, all commands are defined either beside or under the node name on which to run the command.&lt;br /&gt;
&lt;br /&gt;
This does lead to a lot of duplication, but it&#039;s important to make sure it is clear when some command runs only on one node or the other. So please be careful, particularly later on, that you don&#039;t accidentally run a command on the wrong node.&lt;br /&gt;
&lt;br /&gt;
== Red Hat Enterprise Linux Specific Steps ==&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux is a commercial operating system that includes access to their repositories. This requires purchasing [http://www.redhat.com/products/enterprise-linux/server/ entitlements] and then [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/entitlements.html registering] machines with their [https://rhn.redhat.com Red Hat Network].&lt;br /&gt;
&lt;br /&gt;
This tutorial uses [[GFS2]], which is provided by their [http://www.redhat.com/products/enterprise-linux-add-ons/resilient-storage/ Resilient Storage Add-On]. The includes the [http://www.redhat.com/products/enterprise-linux-add-ons/high-availability/ High-Availability Add-On] which provides the rest of the HA cluster stack. &lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve finished your install, you can quickly register your node with RHN and add the resilient storage add-on with the following two commands.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You need to replace &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$user&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$pass&amp;lt;/span&amp;gt; with your RHN account details.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n01.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n02.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get any errors from the above commands, please contact your support representative. They will be able to help sort out any account or entitlement issues.&lt;br /&gt;
&lt;br /&gt;
== Update the OS ==&lt;br /&gt;
&lt;br /&gt;
Before we begin at all, let&#039;s update our OS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Required Programs ==&lt;br /&gt;
&lt;br /&gt;
This will install all the software needed to run the &#039;&#039;Anvil!&#039;&#039; and configure [[IPMI]] for use as a fence device. This won&#039;t cover [[DRBD]] or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; which will be covered in dedicated sections below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we go any further, we&#039;ll want to destroy the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge. We&#039;re going to be creating our own bridge that gives our servers direct access to the outside network.&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; does &#039;&#039;&#039;not&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you already see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; when you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;, the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge has already started. You can stop and disable it with the following commands;&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; &#039;&#039;&#039;does&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; should be gone now and it won&#039;t return.&lt;br /&gt;
&lt;br /&gt;
== Installing Programs Needed for Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Sep. 01, 2014; As of a recent update, the perl modules installed in this section no longer work. The most recent release of the monitoring and alert system has been changed to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;postfix&amp;lt;/span&amp;gt; running as a secured local relay to the desired mail server. This section of the tutorial will be rewritten as soon as possible to reflect the new mail system.}}&lt;br /&gt;
&lt;br /&gt;
The alert system will be using is written in perl. Some modules need to be installed from source, which requires the develop environment group and some development libraries to be installed. If you prefer to monitor your nodes another way, then you can skip this section.&lt;br /&gt;
&lt;br /&gt;
This installs a group of programs used for development environments.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need a few more packages still. This steps adds those packages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next stage installs some perl modules that are not available as RPM packages. Specifically, it tells perl to not prompt for input and just do the install. This saves a lot of questions and answers. If you need to do a non-standard [[CPAN]] install, skip the first line and you will run interactively.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The most recent version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YAML&amp;lt;/span&amp;gt; fails to install because it depends on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Module::Install::TestBase&amp;lt;/span&amp;gt;, which in turn depends on itself, and so fails to install. Please skip this part for now. If you need assistance, please feel free to [[Support|contact us]] and we will be happy to assist.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... No seriously, go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done! &lt;br /&gt;
&lt;br /&gt;
We&#039;ll setup the alert system a little later on. Now though, all the dependencies will have been met.&lt;br /&gt;
&lt;br /&gt;
== Switch Network Daemons ==&lt;br /&gt;
&lt;br /&gt;
The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; daemon is much more flexible and is perfect for machines like laptops which move around networks a lot. However, it does this by making a lot of decisions for you and changing the network as it sees fit. As good as this is for laptops and the like, it&#039;s not appropriate for servers. We will want to use the traditional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; to start with the system.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Altering Which Daemons Start on Boot ==&lt;br /&gt;
&lt;br /&gt;
Several of the applications we installed above include [[daemon]]s that either start on boot or stay off on boot. Likewise, some daemons remain stopped after they&#039;re installed, and we want to start them now.&lt;br /&gt;
&lt;br /&gt;
As we work on each component, we&#039;ll discuss in more detail why we want each to either start or stop on boot. For now, let&#039;s just make the changes.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt; command to make sure the daemons we want to start on boot do so.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next, we&#039;ll tell the system what daemons to leave off on boot.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now start the daemons we&#039;ve installed and want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, stop the daemons we don&#039;t want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can verify that the services you want to start will and the ones you don&#039;t want to won&#039;t using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you did a minimal OS install, or any install without a graphical interface, you will be booting into [https://en.wikipedia.org/wiki/Runlevel#Red_Hat_Linux_and_Fedora run-level] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;. If you did install a graphical interface, which is not wise, then your default run-level will either be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;. You can determine which by looking in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/inittab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once you know the run-level you&#039;re using, look for the daemon you are interested in and the see if it&#039;s set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:on&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:off&amp;lt;/span&amp;gt;. That will confirm that the associated daemon is set to start on boot or not, respectively.&lt;br /&gt;
&lt;br /&gt;
== Network Security ==&lt;br /&gt;
&lt;br /&gt;
The interfaces connected to the [[IFN]] are usually connected to an untrusted network, like the Internet. If you do not need access to the IFN from the nodes themselves, you can increase security by not assigning an IP address to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; interface which we will configure shortly. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge device will need to be up so that virtual machines can route through it to the outside world, of course.&lt;br /&gt;
&lt;br /&gt;
If you do decide to assign an IP to the nodes&#039; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;, you will want to restrict inbound access as much as possible. A good policy is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt; all traffic inbound from the hosted servers, unless you trust them specifically. &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to open ports for both Red Hat&#039;s high-availability add-on components and LinBit&#039;s DRBD software. You can find details here:&lt;br /&gt;
&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html#s1-iptables_firewall-CA RHEL 6 Cluster Configuration, Firewall Setup]&lt;br /&gt;
* [http://www.drbd.org/users-guide-8.3/s-prepare-network.html Linbit&#039;s DRBD, Firewall Configuration]&lt;br /&gt;
&lt;br /&gt;
Specifically, we&#039;ll be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ACCEPT&amp;lt;/span&amp;gt;ing the ports listed below on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Component&lt;br /&gt;
!Protocol&lt;br /&gt;
!Port&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[dlm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;21064&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[drbd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;+&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[luci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8084&amp;lt;/span&amp;gt;&lt;br /&gt;
|&#039;&#039;Optional&#039;&#039; web-based configuration tool, not used in this tutorial but documented for reference.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[modclusterd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16851&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ricci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11111&amp;lt;/span&amp;gt;&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7791&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[UDP]]/[[multicast]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5404&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5405&amp;lt;/span&amp;gt;&lt;br /&gt;
|Uses a multicast group for cluster communications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuring iptables ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; is an entire topic on its own. There are many good tutorials on the Internet discussing it, including an [[TLUG Talk: Netfilter|older introduction to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; tutorial]] hosted here. If you are unfamiliar with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt;, it is well worth taking a break from this tutorial and getting familiar with it, in concept if nothing else.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This opens up enough ports for 100 virtual servers. This is entirely arbitrary range, which you probably want to reduce (or possibly increase). This also allows incoming connections from both the [[BCN]] and [[IFN]], which you may want to change. Please look below for the &#039;remote desktop&#039; rules comment.}}&lt;br /&gt;
&lt;br /&gt;
The first thing we want to do is see what the current firewall policy is. We can do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt;, a tool designed to backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; but also very useful for seeing what configuration is currently in memory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:17 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [440:262242]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:17 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:51 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [336:129880]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:51 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This tutorial will create two DRBD resources. Each resource will use a different [[TCP]] port. By convention, they start at port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and increment up per resource. So we will be opening ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Open ports;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [52:8454]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [16:5452]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, the cluster stack should work, but we&#039;re not done yet. The changes we made above altered packet filtering in memory, but the configuration has not been saved to disk. This configuration is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/iptables&amp;lt;/span&amp;gt;. You could pipe the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt; to it, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; initialization script provides a facility to save the configuration, so we will use it instead.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; and check that the changes stuck.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:06:43 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41947:617170766]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:06:43 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:07:00 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41570:54856696]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:07:00 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to enable any other kind of access or otherwise modify the firewall on each node, please do so now. This way, as you proceed with building the &#039;&#039;Anvil!&#039;&#039;, you&#039;ll hit firewall problems as soon as they arise.&lt;br /&gt;
&lt;br /&gt;
== Mapping Physical Network Interfaces to ethX Device Names ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This process is a little lengthy and it would add a fair amount of length to document the process on both nodes. So for this section, only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will be shown. Please repeat this process for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:an-c05n01_crappy_back_pic_showing_NIC_names_01.jpg|thumb|500px|right|Awesome quality picture of labelled interfaces.]]&lt;br /&gt;
&lt;br /&gt;
Consistency is the mother of stability.&lt;br /&gt;
&lt;br /&gt;
When you install [[RHEL]], it somewhat randomly assigns an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ethX&amp;lt;/span&amp;gt; device to each physical network interfaces. Purely technically speaking, this is fine. So long as you know which interface has which device name, you can setup the node&#039;s networking.&lt;br /&gt;
&lt;br /&gt;
However!&lt;br /&gt;
&lt;br /&gt;
Consistently assigning the same device names to physical interfaces makes supporting and maintaining nodes a lot easier!&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got six physical network interfaces, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. As you recall from earlier, we want to make sure that each pair of interfaces for each network spans two physical network cards. &lt;br /&gt;
&lt;br /&gt;
Most servers have at least two on-board network cards labelled &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;quot;. These tend to correspond to lights on the front of the server, so we will start by naming these interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;, respectively. After that, you are largely free to assign names to interfaces however you see fit.&lt;br /&gt;
&lt;br /&gt;
What matters most of all is that, whatever order you choose, it&#039;s consistent across your &#039;&#039;Anvil!&#039;&#039; nodes.&lt;br /&gt;
&lt;br /&gt;
Before we touch anything, let&#039;s make a backup of what we have. This way, we have an easy out in case we &amp;quot;oops&amp;quot; a files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /root/backups/&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
created directory /root/backups&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
network-scripts/ifcfg-lo&lt;br /&gt;
network-scripts/ifdown -&amp;gt; ../../../sbin/ifdown&lt;br /&gt;
network-scripts/ifdown-bnep&lt;br /&gt;
network-scripts/ifdown-eth&lt;br /&gt;
network-scripts/ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-ipv6&lt;br /&gt;
network-scripts/ifdown-isdn -&amp;gt; ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-post&lt;br /&gt;
network-scripts/ifdown-ppp&lt;br /&gt;
network-scripts/ifdown-routes&lt;br /&gt;
network-scripts/ifdown-sit&lt;br /&gt;
network-scripts/ifdown-tunnel&lt;br /&gt;
network-scripts/ifup -&amp;gt; ../../../sbin/ifup&lt;br /&gt;
network-scripts/ifup-aliases&lt;br /&gt;
network-scripts/ifup-bnep&lt;br /&gt;
network-scripts/ifup-eth&lt;br /&gt;
network-scripts/ifup-ippp&lt;br /&gt;
network-scripts/ifup-ipv6&lt;br /&gt;
network-scripts/ifup-isdn -&amp;gt; ifup-ippp&lt;br /&gt;
network-scripts/ifup-plip&lt;br /&gt;
network-scripts/ifup-plusb&lt;br /&gt;
network-scripts/ifup-post&lt;br /&gt;
network-scripts/ifup-ppp&lt;br /&gt;
network-scripts/ifup-routes&lt;br /&gt;
network-scripts/ifup-sit&lt;br /&gt;
network-scripts/ifup-tunnel&lt;br /&gt;
network-scripts/ifup-wireless&lt;br /&gt;
network-scripts/init.ipv6-global&lt;br /&gt;
network-scripts/net.hotplug&lt;br /&gt;
network-scripts/network-functions&lt;br /&gt;
network-scripts/network-functions-ipv6&lt;br /&gt;
&lt;br /&gt;
sent 134870 bytes  received 655 bytes  271050.00 bytes/sec&lt;br /&gt;
total size is 132706  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Making Sure All Network Interfaces are Started ===&lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;, unplug each cable and see which interface shows a lost link. This will tell us what &#039;&#039;current&#039;&#039; name is given to a particular physical interface. We&#039;ll write the current name down beside the name of the interface we want. Once we&#039;ve done this to all interfaces, we&#039;ll now how we have to move names around.&lt;br /&gt;
&lt;br /&gt;
Before we can pull cables though, we have to tell the system to start all of the interfaces. By default, all but one or two interfaces will be disabled on boot.&lt;br /&gt;
&lt;br /&gt;
Run this to see which interfaces are up;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:303118 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:152952 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:344900765 (328.9 MiB)  TX bytes:14424290 (13.7 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, only the interface currently named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; was started. We&#039;ll need to edit the other interface configuration files to tell them to start when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; starts. To do this, we edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-ethX&amp;lt;/span&amp;gt; files and change &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT&amp;lt;/span&amp;gt; variable to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT=&amp;quot;yes&amp;quot;&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
By default, most interfaces will be set to try and acquire an IP address from a [[DHCP on an RPM-based OS|DHCP]] server, We can see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; already has an IP address, so to save time, we&#039;re going to tell the other interfaces to start without an IP address at all. If we didn&#039;t do this, restarting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; would take a long time waiting for DHCP requests to time out.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We skip &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth4&amp;lt;/span&amp;gt; in the next step because it&#039;s already up.}}&lt;br /&gt;
&lt;br /&gt;
Now we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the files. This is a lot faster and easier than editing each file by hand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Change eth0 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&lt;br /&gt;
# Change eth1 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&lt;br /&gt;
# Change eth2 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&lt;br /&gt;
# Change eth3 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&lt;br /&gt;
# Change eth5 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see how the file was changed by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to compare the backed up version against the edited one. Let&#039;s look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt; to see this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-28 17:20:38.978458128 -0400&lt;br /&gt;
@@ -2 +2 @@&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -5 +5 @@&lt;br /&gt;
-ONBOOT=&amp;quot;no&amp;quot;&lt;br /&gt;
+ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent. You can check the other files as well to confirm that they were edited as well, if you wish. Once you are happy with the changes, restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; initialization script.&lt;br /&gt;
&lt;br /&gt;
{{note|1= You may see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[FAILED]&amp;lt;/span&amp;gt; while stopping some interfaces, this is not a concern.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Determining IP information for eth4... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, we&#039;ll see all six interfaces have been started!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2433 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:150042 (146.5 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:35  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c335/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2416 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:148176 (144.7 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:04  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e004/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:36 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1026 (1.0 KiB)  TX bytes:5976 (5.8 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:05  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e005/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:1606 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:98242 (95.9 KiB)  TX bytes:2102 (2.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:308572 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153402 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345254511 (329.2 MiB)  TX bytes:14520378 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:2052 (2.0 KiB)  TX bytes:3114 (3.0 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can start creating the list of what physical interfaces have what current names.&lt;br /&gt;
&lt;br /&gt;
=== Finding Current Names for Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Once you know how you want your interfaces, create a little table like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we want to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; to watch the system log file &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; and print to screen messages as they&#039;re written to the log. To do this, run;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run this, the cursor will just sit there and nothing will be printed to screen at first. This is fine, this tells us that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; is waiting for new records. We&#039;re now going to methodically unplug each network cable, wait a moment and then plug it back in. Each time we do this, we&#039;ll write down the interface name that was reported as going down and then coming back up. &lt;br /&gt;
&lt;br /&gt;
The first cable we&#039;re going to unplug is the one in the physical interface we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:36:06 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 17:36:19 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see that the physical interface that we &#039;&#039;want&#039;&#039; to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; is currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;. So we&#039;ll add that to our chart.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll unplug the cable we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:38:01 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 17:38:04 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;, so we&#039;ll write that in beside the &amp;quot;Want&amp;quot; column&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep doing this for the other four cables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:39:28 an-c05n01 kernel: e1000e: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:30 an-c05n01 kernel: e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:35 an-c05n01 kernel: e1000e: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:37 an-c05n01 kernel: e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:40 an-c05n01 kernel: igb: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:43 an-c05n01 kernel: igb: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 17:39:47 an-c05n01 kernel: igb: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:51 an-c05n01 kernel: igb: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The finished table is this;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we know how we want to move the names around!&lt;br /&gt;
&lt;br /&gt;
=== Building the MAC Address List ===&lt;br /&gt;
&lt;br /&gt;
Every network interface has a unique [[MAC]] address assigned to it when it is built. Think of this sort of like a globally unique serial number. Because it&#039;s guaranteed to be unique, it&#039;s a convenient way for the [[operating system]] to create a persistent map between real interfaces and names. If we didn&#039;t use these, then each time you rebooted your node, it would possibly mean that the names get juggled. Not very good.&lt;br /&gt;
&lt;br /&gt;
[[RHEL]] uses two files for creating this map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-eth*&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt; can be rebuilt by running a command, so we&#039;re not going to worry about it. We&#039;ll just delete in a little bit and then recreate it.&lt;br /&gt;
&lt;br /&gt;
The files we care about are the six &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files. Inside each of these is a variable named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt;. The value set here will tell the OS what physical network interface the given file is configuring. We know from the list we created how we want to move the files around. &lt;br /&gt;
&lt;br /&gt;
To recap:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So lets create a new table. This one we will use to write down the MAC addresses we want to set for each device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we know that the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is the one we want to move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; to show the information for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; interface only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:315979 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153610 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345711965 (329.6 MiB)  TX bytes:14555290 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We want the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; value, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;. This will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, so lets write that down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; to be the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, but this time we&#039;ll do a little [[bash]]-fu to reduce the output to just the MAC address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth5 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:19:99:9C:9B:9F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This simply reduced the output to just the line with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; line in it, then it split the line on spaces and printed just the fifth value, which is the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. We&#039;ll write this down beside &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;. So lets get the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; MAC address and add it to the list as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth0 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:34&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth1 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:35&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second to last one is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;, which will move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth2 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:04&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; moves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth3 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:05&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our complete list of new MAC address is;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:34&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:04&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
=== Changing the Interface Device Names ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step is best done when you have direct access to the node. The reason is that the following changes require the network to be totally stopped in order to work without a reboot. If you can&#039;t get physical access, then when we get to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start_udev&amp;lt;/span&amp;gt; step, reboot the node instead.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re about to change which physical interfaces have which device names. If we don&#039;t stop the network first, we won&#039;t be able to restart them later. If we waited until later, the kernel would see a conflict between what it thinks the MAC-to-name mapping should be compared to what it sees in the configuration. The only way around this is a reboot, which is kind of a waste. So by stopping the network now, we clear the kernel&#039;s view of the network and avoid the problem entirely.&lt;br /&gt;
&lt;br /&gt;
So, stop the network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm that it&#039;s stopped by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;. It should return nothing at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;No output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Next, delete the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt; file. We&#039;ll regenerate it after we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/udev/rules.d/70-persistent-net.rules &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
rm: remove regular file `/etc/udev/rules.d/70-persistent-net.rules&#039;? y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to edit each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files and change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; value to the new addresses we wrote down in our list. Let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the new value from our list;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the file and then move on to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&amp;lt;/span&amp;gt; entry to the new MAC address;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Continue editing the other four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth{2..5}&amp;lt;/span&amp;gt; files in the same manner.&lt;br /&gt;
&lt;br /&gt;
Once all the files have been edited, we will regenerate the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
start_udev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting udev:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Test the New Network Name Mapping ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start networking again and see if the remapping worked!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Bringing up interface eth4:&lt;br /&gt;
Determining IP information for eth4...PING 10.255.255.254 (10.255.255.254) from 10.255.0.33 eth4: 56(84) bytes of data.&lt;br /&gt;
&lt;br /&gt;
--- 10.255.255.254 ping statistics ---&lt;br /&gt;
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3000ms&lt;br /&gt;
pipe 3&lt;br /&gt;
 failed.&lt;br /&gt;
                                                           [FAILED]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What happened!?&lt;br /&gt;
&lt;br /&gt;
If you recall, the old &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; device was the interface we moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is not plugged into a network with access to our DHCP server, so it failed to get an IP address. To fix this, we&#039;ll disable DHCP on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; and enable it on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; (which used to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;dhcp&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll restart the network and this time we should be good.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:&lt;br /&gt;
Determining IP information for eth0... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last step is to again &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system log and then unplug and plug-in the cables. If everything went well, they should be in the right order now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 18:44:24 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:27 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:31 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:34 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:35 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:38 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:39 an-c05n01 kernel: e1000e: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:42 an-c05n01 kernel: e1000e: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:45 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:49 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:50 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:54 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo! Done!&lt;br /&gt;
&lt;br /&gt;
At this point, I like to refresh the backup. We&#039;re going to be making more changes later at it would be nice to not have to redo this step again, should something go wrong.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
&lt;br /&gt;
sent 1955 bytes  received 130 bytes  4170.00 bytes/sec&lt;br /&gt;
total size is 132711  speedup is 63.65&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Repeat this process for the other node. Once both nodes have the matching physical interface to device names, we&#039;ll be ready to move on to the next step!&lt;br /&gt;
&lt;br /&gt;
== Configuring our Bridge, Bonds and Interfaces ==&lt;br /&gt;
&lt;br /&gt;
To setup our network, we will need to edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-bondX&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; scripts.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; device is a bridge, like a virtual network switch, which will be used to route network connections between the virtual machines and the outside world, via the [[IFN]]. If you look in the [[#Network|network map]], you will see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; virtual interface connects to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, which links to the outside world, and it connects to all servers. Just like a normal switch does. You will also note that the bridge will have the [[IP]] addresses, not the bonded interface &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;. It will instead be slaved to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; virtual devices work a lot like the network version of [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] arrays. They take two real links and turn them into one redundant link. In our case, each link in the bond will go to a different switch, protecting our links for interface, cable, port or entire switch failures. Should any of these fail, the bond will switch to the backup link so quickly that the applications on the nodes will not notice anything happened.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Bridge configuration files &#039;&#039;&#039;must&#039;&#039;&#039; have a file name which will sort &#039;&#039;&#039;after&#039;&#039;&#039; the interface and bridge files. The actual device name can be whatever you want though. If the system tries to start a bridge before its slaved interface is up, it will fail. I personally like to use the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbrX&amp;lt;/span&amp;gt; for &amp;quot;&#039;&#039;&#039;v&#039;&#039;&#039;irtual machine &#039;&#039;&#039;br&#039;&#039;&#039;idge&amp;quot;. You can use whatever makes sense to you, with the above concern in mind.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to be editing a lot of files. It&#039;s best to lay out what we&#039;ll be doing in a chart. So our setup will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Node&lt;br /&gt;
!BCN IP and Device&lt;br /&gt;
!SN IP and Device&lt;br /&gt;
!IFN IP and Device&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating New Network Configuration Files ===&lt;br /&gt;
&lt;br /&gt;
The new bond and bridge devices we want to create do not exist at all yet. So we will start by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt;ing the configuration files we will need.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Bridge ===&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start in reverse order, crafting the bridge&#039;s script first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you have a Red Hat account, you can read up on what the [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html option above] mean, and specifics of [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html bridge] devices. In case you don&#039;t though, here is a summary:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the actual name given to this device. Generally is matches the file name. In this case, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; and the file name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt;. This matching of file name to device name is by convention and not strictly required.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Ethernet&amp;lt;/span&amp;gt;, the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bridge&amp;lt;/span&amp;gt;, as we use here. Note that these values are &#039;&#039;&#039;case-sensitive&#039;&#039;&#039;! By setting this here, we&#039;re telling the [[OS]] that we&#039;re creating a bridge device.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NM_CONTROLLED&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, which is the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;, as we set here. This tells [[Network Manager]] that it is not allowed to manage this device. We&#039;ve removed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; package, so this is not strictly needed, but we&#039;ll add it just in case it gets installed in the future.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BOOTPROTO&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;, which we&#039;re using here, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dhcp&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bootp&amp;lt;/span&amp;gt; if you want the interface to get an IP from a DHCP or BOOTP server, respectively. We&#039;re setting it to static, so we want this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPADDR&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the [[dotted-decimal]] IP address we&#039;re assigning to this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NETMASK&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the dotted-decimal [[subnet mask]] for this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GATEWAY&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address the node will contact when we it needs to send traffic to other networks, like the Internet.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS1&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the primary domain name server to use when the node needs to translate a host or domain name into an IP address which wasn&#039;t found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the backup domain name server, should the primary DNS server specified above fail.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, as we&#039;ve set it here, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;. If two or more interfaces has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt; set, the interface with this variable set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating the Bonded Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;ll can create the three bonding configuration files. This is where two physical network interfaces are tied together to work like a single, highly available network interface. You can think of a bonded interface as being akin to [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]]; A new virtual device is created out of two real devices.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to see a long line called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html BONDING_OPTS]&amp;lt;/span&amp;gt;&amp;quot;. Let&#039;s look at the meaning of these options before we look at the configuration; &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the Linux kernel what kind of bond we&#039;re creating here. There are [https://www.kernel.org/doc/Documentation/networking/bonding.txt seven modes] available, each with a numeric value representing them. We&#039;re going use the &amp;quot;Active/Passive&amp;quot; mode, known as mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active-backup&amp;lt;/span&amp;gt;). As of [[RHEL]] 6.4, modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-rr&amp;lt;/span&amp;gt;) and mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-xor&amp;lt;/span&amp;gt;) are supported for use with [[corosync]]. Given the proven reliability of surviving numerous tested failure and recovery tests though, AN! still strongly recommends mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;miimon&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the kernel how often, in milliseconds, to check for unreported link failures. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt; which tells the bonding driver to check if the network cable has been unplugged or plugged in every 100 milliseconds. Most modern drivers will report link state via their driver, so this option is not strictly required, but it is recommended for extra safety.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;use_carrier&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; tells the driver to use the driver to maintain the link state. Some drivers don&#039;t support that. If you run into trouble where the link shows as up when it&#039;s actually down, get a new network card or try changing this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120000&amp;lt;/span&amp;gt; tells the driver to delay switching back to the primary interface for 120,000 milliseconds (120 seconds / 2 minutes). This is designed to give the switch connected to the primary interface time to finish booting. Setting this too low may cause the bonding driver to switch back before the network switch is ready to actually move data. Some switches will not provide a link until it is fully booted, so please experiment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;downdelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; tells the driver not to wait before changing the state of an interface when the link goes down. That is, when the driver detects a fault, it will switch to the backup interface immediately. This is the default behaviour, but setting this here insures that it is reset when the interface is reset, should the delay be somehow set elsewhere.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first bond we&#039;ll configure is for the Back-Channel Network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up is the bond for the Storage Network;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, we setup the bond for the Internet-Facing Network.&lt;br /&gt;
&lt;br /&gt;
Here we see a new option:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BRIDGE=&amp;quot;vbr2&amp;quot;&amp;lt;/span&amp;gt;; This tells the system that this bond is to be connected to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge when it is started.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with the bonds!&lt;br /&gt;
&lt;br /&gt;
=== Alter the Interface Configurations ===&lt;br /&gt;
&lt;br /&gt;
With the bridge and bonds in place, we can now alter the interface configurations.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve already edited these back when we were remapping the physical interface to device names. This time, we&#039;re going to clean them up, add a comment and slave them to their parent bonds. Note that the only difference between each node&#039;s given config file will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; variable&#039;s value. &lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 1;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6C&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6D&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EA&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EB&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:04&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:05&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2F&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the variables is not really important, from a technical perspective. However, we&#039;ve found that having the order consistent as possible between configs and nodes goes a long way to simplifying support and problem solving. It certainly helps reduce human error as well.&lt;br /&gt;
&lt;br /&gt;
If we compare the newly updated configs with one of the backups, we&#039;ll see a couple interesting things;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 18:39:59.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-29 13:25:03.443343494 -0400&lt;br /&gt;
@@ -1,2 +1 @@&lt;br /&gt;
-DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+# Back-Channel Network - Link 1&lt;br /&gt;
@@ -4 +3,3 @@&lt;br /&gt;
-NM_CONTROLLED=&amp;quot;yes&amp;quot;&lt;br /&gt;
+DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
+NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -6,2 +7,2 @@&lt;br /&gt;
-TYPE=&amp;quot;Ethernet&amp;quot;&lt;br /&gt;
-UUID=&amp;quot;ea03dc97-019c-4acc-b4d6-bc42d30d9e36&amp;quot;&lt;br /&gt;
+MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
+SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The notable part is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID&amp;lt;/span&amp;gt; where removed. These are not required, so we generally remove them. If you prefer to keep them, that is fine, too.&lt;br /&gt;
&lt;br /&gt;
== Loading the New Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you&#039;re connected to the nodes over the network and if the current IP was assigned by DHCP (or is otherwise different from the IP set in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;), your network connection will break. You will need to reconnect with the IP address you set.}}&lt;br /&gt;
&lt;br /&gt;
Simply restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth1:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth2:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth3:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth4:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth5:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface bond0:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond1:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond2:                               [  OK  ]&lt;br /&gt;
Bringing up interface vbr2:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These errors are normal. They&#039;re caused because we changed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; configuration files to reference bonded interfaces that, at the time we restarted the network, did not yet exist. If you restart the network again, you will see that the errors no longer appear.&lt;br /&gt;
&lt;br /&gt;
=== Verifying the New Network Config ===&lt;br /&gt;
&lt;br /&gt;
The first check to make sure everything works is to simply run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; and make sure everything we expect to be there is, in fact, there.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.20.50.1  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:821080 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160713 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:392278922 (374.1 MiB)  TX bytes:15344030 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet addr:10.10.50.1  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:6030 (5.8 KiB)  TX bytes:13752 (13.4 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:512206 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:222 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:34650974 (33.0 MiB)  TX bytes:25375 (24.7 KiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:570073 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160669 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:377010981 (359.5 MiB)  TX bytes:15339986 (14.6 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:4644 (4.5 KiB)  TX bytes:4602 (4.4 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:262105 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:19438941 (18.5 MiB)  TX bytes:22295 (21.7 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:251007 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15267941 (14.5 MiB)  TX bytes:4044 (3.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1386 (1.3 KiB)  TX bytes:9150 (8.9 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:250101 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:34 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15212033 (14.5 MiB)  TX bytes:3080 (3.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3543 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3543 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652772 (2.5 MiB)  TX bytes:2652772 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet addr:10.255.50.1  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4425 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:127 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:225580 (220.2 KiB)  TX bytes:17449 (17.0 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          inet addr:10.20.50.2  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06c/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:485064 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:29542689 (28.1 MiB)  TX bytes:3060 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          inet addr:10.10.50.2  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06d/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:420 (420.0 b)  TX bytes:3018 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING PROMISC MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:884093 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161539 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:414267432 (395.0 MiB)  TX bytes:15355495 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242549 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14772701 (14.0 MiB)  TX bytes:2082 (2.0 KiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:180 (180.0 b)  TX bytes:2040 (1.9 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:641600 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161526 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:399497547 (380.9 MiB)  TX bytes:15354517 (14.6 MiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242515 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769988 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:240 (240.0 b)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242493 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769885 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3545 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3545 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2658626 (2.5 MiB)  TX bytes:2658626 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet addr:10.255.50.2  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:16091 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:777873 (759.6 KiB)  TX bytes:20304 (19.8 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, everything is there!&lt;br /&gt;
&lt;br /&gt;
Next up is to verify the bonds. To do this, we can examine special files in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; virtual file system. These expose the kernel&#039;s view of things as if they were tradition files. So by reading these files, we can see how the bonded interfaces are operating in real time.&lt;br /&gt;
&lt;br /&gt;
There are three, one for each bond. Let&#039;s start by looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt; &amp;quot;file&amp;quot;, then we&#039;ll look at the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6c&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:eb&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the variables and values we see for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above:&lt;br /&gt;
&lt;br /&gt;
* Bond variables;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bonding Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which bonding mode is currently active. Here we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fault-tolerance (active-backup)&amp;lt;/span&amp;gt;, which is exactly what we wanted when we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt; in the bond&#039;s configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; if it is available. Recall that we set a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary&amp;lt;/span&amp;gt; interface to ensure that, when everything is working properly, all network traffic goes through the same switch to avoid congestion on the stack/uplink cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Currently Active Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which interface is being used at this time. If this shows the secondary interface, then either the primary has failed, or the primary has recovered by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer hasn&#039;t yet expired.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the effective link state of the bond. If either one of the slaved interfaces is active, this will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Polling Interval (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|If you recall, this was set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;ms, which tells the bond driver to verify the link state of the slaved interfaces.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Up Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us how long the bond driver will wait before switching to the secondary interface. We want immediate fail-over, so we have this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Down Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will wait for two minutes after a slaved interface comes up before it will consider it ready for use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Slaved interface variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave Interface&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name of the slaved device. The values below this reflect that named interface&#039;s state.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the current link state of the interface. Values you will see are: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt;. The first two are obvious. The third is the link state between when the link comes up and before the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer expires.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Speed&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you the link speed that the current interface is operating at. If it&#039;s ever lower than you expect, look in the switch configuration for statically set speeds. If that&#039;s not it, try another network cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Duplex&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you whether the given interface can send and receive network traffic at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;, or not, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;. All modern devices should support full duplex, so if you see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;, examine your switch and cables.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Link Failure Count&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|When the bond driver starts, this is set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Each time the link &amp;quot;fails&amp;quot;, which includes an intentional unplugging of the cable, this counter increments. There is no hard in this increasing if the &amp;quot;errors&amp;quot; where intentional or known. It can be useful in detecting flaky connections though, should you find this number to be higher than expected.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Permanent HW addr&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9c:9b:9e&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1b:21:81:c3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the real MAC address of the slaved interface. Those who are particularly observant will have noticed that, in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; output above, both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; showed the same MAC address. This is partly how active-passive bonding is able to fail over so extremely quickly. The MAC address of which ever interface is active will appear in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; address of both bond members.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave queue ID&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|In other bonding modes, this can be used to help direct certain traffic down certain slaved interface links. We won&#039;t use this so it should always be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:04&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6d&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last bond is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:34&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:05&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:ea&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That covers the bonds! The last thing to look at are the bridges. We can check them using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;brctl&amp;lt;/span&amp;gt; (bridge control) tool;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name	bridge id		STP enabled	interfaces&lt;br /&gt;
vbr2		8000.001b2181c334	no		bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name     bridge id               STP enabled     interfaces&lt;br /&gt;
vbr2            8000.001b2181c2ea       no              bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are four variables; Let&#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge name&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the device name we set when we created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge id&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c334&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c2ea&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is an automatically create unique ID for the given bridge.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;STP enabled&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us where [https://en.wikipedia.org/wiki/Spanning_Tree_Protocol spanning tree protocol] is enabled or not. Default is to be disabled, which is fine. If you enable it, it will help protect against loops that can cause broadcast storms and flood your network. Given how difficult it is to accidentally &amp;quot;plug both ends of a cable into the same switch&amp;quot;, it&#039;s generally safe to leave off.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;interfaces&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which network interfaces are &amp;quot;plugged into&amp;quot; the bridge. We don&#039;t have any servers yet, so only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is plugged in, which is the link that provides a route out to the real world. Later, when we create our servers, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; file will be created for each server&#039;s interface. These are the virtual &amp;quot;network cables&amp;quot; providing a link between the servers and the bridge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
== Adding Everything to /etc/hosts ==&lt;br /&gt;
&lt;br /&gt;
If you recall from the [[AN!Cluster Tutorial 2#Network]] section, we&#039;ve got two nodes, each with three networks and an IPMI interface, two network switches, two switched PDUs and two UPSes. We&#039;re also going to create two dashboard servers, each of which will have a connection to the [[BCN]] and the [[IFN]]. &lt;br /&gt;
&lt;br /&gt;
All of these have IP addresses. We want to be able to address them by names, which we can do by adding them to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file. If you prefer to have this centralized, you can always use internal DNS servers instead, but that is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
The format of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ip_addres&amp;gt;	&amp;lt;name&amp;gt;[ &amp;lt;name2&amp;gt; &amp;lt;name...&amp;gt; &amp;lt;nameN&amp;gt;]&amp;lt;/span&amp;gt;. We want the short domain and full domain name to resolve to the [[BCN]] IP address on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network. For this, we&#039;ll have multiple names on the BCN entry and then a single name for the [[SN]] and [[IFN]] entries.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save this to both nodes and then you can test that the names resolve properly using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gethostip -d $name&amp;lt;/span&amp;gt;. Lets look at the names we gave to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and verify they resolve to the desired IP addresses.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Test resolution of the foundation pack devices and the monitor packs as well. If they all resolve properly, we&#039;re ready to move on.&lt;br /&gt;
&lt;br /&gt;
== What is IPMI ==&lt;br /&gt;
&lt;br /&gt;
[[IPMI]], short for &amp;quot;Intelligent Platform Management Interface&amp;quot;, is a standardized network-attched device built in to many servers. It is a stand-alone device which allows external people and devices the ability to log in and check the state of the host server. It can read the various sensor values, press the power and reset switches, report whether the host node is powered on or not and so forth.&lt;br /&gt;
&lt;br /&gt;
Many companies build on the basic IPMI standard by adding advanced features like remote console access over the network, ability to monitor devices plugged into the server like the RAID controller and its hard drives and so on. Each vendor generally has a name for their implementation of IPMI;&lt;br /&gt;
&lt;br /&gt;
* Fujitsu calls theirs [http://globalsp.ts.fujitsu.com/dmsp/Publications/public/ds-iRMC-S3.pdf iRMC]&lt;br /&gt;
* HP calls theirs [https://en.wikipedia.org/wiki/HP_Integrated_Lights-Out iLO]&lt;br /&gt;
* Dell calls theirs [https://en.wikipedia.org/wiki/Dell_DRAC DRAC]&lt;br /&gt;
* IBM calls their [https://en.wikipedia.org/wiki/Remote_Supervisor_Adapter RSA]&lt;br /&gt;
&lt;br /&gt;
Various other vendors will have different names as well. In most cases though, they will all support the generic IPMI interface and Linux tools. We&#039;re going to use these tools to configure each node&#039;s IPMI &amp;quot;BMC&amp;quot;, Baseboard Management Controller, for use as a fence device.&lt;br /&gt;
&lt;br /&gt;
The idea here is this;&lt;br /&gt;
&lt;br /&gt;
If a node stops responding, the remaining surviving node can&#039;t simply assume the peer is off. We&#039;ll go into the details of &amp;quot;why not?&amp;quot; later in the fencing section. The remaining node will log into the peer&#039;s IPMI BMC and ask it to power off the host. Once off, the surviving node will verify that the power is off, confirming that the peer is certainly no longer alive and offering clustered services. With this known, recovery can safely begin.&lt;br /&gt;
&lt;br /&gt;
We need to assign an IP address to each IPMI BMC and then configure the user name and password to use later when connecting.&lt;br /&gt;
&lt;br /&gt;
We will also use the sensor values reported by the IPMI BMC in our monitoring and alert system. If, for example, a temperate climbs too high or too fast, the alert system will be able to see this and fire off an alert. &lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section walks through configuring IPMI on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. Please repeat for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We installed the needed IPMI tools earlier and we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; to start on boot. Verify that it&#039;s running now;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ipmi status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ipmi_msghandler module loaded.&lt;br /&gt;
ipmi_si module loaded.&lt;br /&gt;
ipmi_devintf module loaded.&lt;br /&gt;
/dev/ipmi0 exists.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; daemon is running and it was able to talk to the BMC. If this failed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/ipmi0&amp;lt;/span&amp;gt; would not exist. If this is the case for you, please find what make and model of IPMI BMC is used in your server and look for known issues with that chip.&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;ll check is that we can query IPMI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chassis&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool chassis status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
System Power         : on&lt;br /&gt;
Power Overload       : false&lt;br /&gt;
Power Interlock      : inactive&lt;br /&gt;
Main Power Fault     : false&lt;br /&gt;
Power Control Fault  : false&lt;br /&gt;
Power Restore Policy : previous&lt;br /&gt;
Last Power Event     : &lt;br /&gt;
Chassis Intrusion    : inactive&lt;br /&gt;
Front-Panel Lockout  : inactive&lt;br /&gt;
Drive Fault          : false&lt;br /&gt;
Cooling/Fan Fault    : false&lt;br /&gt;
Sleep Button Disable : not allowed&lt;br /&gt;
Diag Button Disable  : allowed&lt;br /&gt;
Reset Button Disable : allowed&lt;br /&gt;
Power Button Disable : allowed&lt;br /&gt;
Sleep Button Disabled: false&lt;br /&gt;
Diag Button Disabled : false&lt;br /&gt;
Reset Button Disabled: false&lt;br /&gt;
Power Button Disabled: false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! If you get something like this, you&#039;re past 90% of the potential problems.&lt;br /&gt;
&lt;br /&gt;
We can check more information on the hosts using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mc&amp;lt;/span&amp;gt; to query the management controller.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool mc info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device ID                 : 2&lt;br /&gt;
Device Revision           : 2&lt;br /&gt;
Firmware Revision         : 1.1&lt;br /&gt;
IPMI Version              : 2.0&lt;br /&gt;
Manufacturer ID           : 10368&lt;br /&gt;
Manufacturer Name         : Fujitsu Siemens&lt;br /&gt;
Product ID                : 611 (0x0263)&lt;br /&gt;
Product Name              : Unknown (0x263)&lt;br /&gt;
Device Available          : yes&lt;br /&gt;
Provides Device SDRs      : no&lt;br /&gt;
Additional Device Support :&lt;br /&gt;
    Sensor Device&lt;br /&gt;
    SDR Repository Device&lt;br /&gt;
    SEL Device&lt;br /&gt;
    FRU Inventory Device&lt;br /&gt;
    IPMB Event Receiver&lt;br /&gt;
    Bridge&lt;br /&gt;
    Chassis Device&lt;br /&gt;
Aux Firmware Rev Info     : &lt;br /&gt;
    0x05&lt;br /&gt;
    0x08&lt;br /&gt;
    0x00&lt;br /&gt;
    0x41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some servers will report the details of &amp;quot;field replaceable units&amp;quot;; components than can be swapped out as needed. Every server will report different data here, but you can see what our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://manuals.ts.fujitsu.com/file/10963/rx300s6-ba-en.pdf RX300 S6]&amp;lt;/span&amp;gt; returns below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool fru print&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
FRU Device Description : Builtin FRU Device (ID 0)&lt;br /&gt;
 Device not present (Requested sensor, data, or record not found)&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : Chassis (ID 2)&lt;br /&gt;
 Chassis Type			 : Rack Mount Chassis&lt;br /&gt;
 Chassis Extra			 : RX300S6R1&lt;br /&gt;
 Product Manufacturer  : FUJITSU&lt;br /&gt;
 Product Name          : PRIMERGY RX300 S6&lt;br /&gt;
 Product Part Number   : ABN:K1344-V101-2204&lt;br /&gt;
 Product Version       : GS01&lt;br /&gt;
 Product Serial        : xxxxxxxxxx&lt;br /&gt;
 Product Asset Tag     : 15&lt;br /&gt;
 Product Extra         : 25a978&lt;br /&gt;
 Product Extra         : 0263&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : MainBoard (ID 3)&lt;br /&gt;
 Board Mfg Date        : Wed Dec 22 07:36:00 2010&lt;br /&gt;
 Board Mfg             : FUJITSU&lt;br /&gt;
 Board Product         : D2619&lt;br /&gt;
 Board Serial          : xxxxxxxx&lt;br /&gt;
 Board Part Number     : S26361-D2619-N15&lt;br /&gt;
 Board Extra           : WGS10 GS02&lt;br /&gt;
 Board Extra           : 02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU1 (ID 7)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU2 (ID 8)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can check all the sensor value using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; as well. This is actually what the cluster monitor we&#039;ll install later does.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool sdr list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ambient          | 27.50 degrees C   | ok&lt;br /&gt;
Systemboard      | 43 degrees C      | ok&lt;br /&gt;
CPU1             | 34 degrees C      | ok&lt;br /&gt;
CPU2             | 37 degrees C      | ok&lt;br /&gt;
DIMM-1A          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2A          | disabled          | ns&lt;br /&gt;
DIMM-3A          | disabled          | ns&lt;br /&gt;
DIMM-1B          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2B          | disabled          | ns&lt;br /&gt;
DIMM-3B          | disabled          | ns&lt;br /&gt;
DIMM-1C          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2C          | disabled          | ns&lt;br /&gt;
DIMM-3C          | disabled          | ns&lt;br /&gt;
DIMM-1D          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2D          | disabled          | ns&lt;br /&gt;
DIMM-3D          | disabled          | ns&lt;br /&gt;
DIMM-1E          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2E          | disabled          | ns&lt;br /&gt;
DIMM-3E          | disabled          | ns&lt;br /&gt;
DIMM-1F          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2F          | disabled          | ns&lt;br /&gt;
DIMM-3F          | disabled          | ns&lt;br /&gt;
BATT 3.0V        | 3.13 Volts        | ok&lt;br /&gt;
STBY 3.3V        | 3.35 Volts        | ok&lt;br /&gt;
iRMC 1.2V STBY   | 1.19 Volts        | ok&lt;br /&gt;
iRMC 1.8V STBY   | 1.80 Volts        | ok&lt;br /&gt;
LAN 1.0V STBY    | 1.01 Volts        | ok&lt;br /&gt;
LAN 1.8V STBY    | 1.81 Volts        | ok&lt;br /&gt;
MAIN 12V         | 12 Volts          | ok&lt;br /&gt;
MAIN 5.15V       | 5.18 Volts        | ok&lt;br /&gt;
MAIN 3.3V        | 3.37 Volts        | ok&lt;br /&gt;
IOH 1.1V         | 1.10 Volts        | ok&lt;br /&gt;
IOH 1.8V         | 1.80 Volts        | ok&lt;br /&gt;
ICH 1.5V         | 1.50 Volts        | ok&lt;br /&gt;
IOH 1.1V AUX     | 1.09 Volts        | ok&lt;br /&gt;
CPU1 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
CPU2 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
Total Power      | 190 Watts         | ok&lt;br /&gt;
PSU1 Power       | 100 Watts         | ok&lt;br /&gt;
PSU2 Power       | 80 Watts          | ok&lt;br /&gt;
CPU1 Power       | 5.50 Watts        | ok&lt;br /&gt;
CPU2 Power       | 4.40 Watts        | ok&lt;br /&gt;
Fan Power        | 15.84 Watts       | ok&lt;br /&gt;
Memory Power     | 8 Watts           | ok&lt;br /&gt;
HDD Power        | 45 Watts          | ok&lt;br /&gt;
FAN1 SYS         | 5340 RPM          | ok&lt;br /&gt;
FAN2 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN3 SYS         | 4920 RPM          | ok&lt;br /&gt;
FAN4 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN5 SYS         | 5100 RPM          | ok&lt;br /&gt;
FAN1 PSU1        | 6360 RPM          | ok&lt;br /&gt;
FAN2 PSU1        | 6480 RPM          | ok&lt;br /&gt;
FAN1 PSU2        | 6480 RPM          | ok&lt;br /&gt;
FAN2 PSU2        | 6240 RPM          | ok&lt;br /&gt;
I2C1 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C2 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C3 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C4 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C5 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C6 error ratio | 0 unspecified     | ok&lt;br /&gt;
SEL Level        | 0 unspecified     | ok&lt;br /&gt;
Ambient          | 0x02              | ok&lt;br /&gt;
CPU1             | 0x80              | ok&lt;br /&gt;
CPU2             | 0x80              | ok&lt;br /&gt;
Power Unit       | 0x01              | ok&lt;br /&gt;
PSU              | Not Readable      | ns&lt;br /&gt;
PSU1             | 0x02              | ok&lt;br /&gt;
PSU2             | 0x02              | ok&lt;br /&gt;
Fanboard Row 2   | 0x00              | ok&lt;br /&gt;
FAN1 SYS         | 0x01              | ok&lt;br /&gt;
FAN2 SYS         | 0x01              | ok&lt;br /&gt;
FAN3 SYS         | 0x01              | ok&lt;br /&gt;
FAN4 SYS         | 0x01              | ok&lt;br /&gt;
FAN5 SYS         | 0x01              | ok&lt;br /&gt;
FAN1 PSU1        | 0x01              | ok&lt;br /&gt;
FAN2 PSU1        | 0x01              | ok&lt;br /&gt;
FAN1 PSU2        | 0x01              | ok&lt;br /&gt;
FAN2 PSU2        | 0x01              | ok&lt;br /&gt;
FanBoard         | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-1B          | 0x02              | ok&lt;br /&gt;
DIMM-1B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-1C          | 0x02              | ok&lt;br /&gt;
DIMM-1C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-1D          | 0x02              | ok&lt;br /&gt;
DIMM-1D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-1E          | 0x02              | ok&lt;br /&gt;
DIMM-1E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-1F          | 0x02              | ok&lt;br /&gt;
DIMM-1F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
Watchdog         | 0x00              | ok&lt;br /&gt;
iRMC request     | 0x00              | ok&lt;br /&gt;
I2C1             | 0x02              | ok&lt;br /&gt;
I2C2             | 0x02              | ok&lt;br /&gt;
I2C3             | 0x02              | ok&lt;br /&gt;
I2C4             | 0x02              | ok&lt;br /&gt;
I2C5             | 0x02              | ok&lt;br /&gt;
I2C6             | 0x02              | ok&lt;br /&gt;
Config backup    | 0x00              | ok&lt;br /&gt;
Total Power      | 0x01              | ok&lt;br /&gt;
PSU1 Power       | 0x01              | ok&lt;br /&gt;
PSU2 Power       | 0x01              | ok&lt;br /&gt;
CPU1 Power       | 0x01              | ok&lt;br /&gt;
CPU2 Power       | 0x01              | ok&lt;br /&gt;
Memory Power     | 0x01              | ok&lt;br /&gt;
Fan Power        | 0x01              | ok&lt;br /&gt;
HDD Power        | 0x01              | ok&lt;br /&gt;
Power Level      | 0x01              | ok&lt;br /&gt;
Power Level      | 0x08              | ok&lt;br /&gt;
CPU detection    | 0x00              | ok&lt;br /&gt;
System Mgmt SW   | Not Readable      | ns&lt;br /&gt;
NMI              | 0x00              | ok&lt;br /&gt;
Local Monitor    | 0x02              | ok&lt;br /&gt;
Pwr Btn override | 0x00              | ok&lt;br /&gt;
System BIOS      | Not Readable      | ns&lt;br /&gt;
iRMC             | Not Readable      | ns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can narrow that call down to just see temperature, power consumption and what not. That&#039;s beyond the scope of this tutorial though. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; is great for seeing all the neat stuff you can do.&lt;br /&gt;
&lt;br /&gt;
=== Finding our IPMI LAN Channel ===&lt;br /&gt;
&lt;br /&gt;
Before we can configure it though, we need to find our &amp;quot;LAN channel&amp;quot;. Different manufacturers will use different channels, so we need to be able to find the one we&#039;re using.&lt;br /&gt;
&lt;br /&gt;
To find it, simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool lan print X&amp;lt;/span&amp;gt;. Increment &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, until you get a response.&lt;br /&gt;
&lt;br /&gt;
So first, let&#039;s query LAN channel 1.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Channel 1 is not a LAN channel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
No luck; Let&#039;s try channel 2.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Found it! So we know that this server uses LAN channel 2. We&#039;ll need to use this for the next steps.&lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
Now that we can read our IPMI data, it&#039;s time to set some values.&lt;br /&gt;
&lt;br /&gt;
We know that we want to set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI interface to have the IP &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.1/16&amp;lt;/span&amp;gt;. We also need to setup a user on the IPMI BMC so that we can log in from other nodes.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s set the IP address. Remember to use the LAN channel you found on your server. We don&#039;t actually have a gateway on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network, but some devices insist on a default gateway being set. For this reason, we&#039;ll always set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.255.254&amp;lt;/span&amp;gt; as the gateway server. You will want to adjust this (or not use it at all) for your network.&lt;br /&gt;
&lt;br /&gt;
This requires four calls;&lt;br /&gt;
&lt;br /&gt;
# Tell the interface to use a static IP address.&lt;br /&gt;
# Set the IP address&lt;br /&gt;
# Set the subnet mask&lt;br /&gt;
# (optional) Set the default gateway&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 ipsrc static&lt;br /&gt;
ipmitool lan set 2 ipaddr 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN IP Address to 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 netmask 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Subnet Mask to 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 defgw ipaddr 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Default Gateway IP to 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll again print the LAN channel information and we should see that the IP address has been set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Find the IPMI User ID ===&lt;br /&gt;
&lt;br /&gt;
Next up is to find the IPMI administrative user name and user ID. We&#039;ll record the name for later use in the cluster setup. We&#039;ll use the ID to update the user&#039;s password.&lt;br /&gt;
&lt;br /&gt;
To see the list of users, run the following.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user list 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ID  Name	     Callin  Link Auth	IPMI Msg   Channel Priv Limit&lt;br /&gt;
1                    true    true       true       Unknown (0x00)&lt;br /&gt;
2   admin            true    true       true       OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you see an error like &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Get User Access command failed (channel 2, user 3): Unknown (0x32)&amp;lt;/span&amp;gt;&amp;quot;, it is safe to ignore.}}&lt;br /&gt;
&lt;br /&gt;
Normally you should see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ADMINISTRATOR&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Channel Priv Limit&amp;lt;/span&amp;gt; column. Above we see that the user named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; with ID &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt;, so that is the user we will use.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; in the next argument corresponds to the user ID, not the LAN channel!}}&lt;br /&gt;
&lt;br /&gt;
To set the password to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt;, run the following command and then enter the word &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt; twice.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user set password 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password for user 2: &lt;br /&gt;
Password for user 2: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Testing the IPMI Connection From the Peer ===&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;ve set each node&#039;s IPMI BMC network address and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; user&#039;s password. Now it&#039;s time to make sure it works.&lt;br /&gt;
&lt;br /&gt;
In the example above, we walked through setting up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI BMC. So here, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and try to connect to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ipmi&amp;lt;/span&amp;gt; to make sure everything works.&lt;br /&gt;
&lt;br /&gt;
* From &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n01.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now let&#039;s test from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; connecting to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ipmi&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n02.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo!&lt;br /&gt;
&lt;br /&gt;
== Setting up SSH ==&lt;br /&gt;
&lt;br /&gt;
Setting up [[SSH]] shared keys will allow your nodes to pass files between one another and execute commands remotely without needing to enter a password. This will be needed later when we want to enable applications like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and its tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SSH is, on its own, a very big topic. If you are not familiar with SSH, please take some time to learn about it before proceeding. A great first step is the [http://en.wikipedia.org/wiki/Secure_Shell Wikipedia] entry on SSH, as well as the SSH [[man]] page; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man ssh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[SSH]] can be a bit confusing keeping connections straight in you head. When you connect to a remote machine, you start the connection on your machine as the user you are logged in as. This is the source user. When you call the remote machine, you tell the machine what user you want to log in as. This is the remote user.&lt;br /&gt;
&lt;br /&gt;
=== Create the RSA Keys ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section covers setting up [[SSH]] for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please be sure to follow these steps for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
You will need to create an SSH key for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on each node. Once created, we will need to copy the &amp;quot;public key&amp;quot; into a special file on both nodes to enable connecting to either node without a password.&lt;br /&gt;
&lt;br /&gt;
Lets start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The &#039;4095&#039; is just to screw with brute-forces a bit. :)&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 root@an-c05n01.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|     .E.         |&lt;br /&gt;
|     .o.         |&lt;br /&gt;
|      .o. .      |&lt;br /&gt;
|      ...*       |&lt;br /&gt;
|     .. S o      |&lt;br /&gt;
|    .  = o       |&lt;br /&gt;
|   . ...+ .      |&lt;br /&gt;
|    o ++ +       |&lt;br /&gt;
|     ++.+        |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will create two files: the private key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa&amp;lt;/span&amp;gt; and the public key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa.pub&amp;lt;/span&amp;gt;. The private &#039;&#039;&#039;&#039;&#039;must never&#039;&#039;&#039;&#039;&#039; be group or world readable! That is, it should be set to mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0600&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you look closely when you created the ssh key, the node&#039;s fingerprint is show (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40&amp;lt;/span&amp;gt; for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above). Make a note of the fingerprint for each machine, and then compare it to the one presented to you when you ssh to a machine for the first time. If you are presented with a fingerprint that doesn&#039;t match, you could be facing a &amp;quot;man in the middle&amp;quot; attack. &lt;br /&gt;
&lt;br /&gt;
To look up a fingerprint in the future, you can run the following;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -l -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
4095 1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 /root/.ssh/id_rsa.pub (RSA)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two newly generated files should look like;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Private key&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
MIIJIwIBAAKCAgBk3o54tw1f0BJ0UOp/OWpLa5VaKDIKKmwe7Um6kcmDVBO8Itbg&lt;br /&gt;
7FxXHxX6Xi/CqoqjPEwvpjSgBVSGF5IkSAcAdyKEmqJ0pM3A4Hg+g1JehQLx3k2v&lt;br /&gt;
DPfIcTvsIGEkS63XZiOs6t1sPubgjKw9encpYHq4s2Z26Ux/w85FbIMCR3oNroG2&lt;br /&gt;
scU4OJnICosoibsEXheaDzUl8fIpEkIHGVK4iOy2Y2CoxEKw5bE1yBv0KlRKrN9i&lt;br /&gt;
jFvoq2eAUG+NtjOxaG9DK3IgITQVd1PDgoBqEvEJK/kdfckGQu47cKGJS8bzgWLD&lt;br /&gt;
vXprg9OsXBu/MZSVK1AjvL3pfZEOT/k1B6gWu2ww7hGWVZj2IXnFcRv4TMs+DXg2&lt;br /&gt;
xZm7pWTkPLNxFzqtAZH60jXZmbPAFNDNS7M3Qs6oBCFlvUL00vFNu3uoM2NARG0V&lt;br /&gt;
bvLT0zb8dhQDpV2KoGsKUFGsDo773rH7AtBBPEzODgxjTk7rH+0Rt38JLN8T5XeO&lt;br /&gt;
RUitX9MS5abjis6DZ5agm8Swd3cpAK7g5yeKdxmUA774i+BlkkH1VdsdBT9RImvc&lt;br /&gt;
/OfVly208jpNRisCQgP4FTlEFG9YOeQ416euJ6xX5oP+I6z9f0rMzQEprh0WgT5r&lt;br /&gt;
/oIKfjwF3v109rquUZLxrLYb8qkomwWnxPD4VL7GPUU0hzgr+h+xRWI0nQIBIwKC&lt;br /&gt;
AgBfGvtb38rIDVM6eC2N5a1dDaoTLTZ+nQbbVMHby0j4KrOFf+8r14pDg7Wi6xcW&lt;br /&gt;
oMvbvIJYz+h5nqAmqIJ5+sTF7KuEV0i3HwsjkdB1dIDcxo2/edQ3VV6nC62G3LNc&lt;br /&gt;
vGIUO7s8ou4G+XqZNC1eiWkJwV3EFtzzxgZMlAugiuHsNMOJPiKHru0mYUCJaQbd&lt;br /&gt;
FCVb46/aZhwrF1IJd51XJoExpav8bFPSUqVHs/7a79/XlZ/uov6BfQYzJURUaRi4&lt;br /&gt;
0Fyf9MCtC7S/NT+8d9KiZRn9nNSiP2c5EDKQ4AUwuqbvKjCccq2T+8syK9Y0y9+l&lt;br /&gt;
o8abRhhcNZ0d+gxslIvhiuBOtTTV7Fy6zYyhSkAOzF33kl+jDDm2nNvxjxFU3Lo1&lt;br /&gt;
qSP7n2yedz5QKOvwykmwN/uzn5FWSmKc5GdL/t+yu94zf0eR9pDhkg0u9dXFkim0&lt;br /&gt;
Hq8RsW1vH4aD0BBMiBn34EbnaQaotX7lAUxfTjG0iZ9z8T48NIqPf/66evqUk3bx&lt;br /&gt;
VoFS79GkW8yWrXQX6B3oUAtm10aeP9Htz+AQIPdatO9pREIzE6UbEnc2kSrzFcJh&lt;br /&gt;
4hmarrQgJq7qzFjgRLBgjiOsdEo5SGLTFh17UIh5k/deeTxLsGSFuBbpz5+jr4tt&lt;br /&gt;
0s4wcmamTR8ruURGh+4i/Px6F9QsechnIMKGNthWVxhEawKCAQEA2kCH/FL/A7Ib&lt;br /&gt;
fCt0PFvCKWeF1V+PhdzEdkIRvS3OusWP9Z+py6agh3kAFWjOZT16WgYPeftMKYaE&lt;br /&gt;
3Wiixfx+99ta0eQiKqozYgB3pg5UWdxsXv30jrTyRuhhEBId2lGV6/eHgGYs48s1&lt;br /&gt;
oCCrljsVmWd+p4uSAplIBewCv7YPsxl3DZJTV6DFRD9mnuqjrqozSM+UsoMPRTPZ&lt;br /&gt;
7AyaDxeb63LiWTq6T/gLHptmu8K0SLvDkzA5LeBWKUNFcMHpWODpzjPj5J4Mtulr&lt;br /&gt;
R8oLtEy/2ZyWi7n8JuOt+swTsZDN0Qzcpzw9MU1RWs0sqGvTO91bMjc+FYew7wuZ&lt;br /&gt;
CEZxX4VxSQKCAQB2ULaKc4Oersq7Z3fQXIynLNT8lZ/AKQaAH/SdLL7IGKWRZ9eA&lt;br /&gt;
VOQNnZnThnKMDbDS8GPOpjzfjPDP8L7Y6NOVgc6ETGEdvoXomZv+sqpwx3BWszNK&lt;br /&gt;
18FfV0HhLv0MFHAPfMIqPqhhYUDnDAt/yWFViujIIrllmXjH9JGZDdPgzsupPToZ&lt;br /&gt;
FKC5UAYeAZwpaX2AROrfACscn99kNsTE7F8HtMQ//iT+M0rHVTzhVBnm1/e3eY1J&lt;br /&gt;
9L6WUbCPzBeiNFNC+y9+0nZk0tkgJk+qUPYdnaQL44TtlZMT1iWKg3C6dgrjbbaG&lt;br /&gt;
tFZmwh2/hf0Aovycpn/Fm2PKwxved64FnDy1AoIBABK1Evhe4qiLm/SzRHozwC9v&lt;br /&gt;
RfxYpebnCYZ6sRA3IFkm4HQjoNbxBnIDDqK/1y0/yKihbwp0oCDRBBL6VxhI167Y&lt;br /&gt;
SZz2TBJJGljbd/hKXwBjWb7/0yIsxE84fVkmH9Dia++ngKSbCyl30WV/JKZ6F8tS&lt;br /&gt;
A4q0MRYqZUJWDt07fbBEAuPn+IPalJDSO/7+K0l8TYnl6CyO5A0+9WwBFITzZSLP&lt;br /&gt;
VTrZJemY6wKfmxdoddpZPKY3VVu0JKRzevsJToP2BWlyKXn+6yWe+pEf8l/pUkXa&lt;br /&gt;
OMol4mm7vnSVJkJrf1sPuyRG/e5IdLAC9TMB7YjJ1J3nelmd6pglkMYx7HXm3dMC&lt;br /&gt;
ggEAUSFnOl3WmLJfIWuFW60tP28y9lf4g8RcOpmRytzal9Zi510mDtsgCVYgVogU&lt;br /&gt;
CEPm9ws9H/z2iqnJsyi9YYm1qFkCo9yaXYn1bEwTMk6gwlzfUWTv+M51+DvVZzYp&lt;br /&gt;
3GXJLzD6K5it+aHGGsZuSP8eLAd7DOScYuzlG2XgLm/hvrmwOYkR5U/5Lp1GBfJ5&lt;br /&gt;
tf8xfIcHdFfjDFBeqx49yNyY71dh//66R+ioTivR+ZjBTdXrsQLkinvwZxNxwbCF&lt;br /&gt;
PAaffmMZQQVYf6aGQe5ig2q3ZMPeNAm6PIPSkUJi4qNF/DOvseTU7qeLtC1WOi/9&lt;br /&gt;
8c7ZGvXT9TdaXya0BkNwA9jZKwKCAQBUDqjJ7Q/nlxLifyOInW1RbwbUFzh7mdfC&lt;br /&gt;
w6362II2gIz0JRg7HQHMwfbY5t+ELi9Rsdn90wlPQ08cK42goKW46Nt30g+AoQ/N&lt;br /&gt;
0maLzbrn5BffAtI7XM0a4i3dZ/yjS0/NW39km0YnTe49W6CBBf91fChIfm+jvYna&lt;br /&gt;
ihA9x/SgyuBUvQ1bCrMzMM024TxhCkvvKI2MDmJNJHOeqovYFAXiHFGPmftunu1K&lt;br /&gt;
oDRUPb6j5gTBhxAV1ZPHKCee7EIFwi/jJ/31oMLEJp5RnAdrW+FitPjQ7hcoRStm&lt;br /&gt;
VZAoapBJb37xa1kq/7hHYf2bPVdrcO8AeStpjEh6GbtYmy2pWlFy&lt;br /&gt;
-----END RSA PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is line-wrapped to make it easier to read. Real keys should be a single line.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public key&#039;&#039;&#039; (single line, but wrapped here to make it more readable):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa.pub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgBKYiBxI06RGiar5rt121+tO1crpa9MwL+K5qtlx0IrL7QUDxi+hvdXg3sTS6+R/mnLDE8eS&lt;br /&gt;
ulgRX4fHweNbM96wnl2N9mOnODLJftWPbPUHFpTc/0bDRcXq4rB+V+NvXG1i74W1si8Fp/R5wnPmF7yo/ZjN2zXLhwesOVY3Cnmur+O19&lt;br /&gt;
80O4lT7Zl5Q0mALNkriouhD+FzQZnMky8X2MM4dmnYqctCI54jbgD0vN09uUu8KyGycV9BFW7ScfGBEvow4/+8YW+my4bG0SBjJki7eOK&lt;br /&gt;
W3fvr58cybXO+UBqLFO7yMe5jf0fClyz6MFn+PRPR37QQy4GIC+4MCaYaiCx2P/K+K/ZxH621Q8nBE9TdNCw6iVqlt5Si3x2UzxOlrYLZ&lt;br /&gt;
nvB1BfzY92Rd/RNP5bz17PapaOMLjkx6iIAEDbp2lL5vzGp+1S30SX956sX/4CYWVTg+MAwok9mUcyj60VU+ldlPDuN7UYUi8Wmoa6Jsu&lt;br /&gt;
ozstUNBCsUcKzt5FEBy4vOwOMtyu3cD4rQrn3eGXfZ1a4QpLnR2H9y7EnM4nfGdQ/OVjMecAtHUxx3FDltHgiSkQDEF9R4s3z6NLZ2mda&lt;br /&gt;
TU9A5zm+1rMW1ZLhGkfna/h2KV9o8ZNx79WyKMheajL4lgi495D7c6fF4GBgX7u7qrdZyCj2cXgrgT4nGwM2Z81Q== root@an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now do the same thing on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to generate its key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
68:71:fb:87:88:e3:c2:89:49:ad:d0:55:7d:1c:05:b6 root@an-c05n02.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|       . .++.    |&lt;br /&gt;
|      . ..o.     |&lt;br /&gt;
|     .. ..E      |&lt;br /&gt;
|    .  + .       |&lt;br /&gt;
| . o  o S        |&lt;br /&gt;
|. o .. . o .     |&lt;br /&gt;
| o = .o . o .    |&lt;br /&gt;
|  + +. .   .     |&lt;br /&gt;
|     ..          |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Populate known_hosts ===&lt;br /&gt;
&lt;br /&gt;
Normally, the first time you try to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; into a computer, you will be asked to verify that the fingerprint reported by the target server is valid. We just created our nodes, so we can trust that we&#039;re connecting to the actual target machine we think we are.&lt;br /&gt;
&lt;br /&gt;
Seeing as we&#039;re comfortable with this, we can use a nifty program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh-keyscan&amp;lt;/span&amp;gt; to read the fingerprint of the target machine and copy the resulting key to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file. We&#039;ll need to do this for all variations of the host names for each node. This alone means that we need to add ten fingerprints, five for the five names of each node.&lt;br /&gt;
&lt;br /&gt;
This is somewhat tedious, so we&#039;ll do this once on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy the populated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; later.&lt;br /&gt;
&lt;br /&gt;
If you recall from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; section, we&#039;ve got five possible host names per node. We&#039;ll call all of them now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with [[bash]] redirections, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt; ~/.ssh/known_hosts&amp;lt;/span&amp;gt; file tells the OS, &amp;quot;Take the returned text that would have been printed to screen and instead append it to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt;&amp;quot;. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; didn&#039;t exist yet, so it was created.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll repeat this, once for each host name for either node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all the host names for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Now we&#039;ll repeat the steps for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now we won&#039;t get asked to verify the target machine&#039;s RSA fingerprint when we try to connect later. More importantly, if the fingerprint ever changes, it will generate a very noisy alert telling us that something nasty, like a fake target having replaced our peer, might have happened.&lt;br /&gt;
&lt;br /&gt;
The last step is to copy this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, saving us the hassle of running all those commands a second time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/known_hosts root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: Permanently added the RSA host key for IP address &#039;10.20.50.2&#039; to the list of known hosts.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that warning, it&#039;s a one time thing. Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
known_hosts&lt;br /&gt;
&lt;br /&gt;
sent 4817 bytes  received 31 bytes  1077.33 bytes/sec&lt;br /&gt;
total size is 4738  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Copy Public Keys to Enable SSH Without a Password ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This only disabled the need for passwords when connecting from one node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; use to the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user. It does not remove the need for passwords from any other machines or users!}}&lt;br /&gt;
&lt;br /&gt;
In order to enable password-less login, we need to create a file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; and put both nodes&#039; public key in it. We will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll copy the local &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; file. This will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file and add the local public RSA in one step.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; to print the contents of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s public key to screen, but redirect the key to the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02 &amp;quot;cat /root/.ssh/id_rsa.pub&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done. Now we can verify that both keys have been added to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I&#039;m truncating the output below to make it more readable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n01.alteeve.ca&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and, with luck, enter the password one last time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/authorized_keys root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
authorized_keys&lt;br /&gt;
&lt;br /&gt;
sent 1577 bytes  received 31 bytes  643.20 bytes/sec&lt;br /&gt;
total size is 1494  speedup is 0.93&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to test connecting from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should not get any prompt at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Last login: Tue Oct 29 14:02:19 2013 from ...cable.user.start.ca&lt;br /&gt;
[root@an-c05n02 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice! Just type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exit&amp;lt;/span&amp;gt; to return to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
logout&lt;br /&gt;
Connection to an-c05n02 closed.&lt;br /&gt;
[root@an-c05n01 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; from either node to connect to the other node using any of the host names we set! Note that the physical network you use for the connection will depend on the host name you use. When you used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; above, you connect using the [[BCN]]. Had you instead used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;, we would have connected over the [[SN]].&lt;br /&gt;
&lt;br /&gt;
== Setting Up UPS Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that you are using [http://www.apc.com/site/apc/index.cfm?ISOCountryCode=ca APC] brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] network management cards. If you use another make or model, please be sure that it uses a network connection, not USB or serial, and that it is supported by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://www.apcupsd.com/ apcupsd]&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We always recommend that you have two network-managed [[UPS]]es backing either switched [[PDU]]. This protects your &#039;&#039;Anvil!&#039;&#039; against power outages, of course, but they can also protect against distorted input power, under and over voltage events and other power anomalies. &lt;br /&gt;
&lt;br /&gt;
The reason we recommend network managed UPSes, instead of passive UPSes, is that it allows for monitoring incoming power and alerting on notable events. We have found that power events are the most common issues in production. Being alerted to power events can allow you to deal with issues that might otherwise effect other equipment in your facility that isn&#039;t or can&#039;t be protected by UPSes.&lt;br /&gt;
&lt;br /&gt;
=== Installing apcupsd ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; program is not available in the normal [[RHEL]] or [[CentOS]] repositories. So you can either [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Build_From_Source|build it yourself]] or install a version pre-built by us. In production, it certainly makes sense to build your own as it&#039;s most secure. If you wish, you could also [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Installing_on_CentOS|install from ELRepo]].&lt;br /&gt;
&lt;br /&gt;
For the purpose of this tutorial, we&#039;ll download the version from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; servers as it&#039;s the simplest option.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring Apcupsd For Two UPSes ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Much of the credit for this section belongs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s [http://www.apcupsd.org/manual/manual.html#controlling-multiple-upses-on-one-machine project documentation] on the topic. It&#039;s been edited somewhat to better suit our needs.}}&lt;br /&gt;
&lt;br /&gt;
By default, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; only supports one UPS. The practical side effect of this is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will initiate a shut down as soon as the first UPS is low on batteries. This makes no sense if the second UPS is still full or running on AC.&lt;br /&gt;
&lt;br /&gt;
So we&#039;re going to make two main changes here;&lt;br /&gt;
&lt;br /&gt;
# Disable the ability for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down of the node.&lt;br /&gt;
# Configure &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to support two (or more) UPSes.&lt;br /&gt;
&lt;br /&gt;
Before we begin, we will make a backup of the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.conf&amp;lt;/span&amp;gt; file. Then we&#039;re going to rename it and configure it for the first UPS. Once it&#039;s configured, we will copy it for the second UPS and change just the variable values that differ.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once it&#039;s configured and working, we&#039;ll copy our new configuration to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
We [[#Foundation_Pack_Host_Names|decided earlier]] to name our UPSes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;. We&#039;re going to use these names in the configuration and log file names used for each UPS. So let&#039;s backup the original configuration file and then rename it to match our first UPS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.conf.anvil&lt;br /&gt;
mv /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
ls -lah /etc/apcupsd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 108K&lt;br /&gt;
drwxr-xr-x.  3 root root 4.0K Nov 26 17:34 .&lt;br /&gt;
drwxr-xr-x. 90 root root  12K Nov 25 17:28 ..&lt;br /&gt;
-rwxr--r--.  1 root root 3.9K Mar  4  2013 apccontrol&lt;br /&gt;
-rw-r--r--.  1 root root  13K Mar  4  2013 apcupsd.an-u01.conf&lt;br /&gt;
-rw-r--r--.  1 root root  13K Nov 26 15:49 apcupsd.conf.anvil&lt;br /&gt;
-rw-r--r--.  1 root root  607 Mar  4  2013 apcupsd.css&lt;br /&gt;
-rwxr--r--.  1 root root  460 Mar  4  2013 changeme&lt;br /&gt;
-rwxr--r--.  1 root root  487 Mar  4  2013 commfailure&lt;br /&gt;
-rwxr--r--.  1 root root  488 Mar  4  2013 commok&lt;br /&gt;
-rwxr-xr-x.  1 root root  17K Mar  4  2013 hid-ups&lt;br /&gt;
-rw-r--r--.  1 root root  662 Mar  4  2013 hosts.conf&lt;br /&gt;
-rwxr-xr-x.  1 root root  626 May 28  2002 make-hiddev&lt;br /&gt;
-rw-r--r--.  1 root root 2.3K Mar  4  2013 multimon.conf&lt;br /&gt;
-rwxr--r--.  1 root root  455 Mar  4  2013 offbattery&lt;br /&gt;
-rwxr--r--.  1 root root  420 Mar  4  2013 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;re going to create a new directory called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;. We&#039;ll copy some of the existing scripts into it and then create a new script that will disabled automatic shut down of the node. We&#039;re doing this so that future updates to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; won&#039;t replace our scripts. We&#039;ll see how we use this shortly.&lt;br /&gt;
&lt;br /&gt;
Once the directory is created, we&#039;ll copy the scripts we want. Next, we&#039;ll create a new script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;doshutdown&amp;lt;/span&amp;gt; which will do nothing expect exit with return code &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;99&amp;lt;/span&amp;gt;. This return code tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that the shut down action has been disabled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /etc/apcupsd/null&lt;br /&gt;
cp /etc/apcupsd/apccontrol /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/c* /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/o* /etc/apcupsd/null/&lt;br /&gt;
echo &amp;quot;exit 99&amp;quot; &amp;gt; /etc/apcupsd/null/doshutdown&lt;br /&gt;
chown root:root /etc/apcupsd/null/doshutdown&lt;br /&gt;
chmod 744 /etc/apcupsd/null/doshutdown&lt;br /&gt;
cat /etc/apcupsd/null/doshutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
exit 99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /etc/apcupsd/null/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 36K&lt;br /&gt;
drwxr-xr-x. 2 root root 4.0K Nov 26 17:39 .&lt;br /&gt;
drwxr-xr-x. 3 root root 4.0K Nov 26 17:34 ..&lt;br /&gt;
-rwxr--r--. 1 root root 3.9K Nov 26 17:35 apccontrol&lt;br /&gt;
-rwxr--r--. 1 root root  460 Nov 26 17:36 changeme&lt;br /&gt;
-rwxr--r--. 1 root root  487 Nov 26 17:36 commfailure&lt;br /&gt;
-rwxr--r--. 1 root root  488 Nov 26 17:36 commok&lt;br /&gt;
-rwxr--r--. 1 root root    8 Nov 26 17:39 doshutdown&lt;br /&gt;
-rwxr--r--. 1 root root  455 Nov 26 17:36 offbattery&lt;br /&gt;
-rwxr--r--. 1 root root  420 Nov 26 17:36 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now it&#039;s time to change the variables in the configuration file. Before we do though, lets look at the variables we&#039;re going to edit, what value we will set them to for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and what they do. We&#039;ll look at the specific variables we need to change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&#039;s configuration file later.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name to use for this UPS when writing log entries or reporting status information. It should be less than eight characters long. We&#039;re going to use the short host name for the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSTYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;snmp&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that we will communicate with this UPS using [[SNMP]] to talk to the network management card in the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the connection string needed for establishing the SNMP connection to the UPS. It&#039;s separated into four sections, each section separated by colons. The first value is the host name or IP address of the UPS. The second section is the [[TCP]] port to connect to, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;161&amp;lt;/span&amp;gt; on APC brand UPSes. The third and fourth sections are the vendor name and SNMP community, respectively. We&#039;re using the vendor name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;APC_NOTRAP&amp;lt;/span&amp;gt; in order to disable SNMP traps. The community should usually be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;private&amp;lt;/span&amp;gt;, unless you changed it in the network management card itself.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;POLLTIME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; how often, in seconds, to query the UPS status. The default is once per minute, but we will want twice per minute in order to match the scan frequency of the monitoring and alter system we will use later.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;SCRIPTDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to use the scripts in our new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory instead of the default ones.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PWRFAILDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|Some UPSes need to be powered off themselves when the power is about to run out of the batteries. This is controlled by a file written to this directory which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s shut down script looks for. We&#039;ve disabled shut down, but to be safe and thorough, we will disable this as well by pointing it at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BATTERYLEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this percentage left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MINUTES&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this many minutes of run time left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3551&amp;lt;/span&amp;gt;&lt;br /&gt;
|The default value here is fine for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, but it is important to highlight here. We will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; to query &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s data over the network, even though it&#039;s on the same machine. Each UPS we monitor will have an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon running and listening on a dedicated [[TCP]] port. The first UPS, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, will listen on the default port. Which port we specify when using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; later will determine which UPS status information is returned.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ANNOY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will start &amp;quot;annoying&amp;quot; the users of the system to save their work and log out five minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt; seconds) before calling the shut down of the server. We&#039;re disabling automatic shut down, so this needs to be disabled.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is where events related to this UPS are recorded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this in mind, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the file. If you are more comfortable with a text editor, please use that instead. You can refer to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; at the end of this section to see exactly what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the name of the UPS and domain once.&lt;br /&gt;
ups=&amp;quot;an-u01&amp;quot;&lt;br /&gt;
domain=&amp;quot;alteeve.ca&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS name. Note the odd syntax; There are two &#039;UPSNAME&#039; entries&lt;br /&gt;
# in the config and we only want to change the first instance.&lt;br /&gt;
sed -i &amp;quot;0,/#UPSNAME/s/^#UPSNAME/UPSNAME/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS access&lt;br /&gt;
sed -i &amp;quot;s/^UPSTYPE.*/UPSTYPE snmp/&amp;quot;                                  /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the poll time.&lt;br /&gt;
sed -i &amp;quot;s/^#POLLTIME/POLLTIME/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^POLLTIME.*/POLLTIME 30/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Update the script directories&lt;br /&gt;
sed -i &amp;quot;s/^SCRIPTDIR.*/SCRIPTDIR \/etc\/apcupsd\/null/&amp;quot;   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^PWRFAILDIR.*/PWRFAILDIR \/etc\/apcupsd\/null/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the shut down thresholds and disable the shut down annoy message&lt;br /&gt;
sed -i &amp;quot;s/^BATTERYLEVEL .*/BATTERYLEVEL 0/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^MINUTES .*/MINUTES 0/&amp;quot;           /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^ANNOY .*/ANNOY 0/&amp;quot;               /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# The NIS port isn&#039;t changing, but this makes sure it really is what we want.&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3551/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Finally, update the event log file name.&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# End with a &#039;diff&#039; of the updated configuration against the backup we made.&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.conf.anvil /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.conf.anvil	2013-11-26 15:49:47.852153374 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 19:58:17.810278390 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-#UPSNAME&lt;br /&gt;
+UPSNAME an-u01&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -76,8 +76,8 @@&lt;br /&gt;
 #                            3052. If this parameter is empty or missing, the &lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
-UPSTYPE apcsmart&lt;br /&gt;
-DEVICE /dev/ttyS0&lt;br /&gt;
+UPSTYPE snmp&lt;br /&gt;
+DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -86,7 +86,7 @@&lt;br /&gt;
 #   will improve apcupsd&#039;s responsiveness to certain events at the cost of&lt;br /&gt;
 #   higher CPU utilization. The default of 60 is appropriate for most&lt;br /&gt;
 #   situations.&lt;br /&gt;
-#POLLTIME 60&lt;br /&gt;
+POLLTIME 30&lt;br /&gt;
 &lt;br /&gt;
 # LOCKFILE &amp;lt;path to lockfile&amp;gt;&lt;br /&gt;
 #   Path for device lock file. Not used on Win32.&lt;br /&gt;
@@ -94,14 +94,14 @@&lt;br /&gt;
 &lt;br /&gt;
 # SCRIPTDIR &amp;lt;path to script directory&amp;gt;&lt;br /&gt;
 #   Directory in which apccontrol and event scripts are located.&lt;br /&gt;
-SCRIPTDIR /etc/apcupsd&lt;br /&gt;
+SCRIPTDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # PWRFAILDIR &amp;lt;path to powerfail directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the powerfail flag file. This file&lt;br /&gt;
 #   is created when apcupsd initiates a system shutdown and is&lt;br /&gt;
 #   checked in the OS halt scripts to determine if a killpower&lt;br /&gt;
 #   (turning off UPS output power) is required.&lt;br /&gt;
-PWRFAILDIR /etc/apcupsd&lt;br /&gt;
+PWRFAILDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # NOLOGINDIR &amp;lt;path to nologin directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the nologin file. The existence&lt;br /&gt;
@@ -132,12 +132,12 @@&lt;br /&gt;
 # If during a power failure, the remaining battery percentage&lt;br /&gt;
 # (as reported by the UPS) is below or equal to BATTERYLEVEL, &lt;br /&gt;
 # apcupsd will initiate a system shutdown.&lt;br /&gt;
-BATTERYLEVEL 5&lt;br /&gt;
+BATTERYLEVEL 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the remaining runtime in minutes &lt;br /&gt;
 # (as calculated internally by the UPS) is below or equal to MINUTES,&lt;br /&gt;
 # apcupsd, will initiate a system shutdown.&lt;br /&gt;
-MINUTES 3&lt;br /&gt;
+MINUTES 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the UPS has run on batteries for TIMEOUT&lt;br /&gt;
 # many seconds or longer, apcupsd will initiate a system shutdown.&lt;br /&gt;
@@ -155,7 +155,7 @@&lt;br /&gt;
 &lt;br /&gt;
 #  Time in seconds between annoying users to signoff prior to&lt;br /&gt;
 #  system shutdown. 0 disables.&lt;br /&gt;
-ANNOY 300&lt;br /&gt;
+ANNOY 0&lt;br /&gt;
 &lt;br /&gt;
 # Initial delay after power failure before warning users to get&lt;br /&gt;
 # off the system.&lt;br /&gt;
@@ -203,7 +203,7 @@&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; config file over to the one we&#039;ll use for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to change the following variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Changed value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to copy the configuration file and then use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; again to make these changes. We&#039;ll finish with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; showing the differences between the two configuration files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make a copy of the configuration file.&lt;br /&gt;
cp /etc/apcupsd/apcupsd.an-u01.conf /etc/apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
&lt;br /&gt;
# Set the name of this UPS. The &#039;domain&#039; variable should still be set.&lt;br /&gt;
ups=&amp;quot;an-u02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change the variables &lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;                                   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot;    /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3552/&amp;quot;                                     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.an-u02.conf /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.an-u02.conf	2013-11-26 20:09:18.884783551 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 20:13:20.273346652 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-UPSNAME an-u01&lt;br /&gt;
+UPSNAME an-u02&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -77,7 +77,7 @@&lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
 UPSTYPE snmp&lt;br /&gt;
-DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
+DEVICE an-u02.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -199,11 +199,11 @@&lt;br /&gt;
 #  It is not used unless NETSERVER is on. If you change this port,&lt;br /&gt;
 #  you will need to change the corresponding value in the cgi directory&lt;br /&gt;
 #  and rebuild the cgi programs.&lt;br /&gt;
-NISPORT 3551&lt;br /&gt;
+NISPORT 3552&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u02.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last change that is needed is to update the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; initialization script. We&#039;re going to copy a pre-edited one from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; server and then look at the differences. We could edit the file, but it would be a little more complex. So instead, lets look at the differences and then talk about what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv /etc/init.d/apcupsd /root/apcupsd.init.d.anvil&lt;br /&gt;
wget https://alteeve.ca/files/apcupsd/apcupsd -O /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-26 20:59:42--  https://alteeve.ca/files/apcupsd/apcupsd&lt;br /&gt;
Resolving alteeve.ca... 65.39.153.64&lt;br /&gt;
Connecting to alteeve.ca|65.39.153.64|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 1759 (1.7K) [text/plain]&lt;br /&gt;
Saving to: `/etc/init.d/apcupsd&#039;&lt;br /&gt;
&lt;br /&gt;
100%[=========================================================================&amp;gt;] 1,759       --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-26 20:59:42 (5.10 MB/s) - `/etc/init.d/apcupsd&#039; saved [1759/1759]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 /etc/init.d/apcupsd &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 1.8K Aug 19  2012 /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -u /root/apcupsd.init.d.anvil /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/apcupsd.init.d.anvil	2013-03-04 23:32:43.000000000 -0500&lt;br /&gt;
+++ /etc/init.d/apcupsd	2012-08-19 18:36:33.000000000 -0400&lt;br /&gt;
@@ -1,7 +1,7 @@&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # apcupsd      This shell script takes care of starting and stopping&lt;br /&gt;
-#	       the apcupsd UPS monitoring daemon.&lt;br /&gt;
+#	       the apcupsd UPS monitoring daemon. Multi-UPS version.&lt;br /&gt;
 #&lt;br /&gt;
 # chkconfig: 2345 60 99&lt;br /&gt;
 # description: apcupsd monitors power and takes action if necessary&lt;br /&gt;
@@ -15,18 +15,24 @@&lt;br /&gt;
     start)&lt;br /&gt;
        rm -f /etc/apcupsd/powerfail&lt;br /&gt;
        rm -f /etc/nologin&lt;br /&gt;
-       echo -n &amp;quot;Starting UPS monitoring:&amp;quot; &lt;br /&gt;
-       daemon /sbin/apcupsd -f /etc/apcupsd/apcupsd.conf&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       echo&lt;br /&gt;
-       [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Starting UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          daemon /sbin/apcupsd -f $conf -P /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          echo&lt;br /&gt;
+          [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     stop)&lt;br /&gt;
-       echo -n &amp;quot;Shutting down UPS monitoring:&amp;quot;&lt;br /&gt;
-       killproc apcupsd&lt;br /&gt;
-       echo&lt;br /&gt;
-       rm -f $APCPID&lt;br /&gt;
-       rm -f /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Shutting down UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          killproc -p /var/run/apcupsd-$inst.pid apcupsd&lt;br /&gt;
+          echo&lt;br /&gt;
+          rm -f /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          rm -f /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     restart|force-reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
@@ -38,14 +44,16 @@&lt;br /&gt;
        exit 3&lt;br /&gt;
        ;;&lt;br /&gt;
     status)&lt;br /&gt;
-       status apcupsd&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       if [ $RETVAL -eq 0 ]&lt;br /&gt;
-       then&lt;br /&gt;
-          /sbin/apcaccess status&lt;br /&gt;
-       else&lt;br /&gt;
-          exit $RETVAL&lt;br /&gt;
-       fi&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          status -p /var/run/apcupsd-$inst.pid apcupsd-$inst&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          if [ $RETVAL -eq 0 ]&lt;br /&gt;
+          then&lt;br /&gt;
+             NISPORT=`grep ^NISPORT &amp;lt; $conf | sed -e &amp;quot;s/NISPORT *\([0-9]\)/\1/&amp;quot;`&lt;br /&gt;
+             /sbin/apcaccess status localhost:$NISPORT | egrep &amp;quot;(STATUS)|(UPSNAME)&amp;quot;&lt;br /&gt;
+          fi&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|status}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The main change here is that, for each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt; calls, we tell the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; script to loop one for each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.*.conf&amp;lt;/span&amp;gt; file it finds. The original script expected just one configuration file but was otherwise perfect for what we needed. So we shifted the existing calls into our loop. &lt;br /&gt;
&lt;br /&gt;
So all this new script does is repeat what the original did already, once for each configuration file.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s copy all of this over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; now!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/init.d/apcupsd root@an-c05n02:/etc/init.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd&lt;br /&gt;
&lt;br /&gt;
sent 1834 bytes  received 43 bytes  3754.00 bytes/sec&lt;br /&gt;
total size is 1759  speedup is 0.94&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/apcupsd root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd/&lt;br /&gt;
apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
apcupsd/apcupsd.conf.anvil&lt;br /&gt;
apcupsd/null/&lt;br /&gt;
apcupsd/null/apccontrol&lt;br /&gt;
apcupsd/null/changeme&lt;br /&gt;
apcupsd/null/commfailure&lt;br /&gt;
apcupsd/null/commok&lt;br /&gt;
apcupsd/null/doshutdown&lt;br /&gt;
apcupsd/null/offbattery&lt;br /&gt;
apcupsd/null/onbattery&lt;br /&gt;
&lt;br /&gt;
sent 44729 bytes  received 210 bytes  29959.33 bytes/sec&lt;br /&gt;
total size is 70943  speedup is 1.58&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /root/apcupsd.init.d.anvil root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd.init.d.anvil&lt;br /&gt;
&lt;br /&gt;
sent 1276 bytes  received 31 bytes  871.33 bytes/sec&lt;br /&gt;
total size is 1188  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SELinux and apcupsd ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section needs some clean-up.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got two [[SELinux]] issues to address:&lt;br /&gt;
&lt;br /&gt;
* Allow the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon to use [[TCP]] and [[UDP]] ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Allow both daemons to write to the non-standard log files.&lt;br /&gt;
&lt;br /&gt;
You can see what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;selinux&amp;lt;/span&amp;gt; allows various applications to use with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage port -l&amp;lt;/span&amp;gt;. This generates a lot of data, so we&#039;re interested just in seeing what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; is already allowed to use. So we&#039;ll pipe it through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;grep&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_port_t&amp;lt;/span&amp;gt; context is used for both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tcp&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;udp&amp;lt;/span&amp;gt;. With this, we can simply add port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=These commands can take a while to run. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, enabling the context for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt; log files.&lt;br /&gt;
&lt;br /&gt;
These files don&#039;t exist until the daemon starts for the first time. We&#039;ve not started it yet, so the first task is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt; to create these log files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have the default log file to check to see what context to use for our log files, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://mgrepl.fedorapeople.org/man_selinux/Fedora18/apcupsd.html apcupsd_selinux]&amp;lt;/span&amp;gt; manual tells us that we need to set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_log_t &amp;lt;/span&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, ready to test!&lt;br /&gt;
&lt;br /&gt;
=== Testing the Multi-UPS apcupds ===&lt;br /&gt;
&lt;br /&gt;
If our edits above worked properly, we should now be able to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon and query out UPSes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That looks good. Now the real test; Query the status of each UPS! &lt;br /&gt;
&lt;br /&gt;
This generates a fair bit of output, so lets just look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 21:21:20 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 121.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 21:21:29 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 21:21:48 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 31817744.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 31817744.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 31817744&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 21:21:57 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you notice the serial numbers, we see that they differ and match the ones we have on record. This confirms that we&#039;re talking to both UPSes!&lt;br /&gt;
&lt;br /&gt;
Before we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the keen observer will have noted that some of the sensor values are slightly unrealistic. Some UPSes optionally support environmental sensors and, without them, their values are not realistic at all. Those can be safely ignored and are not used by the monitoring and alert system.&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s confirm that the same calls from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; result in the same values!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 22:14:12 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 122.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 22:14:22 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 22:14:11 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 19898384.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 19898384.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 19898384&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 22:14:38 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Later, when we setup the monitoring and alert system, we&#039;ll take a closer look at some of the variables and their possible values.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Storage ==&lt;br /&gt;
&lt;br /&gt;
At this time, this section covers monitoring LSI-based [[RAID]] controllers. If you have a different RAID controller and wish to contribute, we&#039;d [[Contct us|love to hear from you]].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring LSI-Based RAID Controllers with MegaCli ===&lt;br /&gt;
&lt;br /&gt;
Many tier-1 hardware vendors as well as many mid-tier and in-house brand servers use controllers built by or based on [http://www.lsi.com LSI] [[RAID]] controller cards.&lt;br /&gt;
&lt;br /&gt;
==== Installing MegaCli ====&lt;br /&gt;
&lt;br /&gt;
In this section, we&#039;ll install LSI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; command-line tool for monitoring our storage. This is a commercial tool, so you must download it directly from LSI&#039;s website and agree to their license agreement.&lt;br /&gt;
&lt;br /&gt;
At the time of writing, you can download it [http://www.lsi.com/support/Pages/download-results.aspx?keyword=latest%20megacli%20for%20linux using this link]. Click on the orange &amp;quot;+&amp;quot; to the right of &amp;quot;&#039;&#039;Management Software and Tools&#039;&#039;&amp;quot; in the search results page.  Click on the &amp;quot;Download&amp;quot; icon and save the file to disk. Extract the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli_Linux.zip&amp;lt;/span&amp;gt; file and switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/MegaCli_Linux&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The version of the file name shown below may have changed.}}&lt;br /&gt;
&lt;br /&gt;
Copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli-8.07.08-1.noarch.rpm&amp;lt;/span&amp;gt; file to your nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n01:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can install the program on our nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By default, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; binary is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/opt/MegaRAID/MegaCli/MegaCli64&amp;lt;/span&amp;gt;. This isn&#039;t in [[RHEL]]&#039;s default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PATH&amp;lt;/span&amp;gt;, so we will want to make a symlink to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/sbin&amp;lt;/span&amp;gt;. This way, we can simply type &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;&#039; instead of the full path.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent.&lt;br /&gt;
&lt;br /&gt;
==== Checking Storage Health with MegaCli64 ====&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This tutorial was written using a development server and, as such, has only four drives in each array. All production servers should have a &#039;&#039;&#039;minimum&#039;&#039;&#039; of six drives to help ensure good storage response time under highly random reads and writes seen in virtualized environments.}}&lt;br /&gt;
&lt;br /&gt;
LSI RAID controllers are designed to work alone or in conjunction with other LSI controllers at the same time. For this reason, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; supports multiple controllers, virtual disks, physical disks and so on. We&#039;re going to be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;aAll&amp;lt;/span&amp;gt; a lot. This simply tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; to show whatever we&#039;re asking for from all found adapters.&lt;br /&gt;
&lt;br /&gt;
The program itself is extremely powerful. Trying to cover all the ways that it can be used would require a long tutorial in and of itself. So we&#039;re going to just look at some core tasks that we&#039;re interested in. If you want to experiment, there is a great [http://mycusthelp.info/LSI/_cs/AnswerDetail.aspx?sSessionID=1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB&amp;amp;inc=8040&amp;amp;caller=~%2fFindAnswers.aspx%3ftxtCriteria%3dmegacli%26sSessionid%3d1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB cheat-sheet here].&lt;br /&gt;
&lt;br /&gt;
Lets start by looking at the logical drive.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can see that the virtual disk has four real disks in RAID level 5, it is 836.625 [[GB]] in size and it&#039;s in [[WriteBack]] caching mode. This is pretty typical, save for the number of disks.&lt;br /&gt;
&lt;br /&gt;
Lets look now at the health of the RAID controller&#039;s battery.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4083 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 28 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 74 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Absolute State of charge: 74 %&lt;br /&gt;
  Remaining Capacity: 902 mAh&lt;br /&gt;
  Full Charge Capacity: 906 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 35&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/22, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 15686&lt;br /&gt;
  Pack Stat Configuration: 0x6490&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Wed Dec 18 16:47:41 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4048 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 27 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 68 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Absolute State of charge: 68 %&lt;br /&gt;
  Remaining Capacity: 821 mAh&lt;br /&gt;
  Full Charge Capacity: 841 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 31&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/23, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 18704&lt;br /&gt;
  Pack Stat Configuration: 0x64b0&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Mon Dec 23 05:29:33 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now this gives us quite a bit of data.&lt;br /&gt;
&lt;br /&gt;
The battery&#039;s principal job is to protect the data in the data stored in the [[RAM]] module used to buffer writes (and a certain amount of reads) that have not yet been flushed to the physical disks. This is critical because, if this data was lost, the contents of the disk could be corrupted. &lt;br /&gt;
&lt;br /&gt;
This battery is generally used when the node loses power. Depending on whether your node has battery-backed write-cache (BBU) or flash-backed write-cache (FBWC), the battery will be used to store the data in the RAM until power is restored (BBU) or just long enough to copy the data in the cache module to persistent solid-state storage build into the battery or RAID controller.&lt;br /&gt;
&lt;br /&gt;
If your server uses a BBU, then watching the &amp;quot;hold up time&amp;quot;. The controller above doesn&#039;t provide this because it is a flash-backed controller. If yours in a battery-backed controller, you will see a variable like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Battery backup charge time : 48 hours +&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells you that the node can protect the contents of the cache for greater than 48 hours. This means that, so long as power is restored to the server within two days, your data will be protected. Generally, if the hold up time falls below 24 hours, the BBU should be replaced. This happens because, as batteries age, they lose capacity. This is simple chemistry.&lt;br /&gt;
&lt;br /&gt;
Note that periodically, usually once per month, the controller intentionally drains and recharges the controller. This is called a &amp;quot;relearn cycle&amp;quot; (or simply a &amp;quot;learn cycle&amp;quot;). This is a way for the controller to verify the health of the battery. Should a battery fail to recharge, it will be declared dead and need to be replaced.&lt;br /&gt;
&lt;br /&gt;
Note that it is normal for the cache policy to switch from &amp;quot;write-back&amp;quot; to &amp;quot;write-through&amp;quot; once the battery is sufficiently drained. The controller should return to &amp;quot;write-back&amp;quot; mode once the learn cycle completes and the battery charges enough. During this time, the write speed will be reduced because all writes have to read the physical disks instead of just cache, which is slower.&lt;br /&gt;
&lt;br /&gt;
Lastly, lets look at the individual drives.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 7&lt;br /&gt;
WWN: 5000C50043EE29E0&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043ee29e1&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3T7X6    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 6&lt;br /&gt;
WWN: 5000C5004310F4B4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004310f4b5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CMMC    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :42C (107.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000C500430189E4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c500430189e5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CD2Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 11&lt;br /&gt;
WWN: 5000CCA00FAEC0BF&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00faec0bd&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVY33ARM            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 10&lt;br /&gt;
WWN: 5000C50043112280&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043112281&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DE9Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 9&lt;br /&gt;
WWN: 5000C5004312760C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004312760d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DNG7    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :40C (104.00 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 8&lt;br /&gt;
WWN: 5000C50043126B4C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043126b4d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3E01G    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000CCA00F5CA29F&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00f5ca29d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVWMYA6L            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows us two bits of information about each hard drive in the array. The main pieces to watch are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is normal for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Other Error Count&amp;lt;/span&amp;gt; to increment by 1 periodically. If it jumps by more than 1, or if it jumps multiple times within a few days, consult your system provider and inquire about replacing the drive.}}&lt;br /&gt;
&lt;br /&gt;
These values show us the overall health of the drive. For most hard drives, the temperature should stay below 55C at all times. Any temperature over 45C should be investigated. All other failure counts should stay at 0, save for the exception mentioned in the note above.&lt;br /&gt;
&lt;br /&gt;
As mentioned, there are many, many other ways to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;. If a drive ever fails, you can use it to prepare the drive for removal while the system is running. You can use it to adjust when the learn cycle runs, adjust cache policy and do many other things. It is well worth learning in more depth. However, that is outside the scope of this section.&lt;br /&gt;
&lt;br /&gt;
==== Managing MegaSAS.log ====&lt;br /&gt;
&lt;br /&gt;
Each time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; runs, it writes to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/MegaSAS.log&amp;lt;/span&amp;gt; file. Later, we&#039;re going to setup a monitoring and alert system that checks the health of each node every 30 seconds. This program calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; three times per pass, so the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file can grow to a decent size.&lt;br /&gt;
&lt;br /&gt;
To prevent this log file from getting too big, AN!CDB ships with a tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://github.com/digimer/an-cdb/blob/master/tools/archive_an-cm.log.sh archive_an-cm.log.sh]&amp;lt;/span&amp;gt;. This is a very simple bash script that is designed to run once per month to archive and compress the log file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:42:19--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:42:19 (7.86 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:42 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:47:53--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:47:54 (58.9 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:47 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll add it to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table. We&#039;ll set it to run at midnight on the first of each month.&lt;br /&gt;
&lt;br /&gt;
On both nodes;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirm the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
= Configuring The Cluster Foundation =&lt;br /&gt;
&lt;br /&gt;
We need to configure the cluster in two stages. This is because we have something of a chicken-and-egg problem:&lt;br /&gt;
&lt;br /&gt;
* We need clustered storage for our virtual machines.&lt;br /&gt;
* Our clustered storage needs the cluster for fencing.&lt;br /&gt;
&lt;br /&gt;
Conveniently, clustering has two logical parts:&lt;br /&gt;
&lt;br /&gt;
* Cluster communication and membership.&lt;br /&gt;
* Cluster resource management.&lt;br /&gt;
&lt;br /&gt;
The first, communication and membership, covers which nodes are part of the cluster and it is responsible for ejecting faulty nodes from the cluster, among other tasks. This is managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. The second part, resource management, is provided by a second tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It&#039;s this second part that we will set aside for later. In short though, it makes sure clustered services, storage and the virtual servers, are always running whenever possible.&lt;br /&gt;
&lt;br /&gt;
== Keeping Time in Sync ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is &#039;&#039;&#039;only relevant&#039;&#039;&#039; to networks that block access to external time sources, called &amp;quot;NTP servers&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
It is very important that time on both nodes be kept in sync. The way to do this is to setup [[[NTP]], the network time protocol. &lt;br /&gt;
&lt;br /&gt;
Earlier on, we setup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; to start on boot. For most people, that is enough and you can skip to the next section.&lt;br /&gt;
&lt;br /&gt;
However, some particularly restrictive networks will block access to external time servers. If you&#039;re on one of these networks, ask your admin (if you don&#039;t know already) what name or IP to use as a time source. Once you have this, you can enter the following command to add it to the name server configuration. We&#039;ll use the example time source &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntp.example.ca&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, add the time server to the NTP configuration file by appending the following lines to the end of it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon and your nodes should shortly update their times.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;date&amp;lt;/span&amp;gt; command on both nodes to ensure the times match. If they don&#039;t, give it a few minutes. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon sync every few minutes.&lt;br /&gt;
&lt;br /&gt;
== Alternate Configuration Methods ==&lt;br /&gt;
&lt;br /&gt;
In [[Red Hat]] Cluster Services, the heart of the cluster is found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|/etc/cluster/cluster.conf]]&amp;lt;/span&amp;gt; [[XML]] configuration file.&lt;br /&gt;
&lt;br /&gt;
There are three main ways of editing this file. Two are already well documented, so I won&#039;t bother discussing them, beyond introducing them. The third way is by directly hand-crafting the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. We&#039;ve found that directly editing configuration files is the best way to learn clustering at a deep level. For this reason, it is the method we&#039;ll use here.&lt;br /&gt;
&lt;br /&gt;
The two graphical tools are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-scc-CA.html system-config-cluster]&amp;lt;/span&amp;gt;, older GUI tool run directly from one of the cluster nodes.&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-conga-CA.html Conga], comprised of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; node-side client and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;luci&amp;lt;/span&amp;gt; web-based server (can be run on machines outside the cluster).&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve gotten comfortable with HA clustering, you may want to go back and play with these tools. They can certainly be time-savers.&lt;br /&gt;
&lt;br /&gt;
== The First cluster.conf Foundation Configuration ==&lt;br /&gt;
&lt;br /&gt;
The very first stage of building the cluster is to create a configuration file that is as minimal as possible. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and, when we&#039;re done, copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Name the Cluster and Set the Configuration Version ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cluster.3B_The_Parent_Tag|cluster]]&amp;lt;/span&amp;gt; tag is the parent tag for the entire cluster configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/cluster/cluster.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster&amp;lt;/span&amp;gt; element has two attributes that we need to set:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;config_version=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#name|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute defines the name of the cluster. It must be unique amongst the clusters on your network. It should be descriptive, but you will not want to make it too long, either. You will see this name in the various cluster tools and you will enter in, for example, when creating a [[GFS2]] partition later on. This tutorial uses the cluster name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#config_version|config_version]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute is an integer indicating the version of the configuration file. Whenever you make a change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, you will need to increment. If you don&#039;t increment this number, then the cluster tools will not know that the file needs to be reloaded. As this is the first version of this configuration file, it will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Note that this tutorial will increment the version after every change, regardless of whether it is explicitly pushed out to the other nodes and reloaded. The reason is to help get into the habit of always increasing this value.&lt;br /&gt;
&lt;br /&gt;
=== Configuring cman Options ===&lt;br /&gt;
&lt;br /&gt;
We are setting up a special kind of cluster, called a 2-Node cluster.&lt;br /&gt;
&lt;br /&gt;
This is a special case because traditional [[quorum]] will not be useful. With only two nodes, each having a vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the total votes is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. Quorum needs &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt;, which means that a single node failure would shut down the cluster, as the remaining node&#039;s vote is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; exactly. That kind of defeats the purpose to having a cluster at all.&lt;br /&gt;
&lt;br /&gt;
So to account for this special case, there is a special attribute called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt;. This tells the cluster manager to continue operating with only one vote. This option requires that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#expected_votes|expected_votes]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is set automatically to the total sum of the defined cluster nodes&#039; votes (which itself is a default of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;). This is the other half of the &amp;quot;trick&amp;quot;, as a single node&#039;s vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; now always provides quorum (that is, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; meets the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt; requirement).&lt;br /&gt;
&lt;br /&gt;
In short; this disables quorum.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the self-closing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;... /&amp;gt;&amp;lt;/span&amp;gt; tag. This is an [[XML]] syntax that tells the parser not to look for any child or a closing tags.&lt;br /&gt;
&lt;br /&gt;
=== Defining Cluster Nodes ===&lt;br /&gt;
&lt;br /&gt;
This example is a little artificial, please don&#039;t load it into your cluster as we will need to add a few child tags, but one thing at a time.&lt;br /&gt;
&lt;br /&gt;
This introduces two tags, the later a child tag of the former:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternodes&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first is the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternodes.3B_Defining_Cluster_Nodes|clusternodes]]&amp;lt;/span&amp;gt; tag, which takes no attributes of its own. Its sole purpose is to contain the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; child tags, of which there will be one per node. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; tag defines each cluster node. There are many attributes available, but we will look at just the two required ones. &lt;br /&gt;
&lt;br /&gt;
The first is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute. The value &#039;&#039;&#039;should&#039;&#039;&#039; match the fully qualified domain name, which you can check by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;uname -n&amp;lt;/span&amp;gt; on each node. This isn&#039;t strictly required, mind you, but for simplicity&#039;s sake, this is the name we will use.&lt;br /&gt;
&lt;br /&gt;
The cluster decides which network to use for cluster communication by resolving the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; value. It will take the returned [[IP]] address and try to match it to one of the IPs on the system. Once it finds a match, that becomes the network the cluster will use. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; resolves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt;, which is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syslinux&amp;lt;/span&amp;gt; with a little [[bash]] magic to verify which interface is going to be used for the cluster communication;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig |grep -B 1 $(gethostip -d $(uname -n)) | grep HWaddr | awk &#039;{ print $1 }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#name_3|name]]&amp;lt;/span&amp;gt; attribute document for details on how name to interface mapping is resolved.&lt;br /&gt;
&lt;br /&gt;
The second attribute is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_nodeid_attribute|nodeid]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;. This must be a unique integer amongst the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode ...&amp;gt;&amp;lt;/span&amp;gt; elements in the cluster. It is what the cluster itself uses to identify the node.&lt;br /&gt;
&lt;br /&gt;
=== Defining Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
[[2-Node_Red_Hat_KVM_Cluster_Tutorial#Concept.3B_Fencing|Fencing]] devices are used to forcible eject a node from a cluster if it stops responding. Said another way, fence devices put a node into a known state. &lt;br /&gt;
&lt;br /&gt;
There are many, many devices out there that can be used for fencing. We&#039;re going to be using two specific devices:&lt;br /&gt;
&lt;br /&gt;
* IPMI to press and hold the node&#039;s power button until the server powers down.&lt;br /&gt;
* Switched PDUs to cut the power feeding the node, if the IPMI device fails or can not be contacted.&lt;br /&gt;
&lt;br /&gt;
In the end, any device that can power off or isolate a lost node will do fine for fencing. The setup we will be using here uses very common components and it provides full redundancy, ensuring the ability to fence regardless of what might fail.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, our nodes support [[IPMI]], which we will use as the primary fence device. We also have an [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP7900 APC] brand switched PDU which will act as a backup fence device.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Not all brands of switched PDUs are supported as fence devices. Before you purchase a fence device, confirm that it is supported.}}&lt;br /&gt;
&lt;br /&gt;
All fence devices are contained within the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevices.3B_Defining_Fence_Devices|fencedevices]]&amp;lt;/span&amp;gt; tag, which has no attributes of its own. Within this parent tag are one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; child tags.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In our cluster, each fence device used will have its own &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; tag. If you are using [[IPMI]], this means you will have a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; entry for each node, as each physical IPMI [[BMC]] is a unique fence device. &lt;br /&gt;
&lt;br /&gt;
Our nodes have two power supplies each. Each power supply is plugged into a different switched PDU, which in turn in plugged into a dedicated UPS. So we have two physical PDUs, requiring two more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;fencedevice... /&amp;gt;&amp;lt;/span&amp;gt; entries.&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; tags share two basic attributes; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_agent_attribute|agent]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; attribute must be unique among all the fence devices in your cluster. As we will see in the next step, this name will be used within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode...&amp;gt;&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; tag tells the cluster which [[fence agent]] to use when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[fenced]]&amp;lt;/span&amp;gt; daemon needs to communicate with the physical fence device. A fence agent is simple a shell script that acts as a go-between layer between the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon and the fence hardware. This agent takes the arguments from the daemon, like what port to act on and what action to take, and performs the requested action against the target node. The agent is responsible for ensuring that the execution succeeded and returning an appropriate success or failure exit code. &lt;br /&gt;
&lt;br /&gt;
For those curious, the full details are described in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://fedorahosted.org/cluster/wiki/FenceAgentAPI FenceAgentAPI]&amp;lt;/span&amp;gt;. If you have two or more of the same fence device, like IPMI, then you will use the same fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; value a corresponding number of times.&lt;br /&gt;
&lt;br /&gt;
Beyond these two attributes, each fence agent will have its own subset of attributes. The scope of which is outside this tutorial, though we will see examples for IPMI and a switched PDU. All fence agents have a corresponding man page that will show you what attributes it accepts and how they are used. The two fence agents we will see here have their attributes defines in the following &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[man]]&amp;lt;/span&amp;gt; pages:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_ipmilan&amp;lt;/span&amp;gt; - IPMI fence agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_apc_snmp&amp;lt;/span&amp;gt; - APC-brand switched PDU using [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
The example above is what this tutorial will use.&lt;br /&gt;
&lt;br /&gt;
=== Using the Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
Now we have nodes and fence devices defined, we will go back and tie them together. This is done by:&lt;br /&gt;
&lt;br /&gt;
* Defining a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag containing all fence methods and devices.&lt;br /&gt;
** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; tag(s) containing the device call(s) needed for each fence attempt.&lt;br /&gt;
*** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tag(s) containing attributes describing how to call the fence device to kill this node.&lt;br /&gt;
&lt;br /&gt;
Here is how we implement [[IPMI]] as the primary fence device with the dual APC switched PDUs as the backup method.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First, notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag has no attributes. It&#039;s merely a parent for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]](s)&amp;lt;/span&amp;gt; child elements.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This next few paragraphs are very important! Please read it carefully!}}&lt;br /&gt;
&lt;br /&gt;
The second thing you will notice is that one method, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; method has a device with an extra argument. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; is needed because this is a 2-node cluster so quorum is not available. What this means is that, if the network breaks and both nodes are alive, both nodes will try to fence the other at nearly the same time. IPMI devices, being unique per node, can conceivable mean both nodes initiate a power down before either dies. This condition is called a &amp;quot;dual-fence&amp;quot; and leaves your cluster entirely powered down.&lt;br /&gt;
&lt;br /&gt;
There are two ways of dealing with this. The first is to make sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is turned off. When the power button is pressed when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is running, the system will begin a graceful shutdown. The IPMI BMC will continue to hold down the power button and after four seconds, the node should power off. However, this is four seconds where the fence daemon can initiate a fence against the peer. By disabling the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; daemon, the system will nearly instantly power off when the power button is pressed, drastically reducing the time between a node&#039;s power button being pressed and when the node actually shuts off.&lt;br /&gt;
&lt;br /&gt;
The second way to deal with this is to give one of the nodes a head start. That is what the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; does. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; goes to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05b02&amp;lt;/span&amp;gt;, it will not see a delay and it will initiate the fence action immediately. Meanwhile, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will gather up the information on fencing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, see the 15 second delay and wait. After 15 seconds, it will proceed with the fence action as it normally would.&lt;br /&gt;
&lt;br /&gt;
The idea here is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will have a 15 second head start in fencing its peer. These configuration changes should help ensure that one node always survives a fence call.&lt;br /&gt;
&lt;br /&gt;
Back to the main fence config!&lt;br /&gt;
&lt;br /&gt;
There are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; elements per node, one for each fence device, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. These names are merely descriptive and can be whatever you feel is most appropriate. &lt;br /&gt;
&lt;br /&gt;
Within each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; element is one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tags. For a given method to succeed, all defined &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; elements must themselves succeed. This is very useful for grouping calls to separate PDUs when dealing with nodes having redundant power supplies, as we have here.&lt;br /&gt;
&lt;br /&gt;
The actual fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; configuration is the final piece of the puzzle. It is here that you specify per-node configuration options and link these attributes to a given &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt;. Here, we see the link to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#device.27s_name_attribute|name]]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n01&amp;lt;/span&amp;gt; in this example.&lt;br /&gt;
&lt;br /&gt;
Note that the PDU definitions needs a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute where the IPMI fence devices do not. These are the sorts of differences you will find, varying depending on how the fence device agent works. IPMI devices only work on their host, so when you ask an IPMI device to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;&amp;quot;, it&#039;s obvious what the target is. With devices like PDUs, SAN switches and other multi-port devices, this is not the case. Our PDUs have eight ports each, so we need to tell the fence agent which ports we want acted on. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s power supplies are plugged into port #1 on both PDUs. For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, they&#039;re plugged into each PDU&#039;s port #2.&lt;br /&gt;
&lt;br /&gt;
When a fence call is needed, the fence devices will be called in the order they are found here. If both devices fail, the cluster will go back to the start and try again, looping indefinitely until one device succeeds.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s important to understand why we use IPMI as the primary fence device. The FenceAgentAPI specification suggests, but does not require, that a fence device confirm that the node is off. IPMI can do this, the switched PDU can not. Thus, IPMI won&#039;t return a success unless the node is truly off. The PDU, however, will return a success once the power is cut to the requested port. The risk is that a misconfigured node with redundant PSUs may in fact still be running if one of their cords was moved to a different port and the configuration wasn&#039;t updated, leading to disastrous consequences.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s step through an example fence call to help show how the per-cluster and fence device attributes are combined during a fence call:&lt;br /&gt;
&lt;br /&gt;
* The cluster manager decides that a node needs to be fenced. Let&#039;s say that the victim is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The first &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; section under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is consulted. Within it there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; entries, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. The IPMI method&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has one attribute while the PDU&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has two attributes;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;; only found in the PDU &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt;, this tells the cluster that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is connected to switched PDU&#039;s outlet number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;action&amp;lt;/span&amp;gt;; Found on both devices, this tells the cluster that the fence action to take is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;. How this action is actually interpreted depends on the fence device in use, though the name certainly implies that the node will be forced off and then restarted.&lt;br /&gt;
* The cluster searches in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevices&amp;lt;/span&amp;gt; for a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; matching the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n02&amp;lt;/span&amp;gt;. This fence device has four attributes; &lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt;; This tells the cluster to call the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent script, as we discussed earlier.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipaddr&amp;lt;/span&amp;gt;; This tells the fence agent where on the network to find this particular IPMI BMC. This is how multiple fence devices of the same type can be used in the cluster.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt;; This is the login user name to use when authenticating against the fence device.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passwd&amp;lt;/span&amp;gt;; This is the password to supply along with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt; name when authenticating against the fence device.&lt;br /&gt;
* Should the IPMI fence call fail for some reason, the cluster will move on to the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt; method, repeating the steps above but using the PDU values.&lt;br /&gt;
&lt;br /&gt;
When the cluster calls the fence agent, it does so by initially calling the fence agent script with no arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_ipmilan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-c05n02.ipmi&lt;br /&gt;
login=admin&lt;br /&gt;
passwd=secret&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see then, the first three arguments are from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; attributes and the last one is from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
If this method fails, then the PDU will be called in a very similar way, but with an extra argument from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_apc_snmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-p02.alteeve.ca&lt;br /&gt;
port=2&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should this fail, the cluster will go back and try the IPMI interface again. It will loop through the fence device methods forever until one of the methods succeeds.&lt;br /&gt;
Below are snippets from other clusters using different fence device configurations which might help you build your cluster.&lt;br /&gt;
&lt;br /&gt;
=== Giving Nodes More Time to Start and Avoiding &amp;quot;Fence Loops&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section also explains why we don&#039;t allow &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to start on boot. If we did, we&#039;d risk a &amp;quot;fence loop&amp;quot;, where a fenced node boots, tries to contact its peer, times out and fences it. The peer boot, starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, times out waiting and fenced the other peer. Not good.}}&lt;br /&gt;
&lt;br /&gt;
Clusters with more than three nodes will have to gain quorum before they can fence other nodes. As we discussed earlier though, this is not the case when using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cman.3B_The_Cluster_Manager|cman]]&amp;lt;/span&amp;gt; element. What this means in practice is that if you start the cluster on one node and then wait too long to start the cluster on the second node, the first will fence the second.&lt;br /&gt;
&lt;br /&gt;
The logic behind this is; When the cluster starts, it will try to talk to its fellow node and then fail. With the special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;two_node=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute set, the cluster knows that it is allowed to start clustered services, but it has no way to say for sure what state the other node is in. It could well be online and hosting services for all it knows. So it has to proceed on the assumption that the other node is alive and using shared resources. Given that, and given that it can not talk to the other node, its only safe option is to fence the other node. Only then can it be confident that it is safe to start providing clustered services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The new tag is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fence_daemon.3B_Fencing|fence_daemon]]&amp;lt;/span&amp;gt;, seen near the bottom if the file above. The change is made using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#post_join_delay|post_join_delay]]=&amp;quot;30&amp;quot;&amp;lt;/span&amp;gt; attribute. By default, the cluster will declare the other node dead after just &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; seconds. The reason is that the larger this value, the slower the start-up of the cluster services will be. During testing and development though, I find this value to be far too short and frequently led to unnecessary fencing. Once your cluster is setup and working, it&#039;s not a bad idea to reduce this value to the lowest value with which you are comfortable.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Totem ===&lt;br /&gt;
&lt;br /&gt;
There are many attributes for the [[totem]] element. For now though, we&#039;re only going to set two of them. We know that cluster communication will be travelling over our private, secured [[BCN]] network, so for the sake of simplicity, we&#039;re going to disable encryption. We are also offering network redundancy using the bonding drivers, so we&#039;re also going to disable totem&#039;s [[redundant ring protocol]].&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Corosync uses a concept called &amp;quot;token rings&amp;quot; for cluster communication. This is not to be confused with the old token ring network protocol, but the basic concept is the same. A token is passed from node to node, around and around the ring. A node can&#039;t send new messages or acknowledge old messages except when it has the token. By default, corosync uses a single &amp;quot;ring&amp;quot;. This means that, without network-level fault-tolerance, this ring becomes a single point of failure.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got bonded network connections backing our cluster communications, so we inherently have fault-tolerance built in to our network.&lt;br /&gt;
&lt;br /&gt;
For some though, bonded interfaces is not feasible, so starting in RHEL 6.3, &amp;quot;[[RRP|Redundant Ring Protocol]]&amp;quot; was made available as a supported option. This allows you to setup a second network to use as a backup in case the primary ring fails. We don&#039;t need this, so we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp_mode=&amp;quot;none&amp;quot;&amp;lt;/span&amp;gt;. If you want to use it, you can now though, but it&#039;s outside the scope of this tutorial. &lt;br /&gt;
&lt;br /&gt;
If you wish to explore it further, please take a look at the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt; element tag called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;[[RHCS_v3_cluster.conf#Tag.3B_altname|altname]]...&amp;gt;&amp;lt;/span&amp;gt;. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;altname&amp;lt;/span&amp;gt; is used though, then the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#rrp_mode|rrp_mode]]&amp;lt;/span&amp;gt; attribute will need to be changed to either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passive&amp;lt;/span&amp;gt; (the details of which are outside the scope of this tutorial).&lt;br /&gt;
&lt;br /&gt;
The second option we&#039;re looking at here is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#secauth|secauth]]=&amp;quot;off&amp;quot;&amp;lt;/span&amp;gt; attribute. This controls whether the cluster communications are encrypted or not. We can safely disable this because we&#039;re working on a known-private network, which yields two benefits; It&#039;s simpler to setup and it&#039;s a lot faster. If you must encrypt the cluster communications, then you can do so here. The details of which are also outside the scope of this tutorial though.&lt;br /&gt;
&lt;br /&gt;
=== Validating and Pushing the /etc/cluster/cluster.conf File ===&lt;br /&gt;
&lt;br /&gt;
One of the most noticeable changes in [[RHCS]] cluster stable 3 is that we no longer have to make a long, cryptic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xmllint&amp;lt;/span&amp;gt; call to validate our cluster configuration. Now we can simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ccs_config_validate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If there was a problem, you need to go back and fix it. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; proceed until your configuration validates. Once it does, we&#039;re ready to move on!&lt;br /&gt;
&lt;br /&gt;
With it validated, we need to push it to the other node. As the cluster is not running yet, we will push it out using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/cluster/cluster.conf root@an-c05n02:/etc/cluster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
cluster.conf&lt;br /&gt;
&lt;br /&gt;
sent 1393 bytes  received 43 bytes  2872.00 bytes/sec&lt;br /&gt;
total size is 1313  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the first and only time that we&#039;ll need to push the configuration file over manually.&lt;br /&gt;
&lt;br /&gt;
=== Setting up ricci ===&lt;br /&gt;
&lt;br /&gt;
Once the cluster is running, we can take advantage of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;modclusterd&amp;lt;/span&amp;gt; daemons to push all future updates out automatically. This is why we enabled these two daemons to start on boot earlier on.&lt;br /&gt;
&lt;br /&gt;
This requires setting a password for each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user first. Setting the password is exactly the same as setting the password on any other system user.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Later, when we make the next change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, we&#039;ll push the changes out using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; program. The first time this is used on each node, you will need to enter the local and the peer&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password. Once entered though, we&#039;ll not need to enter the password again.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The [[AN!CDB|dashboard]] we will install later expects the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password to be the same on both nodes. If you plan to use the dashboard, be sure to set the same password and then make note of it for later!}}&lt;br /&gt;
&lt;br /&gt;
=== Starting the Cluster for the First Time ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to open a second terminal on either node and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; [[syslog]] file. All cluster messages will be recorded here and it will help to debug problems if you can watch the logs. To do this, in the new terminal windows run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will clear the screen and start watching for new lines to be written to syslog. When you are done watching syslog, press the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; key combination.&lt;br /&gt;
&lt;br /&gt;
How you lay out your terminal windows is, obviously, up to your own preferences. Below is a configuration I have found very useful.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node-rhcs3_terminal-window-layout_01.png|thumb|center|700px|Terminal window layout for watching 2 nodes. Left windows are used for entering commands and the left windows are used for tailing syslog.]]&lt;br /&gt;
&lt;br /&gt;
With the terminals setup, lets start the cluster!&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you don&#039;t start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; on both nodes within 30 seconds, the slower node will be fenced.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is what you should see in syslog (this taken from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 kernel: DLM (built Sep 14 2013 05:33:35) installed&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync Cluster Engine (&#039;1.4.1&#039;): started and ready to provide service.&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync built-in features: nss dbus rdma snmp&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully read config from /etc/cluster/cluster.conf&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully parsed cman config&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transport (UDP/IP Multicast).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] The network interface [10.20.50.1] is now up.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] CMAN 3.0.12.1 (built Aug 29 2013 07:27:01) started&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync CMAN membership service 2.90&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: openais checkpoint service B.01.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync extended virtual synchrony service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync configuration service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster closed process group service v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster config database access v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync profile loading service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Compatibility mode set to whitetank.  Using V1 and V2 of the synchronization engine.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] quorum regained, resuming activity&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] This node is within the primary component and will provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:0 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:1 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 fenced[2902]: fenced 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 dlm_controld[2927]: dlm_controld 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:13 an-c05n01 gfs_controld[2977]: gfs_controld 3.0.12.1 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to confirm that the cluster is operating properly, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Version: 6.2.0&lt;br /&gt;
Config Version: 7&lt;br /&gt;
Cluster Name: an-cluster-05&lt;br /&gt;
Cluster Id: 42881&lt;br /&gt;
Cluster Member: Yes&lt;br /&gt;
Cluster Generation: 20&lt;br /&gt;
Membership state: Cluster-Member&lt;br /&gt;
Nodes: 2&lt;br /&gt;
Expected votes: 1&lt;br /&gt;
Total votes: 2&lt;br /&gt;
Node votes: 1&lt;br /&gt;
Quorum: 1  &lt;br /&gt;
Active subsystems: 7&lt;br /&gt;
Flags: 2node &lt;br /&gt;
Ports Bound: 0  &lt;br /&gt;
Node name: an-c05n01.alteeve.ca&lt;br /&gt;
Node ID: 1&lt;br /&gt;
Multicast addresses: 239.192.167.41 &lt;br /&gt;
Node addresses: 10.20.50.1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the both nodes are talking because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you have a managed switch that needs persistent multicast groups set, log into your switches now. We can see above that this cluster is using the multicast group &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;239.192.167.41&amp;lt;/span&amp;gt;, so find it in your switch config and ensure it&#039;s persistent.}}&lt;br /&gt;
&lt;br /&gt;
If you ever want to see the nitty-gritty configuration, you can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync-objctl&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
corosync-objctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cluster.name=an-cluster-05&lt;br /&gt;
cluster.config_version=7&lt;br /&gt;
cluster.cman.expected_votes=1&lt;br /&gt;
cluster.cman.two_node=1&lt;br /&gt;
cluster.cman.nodename=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.cman.cluster_id=42881&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n01&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.delay=15&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n02.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n02&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n01&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n01.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n02&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n02.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p01.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu1&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p02.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu2&lt;br /&gt;
cluster.fence_daemon.post_join_delay=30&lt;br /&gt;
cluster.totem.rrp_mode=none&lt;br /&gt;
cluster.totem.secauth=off&lt;br /&gt;
totem.rrp_mode=none&lt;br /&gt;
totem.secauth=off&lt;br /&gt;
totem.transport=udp&lt;br /&gt;
totem.version=2&lt;br /&gt;
totem.nodeid=1&lt;br /&gt;
totem.vsftype=none&lt;br /&gt;
totem.token=10000&lt;br /&gt;
totem.join=60&lt;br /&gt;
totem.fail_recv_const=2500&lt;br /&gt;
totem.consensus=2000&lt;br /&gt;
totem.key=an-cluster-05&lt;br /&gt;
totem.interface.ringnumber=0&lt;br /&gt;
totem.interface.bindnetaddr=10.20.50.1&lt;br /&gt;
totem.interface.mcastaddr=239.192.167.41&lt;br /&gt;
totem.interface.mcastport=5405&lt;br /&gt;
libccs.next_handle=7&lt;br /&gt;
libccs.connection.ccs_handle=3&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=4&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=5&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
logging.timestamp=on&lt;br /&gt;
logging.to_logfile=yes&lt;br /&gt;
logging.logfile=/var/log/cluster/corosync.log&lt;br /&gt;
logging.logfile_priority=info&lt;br /&gt;
logging.to_syslog=yes&lt;br /&gt;
logging.syslog_facility=local4&lt;br /&gt;
logging.syslog_priority=info&lt;br /&gt;
aisexec.user=ais&lt;br /&gt;
aisexec.group=ais&lt;br /&gt;
service.name=corosync_quorum&lt;br /&gt;
service.ver=0&lt;br /&gt;
service.name=corosync_cman&lt;br /&gt;
service.ver=0&lt;br /&gt;
quorum.provider=quorum_cman&lt;br /&gt;
service.name=openais_ckpt&lt;br /&gt;
service.ver=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.services.cman.service_id=9&lt;br /&gt;
runtime.services.ckpt.service_id=3&lt;br /&gt;
runtime.services.ckpt.0.tx=0&lt;br /&gt;
runtime.services.ckpt.0.rx=0&lt;br /&gt;
runtime.services.ckpt.1.tx=0&lt;br /&gt;
runtime.services.ckpt.1.rx=0&lt;br /&gt;
runtime.services.ckpt.2.tx=0&lt;br /&gt;
runtime.services.ckpt.2.rx=0&lt;br /&gt;
runtime.services.ckpt.3.tx=0&lt;br /&gt;
runtime.services.ckpt.3.rx=0&lt;br /&gt;
runtime.services.ckpt.4.tx=0&lt;br /&gt;
runtime.services.ckpt.4.rx=0&lt;br /&gt;
runtime.services.ckpt.5.tx=0&lt;br /&gt;
runtime.services.ckpt.5.rx=0&lt;br /&gt;
runtime.services.ckpt.6.tx=0&lt;br /&gt;
runtime.services.ckpt.6.rx=0&lt;br /&gt;
runtime.services.ckpt.7.tx=0&lt;br /&gt;
runtime.services.ckpt.7.rx=0&lt;br /&gt;
runtime.services.ckpt.8.tx=0&lt;br /&gt;
runtime.services.ckpt.8.rx=0&lt;br /&gt;
runtime.services.ckpt.9.tx=0&lt;br /&gt;
runtime.services.ckpt.9.rx=0&lt;br /&gt;
runtime.services.ckpt.10.tx=0&lt;br /&gt;
runtime.services.ckpt.10.rx=0&lt;br /&gt;
runtime.services.ckpt.11.tx=2&lt;br /&gt;
runtime.services.ckpt.11.rx=3&lt;br /&gt;
runtime.services.ckpt.12.tx=0&lt;br /&gt;
runtime.services.ckpt.12.rx=0&lt;br /&gt;
runtime.services.ckpt.13.tx=0&lt;br /&gt;
runtime.services.ckpt.13.rx=0&lt;br /&gt;
runtime.services.evs.service_id=0&lt;br /&gt;
runtime.services.evs.0.tx=0&lt;br /&gt;
runtime.services.evs.0.rx=0&lt;br /&gt;
runtime.services.cfg.service_id=7&lt;br /&gt;
runtime.services.cfg.0.tx=0&lt;br /&gt;
runtime.services.cfg.0.rx=0&lt;br /&gt;
runtime.services.cfg.1.tx=0&lt;br /&gt;
runtime.services.cfg.1.rx=0&lt;br /&gt;
runtime.services.cfg.2.tx=0&lt;br /&gt;
runtime.services.cfg.2.rx=0&lt;br /&gt;
runtime.services.cfg.3.tx=0&lt;br /&gt;
runtime.services.cfg.3.rx=0&lt;br /&gt;
runtime.services.cpg.service_id=8&lt;br /&gt;
runtime.services.cpg.0.tx=4&lt;br /&gt;
runtime.services.cpg.0.rx=8&lt;br /&gt;
runtime.services.cpg.1.tx=0&lt;br /&gt;
runtime.services.cpg.1.rx=0&lt;br /&gt;
runtime.services.cpg.2.tx=0&lt;br /&gt;
runtime.services.cpg.2.rx=0&lt;br /&gt;
runtime.services.cpg.3.tx=16&lt;br /&gt;
runtime.services.cpg.3.rx=23&lt;br /&gt;
runtime.services.cpg.4.tx=0&lt;br /&gt;
runtime.services.cpg.4.rx=0&lt;br /&gt;
runtime.services.cpg.5.tx=2&lt;br /&gt;
runtime.services.cpg.5.rx=3&lt;br /&gt;
runtime.services.confdb.service_id=11&lt;br /&gt;
runtime.services.pload.service_id=13&lt;br /&gt;
runtime.services.pload.0.tx=0&lt;br /&gt;
runtime.services.pload.0.rx=0&lt;br /&gt;
runtime.services.pload.1.tx=0&lt;br /&gt;
runtime.services.pload.1.rx=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.connections.active=6&lt;br /&gt;
runtime.connections.closed=111&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.dispatched=9&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.service_id=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.responses=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.dispatched=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.requests=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.service_id=3&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.responses=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.dispatched=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.requests=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.overload=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.service_id=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.client_pid=2977&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.responses=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.dispatched=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.requests=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.sem_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.send_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.recv_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.queue_size=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.invalid_request=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.overload=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.dispatched=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.overload=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.service_id=11&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.client_pid=3083&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.responses=463&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.dispatched=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.requests=466&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.sem_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.send_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.recv_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.queue_size=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.invalid_request=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.overload=0&lt;br /&gt;
runtime.totem.pg.msg_reserved=1&lt;br /&gt;
runtime.totem.pg.msg_queue_avail=761&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_tx=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_rx=437&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_tx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_rx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_tx=3&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_rx=5&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_tx=46&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_retx=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_rx=57&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_rx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_rx=8&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.consensus_timeouts=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mtt_rx_token=835&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_token_workload=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_backlog_calc=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.rx_msg_dropped=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_gather=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_sendmsg_failures=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.firewall_enabled_or_nic_failure=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.ip=r(0) ip(10.20.50.1) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.status=joined&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.ip=r(0) ip(10.20.50.2) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.status=joined&lt;br /&gt;
runtime.blackbox.dump_flight_data=no&lt;br /&gt;
runtime.blackbox.dump_state=no&lt;br /&gt;
cman_private.COROSYNC_DEFAULT_CONFIG_IFACE=xmlconfig:cmanpreconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want to check what [[DLM]] lockspaces, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; to list lock spaces. Given that we&#039;re not running and resources or clustered filesystems though, there won&#039;t be any at this time. We&#039;ll look at this again later.&lt;br /&gt;
&lt;br /&gt;
== Testing Fencing ==&lt;br /&gt;
&lt;br /&gt;
We need to thoroughly test our fence configuration and devices before we proceed. Should the cluster call a fence, and if the fence call fails, the cluster will hang until the fence finally succeeds. This effectively hangs the cluster, by design. The rationale is that, as bad as a hung cluster might be, it&#039;s better than risking data corruption. &lt;br /&gt;
&lt;br /&gt;
So if we have problems, we need to find them now.&lt;br /&gt;
&lt;br /&gt;
We need to run two tests from each node against the other node for a total of four tests.&lt;br /&gt;
&lt;br /&gt;
# The first test will verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; is working. To do this, we will hang the victim node by sending &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to the kernel&#039;s &amp;quot;[https://en.wikipedia.org/wiki/Magic_SysRq_key magic SysRq]&amp;quot; key. We do this by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt; which immediately and completely hangs the kernel. This does not effect the IPMI BMC, so if we&#039;ve configured everything properly, the surviving node should be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; to reboot the crashed node.&lt;br /&gt;
# Secondly, we will pull the power on the target node. This removes all power from the node, causing the IPMI BMC to also fail. You should see the other node try to fence the target using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;, see it fail and then try again using the second method, the switched PDUs via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt;. If you watch and listen to the PDUs, you should see the power indicator LED light up and hear the mechanical relays close the circuit when the fence completes.&lt;br /&gt;
&lt;br /&gt;
For the second test, you could just physically unplug the cables from the PDUs. We&#039;re going to cheat though and use the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence handler to manually turn off the target ports. This will help show that the fence agents are really just shell scripts. Used on their own, they do not talk to the cluster in any way. So despite using them to cut the power, the cluster will not know what state the lost node is in, requiring a fence call still.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Test&lt;br /&gt;
!Victim&lt;br /&gt;
!Pass?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=After the target node powers back up after each test, be sure to restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
=== Using Fence_check to Verify our Fencing Config ===&lt;br /&gt;
&lt;br /&gt;
In RHEL 6.4, a new tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; was added to the cluster toolbox. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, we can call it and it will gather up the data from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; and then call each defined fence device with the action &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;&amp;quot;. If everything is configured properly, all fence devices should exit with a return code of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt;) or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
If any fence device&#039;s agent exits with any other code, something has gone wrong and we need to fix it before proceeding.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to run this tool from both node. So let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:56:07 EDT 2013 pid: 3236&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is very promising! Now lets run it again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We want to do this because, for example, if the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file on the second node was bad, a fence may work on the first node but not this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:57:27 EDT 2013 pid: 28127&lt;br /&gt;
Unable to perform fence_check: node is not fence master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Well then, that&#039;s not what we expected.&lt;br /&gt;
&lt;br /&gt;
Actually, it is. When a cluster starts, one of the nodes in the cluster will be chosen to be the node which performs actual fence calls. This node (the one with the lowest node ID) is the only one that, by default, can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page, we see that we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-f&amp;lt;/span&amp;gt; switch to override this behaviour, but there is an important note:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man fence_check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       -f     Override checks and force execution. DO NOT USE ON PRODUCTION CLUSTERS!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason for this is that, while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; is running, should a node fail, it will not be able to fence until the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; finishes. In production, this can cause recovery post-failure to take a bit longer than it otherwise would.&lt;br /&gt;
&lt;br /&gt;
Good thing we&#039;re testing now, before the cluster is in production!&lt;br /&gt;
&lt;br /&gt;
So lets try again, this time forcing the issue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 11:02:35 EDT 2013 pid: 28222&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 for the First Time ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step will totally crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;! If fencing fails for some reason, you may need physical access to the node to recover it.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 11:05:46 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 11:06:21 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! The IPMI-based fencing worked! &lt;br /&gt;
&lt;br /&gt;
But why did it take 33 seconds?&lt;br /&gt;
&lt;br /&gt;
The current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; version works this way for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt; actions;&lt;br /&gt;
&lt;br /&gt;
# Check status&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks status again until the status shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power on&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks the status again&lt;br /&gt;
&lt;br /&gt;
If you tried doing these steps directly, you would find that it takes roughly 18 seconds to run. Add this to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; we set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; when using the IPMI fence device and you have the 33 seconds we see here.&lt;br /&gt;
&lt;br /&gt;
If you are watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s display, you should now see it starting to boot back up.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
As was discussed earlier, IPMI and other out-of-band management interfaces have a fatal flaw as a fence device. Their [[BMC]] draws its power from the same power supply as the node itself. Thus, when the power supply itself fails (for example, if an internal wire shorted against the chassis), fencing via IPMI will fail as well. This makes the power supply a single point of failure, which is what the PDU protects us against.&lt;br /&gt;
&lt;br /&gt;
In case you&#039;re wondering how likely failing a redundant PSU is...&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[image:lisa_seely-cable_fail-2.jpeg|thumb|300px|Cable short 1]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-3.jpeg|thumb|300px|Cable short 2]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-4.jpeg|thumb|300px|Cable short 3]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|Thanks to my very talented fellow admin, [https://twitter.com/thedoh Lisa Seelye], for this object lesson.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So to simulate a failed power supply, we&#039;re going to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to turn off the power to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Given that the node has two power supplies, one plugged in to each PDU, we&#039;ll need to make two calls to cut the power. &lt;br /&gt;
&lt;br /&gt;
Alternatively, you could also just unplug the power cables from the PDUs and the fence would still succeed. Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; confirms that the requested ports have no power, the fence action succeeds. Whether the nodes restart after the fence is not at all a factor.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the following two chained calls;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
Back on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:31:49 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoozah!&lt;br /&gt;
&lt;br /&gt;
Notice that there is an error from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;? This is exactly what we expected because of the IPMI&#039;s BMC lost power and couldn&#039;t respond. You will also notice the large delay, despite there not being a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; set for the PDU fence devices for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This was from the initial delay when trying to fence using IPMI. This is why we don&#039;t need to specify &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; on the PDUs as well. &lt;br /&gt;
&lt;br /&gt;
So now we know that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; can be fenced successfully from both fence devices. Now we need to run the same tests against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
=== Hanging an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=&#039;&#039;&#039;DO NOT ASSUME THAT &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; WILL FENCE PROPERLY JUST BECAUSE &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; PASSED!&#039;&#039;&#039;. There are many ways that a fence could fail; Bad password, misconfigured device, plugged into the wrong port on the PDU and so on. Always test all nodes using all methods!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;ing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
{{note|1=This command will not return and you will lose all ability to talk to this node until it is rebooted.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:40:29 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:40:48 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect!&lt;br /&gt;
&lt;br /&gt;
Notice this time that the fence action took 17 seconds, much less that it took to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c01n01&amp;lt;/span&amp;gt;. This is because, as you probably guessed, there is no &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; went to fence it, it proceeded immediately. This tells us that if both nodes try to fence each other at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should be left the winner.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Last fence test! Time to yank the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and make sure its power fencing works.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; with the following call;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:44:41 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:44:47 an-c05n01 ntpd[2298]: synchronized to 66.96.30.35, stratum 2&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woot!&lt;br /&gt;
&lt;br /&gt;
Only now can we safely say that our fencing is setup and working properly.&lt;br /&gt;
&lt;br /&gt;
= Installing DRBD =&lt;br /&gt;
&lt;br /&gt;
DRBD is an open-source application for real-time, block-level disk replication created and maintained by [http://linbit.com Linbit]. We will use this to keep the data on our cluster consistent between the two nodes.&lt;br /&gt;
&lt;br /&gt;
To install it, we have three choices;&lt;br /&gt;
# Purchase a Red Hat blessed, fully supported copy from [http://linbit.com Linbit].&lt;br /&gt;
# Install from the freely available, community maintained [http://elrepo.org/tiki/tiki-index.php ELRepo] repository.&lt;br /&gt;
# Install from source files.&lt;br /&gt;
&lt;br /&gt;
We will be using the 8.3.x version of DRBD. This tracts the Red Hat and Linbit supported versions, providing the most tested combination and providing a painless path to move to a fully supported version, should you decide to do so down the road.&lt;br /&gt;
&lt;br /&gt;
== Option 1 - Fully Supported by Red Hat and Linbit ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This shows how to install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please do this again for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat decided to no longer directly support [[DRBD]] in [[EL6]] to narrow down what applications they shipped and focus on improving those components. Given the popularity of DRBD, however, Red Hat struck a deal with [[Linbit]], the authors and maintainers of DRBD. You have the option of purchasing a fully supported version of DRBD that is blessed by Red Hat for use under Red Hat Enterprise Linux 6.&lt;br /&gt;
&lt;br /&gt;
If you are building a fully supported cluster, please [http://www.linbit.com/en/products-services/drbd/drbd-for-high-availability/ contact Linbit] to purchase DRBD. Once done, you will get an email with you login information and, most importantly here, the [[URL]] hash needed to access the official repositories.&lt;br /&gt;
&lt;br /&gt;
First you will need to add an entry in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/yum.repo.d/&amp;lt;/span&amp;gt; for DRBD, but this needs to be hand-crafted as you must specify the URL hash given to you in the email as part of the repo configuration.&lt;br /&gt;
&lt;br /&gt;
* Log into the [https://my.linbit.com Linbit portal].&lt;br /&gt;
* Click on &#039;&#039;Account&#039;&#039;.&lt;br /&gt;
* Under &#039;&#039;Your account details&#039;&#039;, click on the hash string to the right of &#039;&#039;URL hash:&#039;&#039;.&lt;br /&gt;
* Click on &#039;&#039;RHEL 6&#039;&#039; (even if you are using CentOS or another [[EL6]] distro.&lt;br /&gt;
&lt;br /&gt;
This will take you to a new page called &#039;&#039;Instructions for using the DRBD package repository&#039;&#039;. The details installation instruction are found here.&lt;br /&gt;
&lt;br /&gt;
Lets use the imaginative URL hash of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;abcdefghijklmnopqrstuvwxyz0123456789ABCD&amp;lt;/span&amp;gt; and we&#039;re are in fact using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x86_64&amp;lt;/span&amp;gt; architecture. Given this, we would create the following repository configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/yum.repos.d/linbit.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[drbd-8]&lt;br /&gt;
name=DRBD 8&lt;br /&gt;
baseurl=http://packages.linbit.com/abcdefghijklmnopqrstuvwxyz0123456789ABCD/rhel6/x86_64&lt;br /&gt;
gpgcheck=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once this is saved, you can install DRBD using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yum&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd kmod-drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 2 - Install From ELRepo ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is the method used for this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
[http://elrepo.org ELRepo] is a community-maintained repository of packages for &#039;&#039;&#039;E&#039;&#039;&#039;nterprise &#039;&#039;&#039;L&#039;&#039;&#039;inux; Red Hat Enterprise Linux and its derivatives like CentOS. This is the easiest option for a freely available DRBD package.&lt;br /&gt;
&lt;br /&gt;
The main concern with this option is that you are seceding control of DRBD to a community-controlled project. This is a trusted repo, but there are still undeniable security concerns. &lt;br /&gt;
&lt;br /&gt;
Check for the latest installation RPM and information:&lt;br /&gt;
&lt;br /&gt;
* [http://elrepo.org ELRepo Installation Page]&lt;br /&gt;
&lt;br /&gt;
Install the ELRepo GPG key, add the repo and install DRBD.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can install the DRBD 8.3 RPMs. &lt;br /&gt;
&lt;br /&gt;
Be warned; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kmod-drbd83&amp;lt;/span&amp;gt; can take some time to install. Please be patient!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 3 - Install From Source ==&lt;br /&gt;
&lt;br /&gt;
If you do not wish to pay for access to the official DRBD repository and do not feel comfortable adding a public repository, your last option is to install from Linbit&#039;s source code. The benefit of this is that you can vet the source before installing it, making it a more secure option. The downside is that you will need to manually install updates and security fixes as they are made available.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Both&#039;&#039;&#039; nodes run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output, it&#039;s really quite impressive&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hooking DRBD into the Cluster&#039;s Fencing ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=In older DRBD 8.3 releases, prior to 8.3.16, we needed to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt; from [https://raw.github.com/digimer/rhcs_fence/master/rhcs_fence github] as the shipped version had a bug. With the release of 8.3.16, this is no longer the case.}}&lt;br /&gt;
&lt;br /&gt;
DRBD is, effectively, a stand-alone application. You can use it on its own without any other software. For this reason, DRBD has its own fencing mechanism to avoid split-brains if the DRBD nodes lose contact with each other. &lt;br /&gt;
&lt;br /&gt;
It would be a replication of effort to setup actual fencing devices in DRBD, so instead we will use a &amp;quot;hook&amp;quot; script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. When DRBD loses contact with its peer, it will block and then call this script. In turn, this script calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and asks it to fence the peer. It then waits for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to respond with a success or failure.&lt;br /&gt;
&lt;br /&gt;
If the fence succeed, DRBD will resume normal operation, confident that the peer is not doing the same.&lt;br /&gt;
&lt;br /&gt;
If the fence fails, DRBD will continue to block and continue to try and fence the peer indefinitely. Thus, if a fence call fails, DRBD will remain blocked and all disk reads and writes will hang. This is by design as it is better to hang than to risk a split-brain, which can lead to data loss and corruption.&lt;br /&gt;
&lt;br /&gt;
By using this script, if the fence configuration ever changes, you only need to update the configuration in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, not also in DRBD as well.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;quot;Why&amp;quot; of our Layout - More Safety! ===&lt;br /&gt;
&lt;br /&gt;
We will be creating two separate DRBD resources. The reason for this is to minimize the chance of data loss in a [[split-brain]] event. We&#039;ve got to fairly great lengths to insure that a split-brain never occurs, but it is still possible. So we want a &amp;quot;last line of defence&amp;quot;, just in case.&lt;br /&gt;
&lt;br /&gt;
Consider this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a two-node cluster running two VMs. One is a mirror for a project and the other is an accounting application. Node 1 hosts the mirror, Node 2 hosts the accounting application.&lt;br /&gt;
* A partition occurs and both nodes try to fence the other.&lt;br /&gt;
* Network access is lost, so both nodes fall back to fencing using PDUs.&lt;br /&gt;
* Both nodes have redundant power supplies, and at some point in time, the power cables on the second PDU got reversed.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; agent succeeds, because the requested outlets were shut off. However, do to the cabling mistake, neither node actually shut down.&lt;br /&gt;
* Both nodes proceed to run independently, thinking they are the only node left.&lt;br /&gt;
* During this split-brain, the mirror VM downloads over a [[gigabyte]] of updates. Meanwhile, an hour earlier, the accountant updates the books, totalling less than one [[megabyte]] of changes.&lt;br /&gt;
&lt;br /&gt;
At this point, you will need to discard the changed on one of the nodes. So now you have to choose:&lt;br /&gt;
&lt;br /&gt;
* Is the node with the most changes more valid?&lt;br /&gt;
* Is the node with the most recent changes more valid?&lt;br /&gt;
&lt;br /&gt;
Neither of these are true, as the node with the older data and smallest amount of changed data is the accounting data which is significantly more valuable.&lt;br /&gt;
&lt;br /&gt;
Now imagine that both VMs have equally valuable data. What then? Which side do you discard?&lt;br /&gt;
&lt;br /&gt;
The approach we will use is to create two separate DRBD resources. Then we will assign our servers into two groups;&lt;br /&gt;
&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;quot;pools&amp;quot; of servers will have a dedicate DRBD resource behind it. These pools will be managed by clustered LVM, as that provides a very powerful ability to manage DRBD&#039;s raw space.&lt;br /&gt;
&lt;br /&gt;
Now imagine the above scenario, except this time imagine that the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; are on one DRBD resource and the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; are on a different resource. Now we can recover from the split brain safely! &lt;br /&gt;
&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This ability to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;invalidate&amp;lt;/span&amp;gt; on both direction allows us to recover without risking data loss, &#039;&#039;provided&#039;&#039; all the servers were actually running on the same node at the time of the split-brain event.&lt;br /&gt;
&lt;br /&gt;
To summarize, we&#039;re going to create the following three resources:&lt;br /&gt;
&lt;br /&gt;
* We&#039;ll create a resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* We&#039;ll create a second resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating The Partitions For DRBD ==&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[LVM]] on the hosts, and simply create [[LV]]s to back our DRBD resources. However, this causes confusion as LVM will see the [[PV]] signatures on both the DRBD backing devices and the DRBD device itself. Getting around this requires editing LVM&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter&amp;lt;/span&amp;gt; option, which is somewhat complicated and is outside the scope of this tutorial. We&#039;re going to use raw partitions and we recommend you do the same.&lt;br /&gt;
&lt;br /&gt;
On our nodes, we created three primary disk partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda1&amp;lt;/span&amp;gt;; The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/boot&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda2&amp;lt;/span&amp;gt;; The swap partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda3&amp;lt;/span&amp;gt;; The root &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
&lt;br /&gt;
We will create a new extended partition. Then within it we will create two new partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; clustered file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Block Alignment ===&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; instead of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;, we would have to manually ensure that our partitions fell on 64 [[KiB]] boundaries. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt;, we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-a opt&amp;lt;/span&amp;gt; to tell it to use optimal alignment, saving us a lot of work. This is important for decent performance performance in our servers. This is true for both traditional platter and modern solid-state drives.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, we want to ensure that the file systems created within a VM matches the block alignment of the underlying storage stack, clear down to the base partitions on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda&amp;lt;/span&amp;gt; (or what ever your lowest-level block device is).&lt;br /&gt;
&lt;br /&gt;
For those who are curious though, this is why falling on 64 KiB boundaries are important.&lt;br /&gt;
&lt;br /&gt;
Imagine this misaligned scenario;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
                |~~~~~|==========================================================&lt;br /&gt;
DRBD Partition  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, when the guest wants to write one block worth of data, it actually causes two blocks to be written, causing avoidable disk I/O. That effectively doubles the number of [[IOPS]] needed, a huge waste of disk resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
                |~~~~~~~|========================================================&lt;br /&gt;
DRBD Partition  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By changing the start cylinder of our partitions to always start on 64 [[KiB]] boundaries, we&#039;re sure to keep the guest OS&#039;s file system in-line with the DRBD backing device&#039;s blocks. Thus, all reads and writes in the guest OS effect a matching number of real blocks, maximizing disk I/O efficiency.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You will want to do this with [[SSD]] drives, too. It&#039;s true that the performance will remain about the same, but SSD drives have a limited number of write cycles, and aligning the blocks will minimize block writes.}}&lt;br /&gt;
&lt;br /&gt;
Special thanks to [http://xen.org/community/spotlight/pasi.html Pasi Kärkkäinen] for his patience in explaining to me the importance of disk alignment. He created two images which I used as templates for the [[ASCII]] art images above:&lt;br /&gt;
&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-not-aligned.jpg Virtual Disk Partitions, Not aligned.]&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-aligned.jpg Virtual Disk Partitions, aligned.]&lt;br /&gt;
&lt;br /&gt;
=== Determining Storage Pool Sizes ===&lt;br /&gt;
&lt;br /&gt;
Before we can create the DRBD partitions, we first need to know how much space we want to allocate to each node&#039;s storage pool.&lt;br /&gt;
&lt;br /&gt;
Before we start though, we need to know how much available storage space we have to play with. Both nodes should have identical storage, but we&#039;ll double check now. If they differ, we&#039;ll be limited to the size of the smaller one.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Both nodes show the same amount of free space, 851 [[GB]] (note, not [[GiB]]). &lt;br /&gt;
&lt;br /&gt;
We need to carve this up into three chunks of space:&lt;br /&gt;
&lt;br /&gt;
# Space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. Install ISOs, server definition files and the like will be kept here.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to install 8 different operating systems. That means we&#039;ll need enough space for at least eight different install [[ISO]] images. We&#039;ll allocate 40 [[GB]] for this. That leaves 811 GB left for servers.&lt;br /&gt;
&lt;br /&gt;
Choose which node will host what servers is largely a question of distributing CPU load. Of course, each node has to be capable of running all of our servers at the same time. With a little planning though, we can split up servers with expected high CPU load and, when both nodes are up, gain a little performance.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s create a table showing the servers we plan to build. We&#039;ll put them into two columns, one for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the others designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We&#039;ll note how much disk space each server will need. Remember, we&#039;re trying to split up our servers with the highest expected CPU loads. This, being a tutorial, is going to be a fairly artificial division. You will need to decide for yourself how you want to split up your servers and how much space each needs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|Total: 500 GB&lt;br /&gt;
|Total: 300 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason we put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on the same DRBD resource (and thus, the same storage pool) as the one that will host &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers is that it changes relatively rarely. So in the already unlikely event that there is a split-brain event, the chances of something important changing in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; before the split-brain is resolved is extremely low. So low that the overhead of a third resource is not justified.&lt;br /&gt;
&lt;br /&gt;
So then:&lt;br /&gt;
&lt;br /&gt;
* The first DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, will need to have 540 GB of space.&lt;br /&gt;
* The second DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, will need to have 300 GB of space.&lt;br /&gt;
&lt;br /&gt;
This is a total of 840 GB, leaving about 11 GB unused. What you do with the remaining free space is entirely up to you. You can assign it to one of the servers, leave it as free space in one (or partially on both) storage pools, etc.&lt;br /&gt;
&lt;br /&gt;
It&#039;s actually a very common setup to build &#039;&#039;Anvil!&#039;&#039; systems with more storage than is needed. This free space can then be used later for new servers, growing or adding space to existing servers and so on. In our case, we&#039;ll give the left over space to the second storage pool and leave it there unassigned.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to create the partitions on each node that will back our DRBD resources!&lt;br /&gt;
&lt;br /&gt;
=== Creating the DRBD Partitions ===&lt;br /&gt;
&lt;br /&gt;
Here I will show you the values I entered to create the three partitions I needed on my nodes. &lt;br /&gt;
&lt;br /&gt;
{{note|1=All of the following commands need to be run on both nodes. It&#039;s very important that both nodes have identical partitions when you finish!}}&lt;br /&gt;
&lt;br /&gt;
On both nodes, start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shell.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; console. Before we start, let&#039;s take another look at the current disk configuration along with the amount of free space available.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we can create the three DRBD partition, we first need to create an [[extended partition|extended]] partition wherein which we will create the two [[logical partition|logical]] partitions. From the output above, we can see that the free space starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8GB&amp;lt;/span&amp;gt;, and that the drive ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;898GB&amp;lt;/span&amp;gt;. Knowing this, we can now create the extended partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that message, we will reboot when we finish.&lt;br /&gt;
&lt;br /&gt;
So now we can confirm that the new extended partition was create by again printing the partition table and the free space.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. So now we&#039;re going to create our two logical partitions. We&#039;re going to use the same start position as last time, but the end position will be 540 [[GB]] further in, rounded up to an even ten gigabytes. You can be more precise, if you wish, but we&#039;ve got a little wiggle room.&lt;br /&gt;
&lt;br /&gt;
If you recall from the section above, this is how much space we determined we would need for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition and the five servers that will live on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This means that we&#039;re going to create a new logical partition that starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8G&amp;lt;/span&amp;gt; and ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;590G&amp;lt;/span&amp;gt;, for a partition that is roughly 540 GB in size.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda&lt;br /&gt;
(Device or resource busy).  As a result, it may not reflect all of your changes&lt;br /&gt;
until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll check again to see the new partition layout.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect. Now we have a total of 308 [[GB]] left free. We need 300 GB, so this is enough, as expected. Lets allocate it all to our final partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, lets look at the new partition table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Just as we asked for!&lt;br /&gt;
&lt;br /&gt;
Before we finish though, let&#039;s be extra careful and do a manual check of our new partitions to ensure that they are, in fact, aligned optimally. There will be no output from the following commands if the partitions are aligned.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, we&#039;re done!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to reboot to make the kernel see the new partition table. If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, stop it &#039;&#039;&#039;before&#039;&#039;&#039; rebooting.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once the nodes are back online, remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
== Configuring DRBD ==&lt;br /&gt;
&lt;br /&gt;
DRBD is configured in two parts:&lt;br /&gt;
&lt;br /&gt;
* Global and common configuration options&lt;br /&gt;
* Resource configurations&lt;br /&gt;
&lt;br /&gt;
We will be creating three separate DRBD resources, so we will create three separate resource configuration files. More on that in a moment.&lt;br /&gt;
&lt;br /&gt;
=== Configuring DRBD Global and Common Options ===&lt;br /&gt;
&lt;br /&gt;
As always, we&#039;re going to start by making backups. Then we&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. After we finish, we&#039;ll copy everything over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can begin.&lt;br /&gt;
&lt;br /&gt;
The first file to edit is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/global_common.conf&amp;lt;/span&amp;gt;. In this file, we will set global configuration options and set default resource configuration options.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll talk about the values we&#039;re setting here as well as put the explanation of each option in the configuration file itself, as it will be useful to have them should you need to alter the files sometime in the future.&lt;br /&gt;
&lt;br /&gt;
The first addition is in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;handlers { }&amp;lt;/span&amp;gt; directive. We&#039;re going to add the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence-peer&amp;lt;/span&amp;gt; option and configure it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;obliterate-peer.sh&amp;lt;/span&amp;gt; script we spoke about earlier in the DRBD section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	handlers {&lt;br /&gt;
		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
		# tool. It will call a fence against the other node and return&lt;br /&gt;
		# the appropriate exit code to DRBD.&lt;br /&gt;
		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to add three options to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;startup { }&amp;lt;/span&amp;gt; directive; We&#039;re going to tell DRBD to make both nodes &amp;quot;primary&amp;quot; on start, to wait five minutes on start for its peer to connect and, if the peer never connected last time, to wait onto two minutes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	startup {&lt;br /&gt;
		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
		become-primary-on	both;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
		# connect. This should be longer than it takes for cman to&lt;br /&gt;
		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
		# forever.&lt;br /&gt;
		wfc-timeout		300;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
		# if the other node was degraded the last time it was seen by&lt;br /&gt;
		# this node. This is a way to speed up the boot process when&lt;br /&gt;
		# the other node is out of commission for an extended duration.&lt;br /&gt;
		degr-wfc-timeout	120;&lt;br /&gt;
		&lt;br /&gt;
		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
		# &#039;Outdated&#039;.&lt;br /&gt;
		outdated-wfc-timeout    120;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disk { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure DRBD&#039;s behaviour when a [[split-brain]] is detected. By setting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencing&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;resource-and-stonith&amp;lt;/span&amp;gt;, we&#039;re telling DRBD to stop all disk access and call a fence against its peer node rather than proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	disk {&lt;br /&gt;
		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
		# condition and it is incredible important in dual-primary&lt;br /&gt;
		# setups!&lt;br /&gt;
		fencing			resource-and-stonith;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;net { }&amp;lt;/span&amp;gt; directive, we&#039;re going to tell DRBD that it is allowed to run in dual-primary mode and we&#039;re going to configure how it behaves if a split-brain has occurred, despite our best efforts. The recovery (or lack there of) requires three options; What to do when neither node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-0pri&amp;lt;/span&amp;gt;), what to do if only one node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-1pri&amp;lt;/span&amp;gt;) and finally, what to do if both nodes had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-2pri&amp;lt;/span&amp;gt;), as will most likely be the case for us. This last instance will be configured to tell DRBD just to drop the connection, which will require human intervention to correct.&lt;br /&gt;
&lt;br /&gt;
At this point, you might be wondering why we won&#039;t simply run Primary/Secondary. The reason is because of live-migration. When we push a VM across to the backup node, there is a short period of time where both nodes need to be writeable. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	net {&lt;br /&gt;
		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
		allow-two-primaries;&lt;br /&gt;
&lt;br /&gt;
		# The following three commands tell DRBD how to react should&lt;br /&gt;
		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
		# where both nodes were primary. This care requires human&lt;br /&gt;
		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
		after-sb-1pri		discard-secondary;&lt;br /&gt;
		after-sb-2pri		disconnect;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure how much bandwidth DRBD is allowed to take away from normal replication for use with background synchronization of out-of-sync blocks. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	syncer {&lt;br /&gt;
		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
		# the more of an impact normal application use of the DRBD&lt;br /&gt;
		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
		rate			30M;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes and exit the text editor. Now let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to see the changes we made.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/drbd.d/global_common.conf /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/drbd.d/global_common.conf	2013-09-27 16:38:33.000000000 -0400&lt;br /&gt;
+++ /etc/drbd.d/global_common.conf	2013-10-31 01:08:13.733823523 -0400&lt;br /&gt;
@@ -22,0 +23,5 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
+		# tool. It will call a fence against the other node and return&lt;br /&gt;
+		# the appropriate exit code to DRBD.&lt;br /&gt;
+		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
@@ -26,0 +32,22 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
+		become-primary-on	both;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
+		# connect. This should be longer than it takes for cman to&lt;br /&gt;
+		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
+		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
+		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
+		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
+		# forever.&lt;br /&gt;
+		wfc-timeout		300;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
+		# if the other node was degraded the last time it was seen by&lt;br /&gt;
+		# this node. This is a way to speed up the boot process when&lt;br /&gt;
+		# the other node is out of commission for an extended duration.&lt;br /&gt;
+		degr-wfc-timeout	120;&lt;br /&gt;
+&lt;br /&gt;
+		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
+		# &#039;Outdated&#039;.&lt;br /&gt;
+		outdated-wfc-timeout	120;&lt;br /&gt;
@@ -31,0 +59,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
+		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
+		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
+		# condition and it is incredible important in dual-primary&lt;br /&gt;
+		# setups!&lt;br /&gt;
+		fencing			resource-and-stonith;&lt;br /&gt;
@@ -37,0 +72,14 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
+		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
+		allow-two-primaries;&lt;br /&gt;
+&lt;br /&gt;
+		# The following three commands tell DRBD how to react should&lt;br /&gt;
+		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
+		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
+		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
+		# where both nodes were primary. This care requires human&lt;br /&gt;
+		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
+		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
+		after-sb-1pri		discard-secondary;&lt;br /&gt;
+		after-sb-2pri		disconnect;&lt;br /&gt;
@@ -41,0 +90,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
+		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
+		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
+		# the more of an impact normal application use of the DRBD&lt;br /&gt;
+		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
+		rate			30M;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with this file.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the DRBD Resources ===&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, we are going to create two DRBD resources:&lt;br /&gt;
&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and provide space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each resource configuration will be in its own file saved as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/rX.res&amp;lt;/span&amp;gt;. The two of them will be pretty much the same. So let&#039;s take a look at the first resource, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt;, then we&#039;ll just look at the changes for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt;. These files won&#039;t exist initially so we start by creating them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/r0.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the shared GFS2 partition and host VMs designed &lt;br /&gt;
# to run on an-c05n01.&lt;br /&gt;
resource r0 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device		/dev/drbd0;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk	internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address		10.10.50.1:7788;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address		10.10.50.2:7788;&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; and edit for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; VM resource. The main differences are the resource name, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, the block device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt;, the port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and the backing block devices, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
vim /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
resource r1 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device          /dev/drbd1;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk       internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address         10.10.50.1:7789;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address         10.10.50.2:7789;&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s easiest to see what changed between &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; if we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/drbd.d/r0.res	2013-10-30 21:26:31.936680235 -0400&lt;br /&gt;
+++ /etc/drbd.d/r1.res	2013-10-30 21:27:42.625006337 -0400&lt;br /&gt;
@@ -1,3 +1,2 @@&lt;br /&gt;
-# This is the resource used for the shared GFS2 partition and host VMs designed&lt;br /&gt;
-# to run on an-c05n01.&lt;br /&gt;
-resource r0 {&lt;br /&gt;
+# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
+resource r1 {&lt;br /&gt;
@@ -5 +4 @@&lt;br /&gt;
-	device		/dev/drbd0;&lt;br /&gt;
+	device		/dev/drbd1;&lt;br /&gt;
@@ -17 +16 @@&lt;br /&gt;
-		address		10.10.50.1:7788;&lt;br /&gt;
+		address		10.10.50.1:7789;&lt;br /&gt;
@@ -20 +19 @@&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
@@ -24,2 +23,2 @@&lt;br /&gt;
-		address		10.10.50.2:7788;&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		address		10.10.50.2:7789;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see easily that the resource name, device name and backing partitions changed. We can also see that the IP address used for each resource stayed the same. We split up the network traffic by using different [[TCP]] ports instead.&lt;br /&gt;
&lt;br /&gt;
Now we will do an initial validation of the configuration. This is done by running the following command;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm dump&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/drbd.conf&lt;br /&gt;
common {&lt;br /&gt;
    protocol               C;&lt;br /&gt;
    net {&lt;br /&gt;
        allow-two-primaries;&lt;br /&gt;
        after-sb-0pri    discard-zero-changes;&lt;br /&gt;
        after-sb-1pri    discard-secondary;&lt;br /&gt;
        after-sb-2pri    disconnect;&lt;br /&gt;
    }&lt;br /&gt;
    disk {&lt;br /&gt;
        fencing          resource-and-stonith;&lt;br /&gt;
    }&lt;br /&gt;
    syncer {&lt;br /&gt;
        rate             30M;&lt;br /&gt;
    }&lt;br /&gt;
    startup {&lt;br /&gt;
        wfc-timeout      300;&lt;br /&gt;
        degr-wfc-timeout 120;&lt;br /&gt;
        outdated-wfc-timeout 120;&lt;br /&gt;
        become-primary-on both;&lt;br /&gt;
    }&lt;br /&gt;
    handlers {&lt;br /&gt;
        fence-peer       /usr/lib/drbd/rhcs_fence;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r0 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r0 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.1:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.2:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r1 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r1 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.1:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.2:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll note that the output is formatted differently from the configuration files we created, but the values themselves are the same. If there had of been errors, you would have seen them printed. Fix any problems before proceeding. Once you get a clean dump, copy the configuration over to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
drbd.d/r0.res&lt;br /&gt;
drbd.d/r1.res&lt;br /&gt;
&lt;br /&gt;
sent 5015 bytes  received 91 bytes  10212.00 bytes/sec&lt;br /&gt;
total size is 5479  speedup is 1.07&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Initializing the DRBD Resources ==&lt;br /&gt;
&lt;br /&gt;
Now that we have DRBD configured, we need to initialize the DRBD backing devices and then bring up the resources for the first time.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To save a bit of time and typing, the following sections will use a little &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bash&amp;lt;/span&amp;gt; magic. When commands need to be run on both resources, rather than running the same command twice with the different resource names, we will use the short-hand form &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, create the new [[DRBD metadata|metadata]] on the backing devices. &lt;br /&gt;
&lt;br /&gt;
Two notes:&lt;br /&gt;
&lt;br /&gt;
* You may need to type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; to confirm the action if any data is seen.&lt;br /&gt;
* If DRBD sees an actual file system, it will error and insist that you clear the partition. You can do this by running; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd if=/dev/zero of=/dev/sdaX bs=4M count=1000&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; is the partition you want to clear. This is called &amp;quot;zeroing out&amp;quot; a partition. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; program does not print its progress. To check the progress, open a new terminal to the node and run &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kill -USR1 $(pidof dd)&amp;lt;/span&amp;gt;&#039;.&lt;br /&gt;
&lt;br /&gt;
Lets create the meta-data!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get an error like this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
pvs stderr:  Skipping volume group an-c05n01-vg0&lt;br /&gt;
pvs stderr:        Freeing VG (null) at 0x16efd20.&lt;br /&gt;
pvs stderr:      Unlocking /var/lock/lvm/P_global&lt;br /&gt;
pvs stderr:        _undo_flock /var/lock/lvm/P_global&lt;br /&gt;
&lt;br /&gt;
md_offset 542229131264&lt;br /&gt;
al_offset 542229098496&lt;br /&gt;
bm_offset 542212550656&lt;br /&gt;
&lt;br /&gt;
Found LVM2 physical volume signature&lt;br /&gt;
   529504444 kB left usable by current configuration&lt;br /&gt;
Could not determine the size of the actually used data area.&lt;br /&gt;
&lt;br /&gt;
Device size would be truncated, which&lt;br /&gt;
would corrupt data and result in&lt;br /&gt;
&#039;access beyond end of device&#039; errors.&lt;br /&gt;
If you want me to do this, you need to zero out the first part&lt;br /&gt;
of the device (destroy the content).&lt;br /&gt;
You should be very sure that you mean it.&lt;br /&gt;
Operation refused.&lt;br /&gt;
&lt;br /&gt;
Command &#039;drbdmeta 0 v08 /dev/sda5 internal create-md&#039; terminated with exit code 40&lt;br /&gt;
drbdadm create-md r0: exited with code 40&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The next two commands will irrevocably destroy the data on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; on the backing device to destroy all existing data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda5 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.04352 s, 464 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda6 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.83831 s, 426 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Try running the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create-md&amp;lt;/span&amp;gt; commands again, it should work this time.&lt;br /&gt;
&lt;br /&gt;
== Loading the drbd Kernel Module ==&lt;br /&gt;
&lt;br /&gt;
Before we can go any further, we&#039;ll need to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module. Normally you won&#039;t normally need to do this because the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd&amp;lt;/span&amp;gt; initializations script handles this for us. We can&#039;t use this yet though because the DRBD resource we defined are not yet setup.&lt;br /&gt;
&lt;br /&gt;
So to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module, run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: minor_table @ 0xffff8803374420c0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: minor_table @ 0xffff8803387a9ec0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now go back to the terminal windows we were using to watch the cluster start. Kill the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;, if it&#039;s still running. We&#039;re going to watch the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; so we can keep tabs on the current state of the DRBD resources. We&#039;ll do this by using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt; program, which will refresh the output of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat&amp;lt;/span&amp;gt; call every couple of seconds.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back in the first terminal, we need now to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;attach&amp;lt;/span&amp;gt; each resource&#039;s backing device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda{5,6}&amp;lt;/span&amp;gt;, to their respective DRBD resources, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;. After running the following command, you will see no output on the first terminal, but the second terminal&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; should change.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the connection state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:StandAlone&amp;lt;/span&amp;gt;, the current role, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Secondary/Unknown&amp;lt;/span&amp;gt; and the disk state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ds:Inconsistent/DUnknown&amp;lt;/span&amp;gt;. This tells us that our resources are not talking to one another, are not usable because they are in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state (you can&#039;t even read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbdX&amp;lt;/span&amp;gt; device) and that the backing device does not have an up to date view of the data. &lt;br /&gt;
&lt;br /&gt;
This all makes sense of course, as the resources are brand new.&lt;br /&gt;
&lt;br /&gt;
So the next step is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;connect&amp;lt;/span&amp;gt; the two nodes together. As before, we won&#039;t see any output from the first terminal, but the second terminal will change.&lt;br /&gt;
&lt;br /&gt;
{{note|1=After running the following command on the first node, its connection state will become &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:WFConnection&amp;lt;/span&amp;gt; which means that it is &#039;&#039;&#039;w&#039;&#039;&#039;aiting &#039;&#039;&#039;f&#039;&#039;&#039;or a &#039;&#039;&#039;connection&#039;&#039;&#039; from the other node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can now see that the two nodes are talking to one another properly as the connection state has changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:Connected&amp;lt;/span&amp;gt;. They can see that their peer node is in the same state as they are; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next step is to synchronize the two nodes. Neither node has any real data, so it&#039;s entirely arbitrary which node we choose to use here. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; because, well, why not.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm -- --overwrite-data-of-peer primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:11467520 nr:0 dw:0 dr:11468516 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 7:03:30 speed: 20,372 (13,916) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:10833792 nr:0 dw:0 dr:10834788 al:0 bm:661 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290248820&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.6% (283444/294024)M&lt;br /&gt;
        finish: 7:31:03 speed: 10,720 (13,144) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# don&#039;t run anything here.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11467520 dw:11467520 dr:0 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 8:42:19 speed: 16,516 (13,796) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11061120 dw:11061120 dr:0 al:0 bm:675 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290021492&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.7% (283224/294024)M&lt;br /&gt;
        finish: 7:06:46 speed: 11,316 (13,308) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! This tells us that the data, as garbage as it is, is being sync&#039;ed over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. DRBD doesn&#039;t know about data structures, all it cares about is that whatever is on the first node is identical to what is on the other node. This initial synchronization does this.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
&lt;br /&gt;
* There is a trick to short-circuit this which we used to use in the old tutorial, but we no longer recommend this. If you ever run an [http://www.drbd.org/users-guide-8.3/s-online-verify.html online verification] of the resource, all the previously unsync&#039;ed blocks will sync. So it&#039;s better to do it initially before the cluster is in production.&lt;br /&gt;
* If you notice that the sync speed is sitting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;250 K/sec&amp;lt;/span&amp;gt;, then DRBD isn&#039;t honouring the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { rate xxM; }&amp;lt;/span&amp;gt; value. Run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbdadm adjust all&amp;lt;/span&amp;gt; on one node at the sync speed should start to speed up.&lt;br /&gt;
* &#039;&#039;&#039;Sync speed is NOT replication speed!&#039;&#039;&#039; - This is a very common misunderstanding for new DRBD users. The sync speed we see here &#039;&#039;takes away from&#039;&#039; the speed available to applications writing to the DRBD resource. The slower this is, the faster your applications can write to DRBD. Conversely, the higher the sync speed, the slower your applications writing to disk will be. So keep this reasonably low. Generally, a good number is about 30% of the storage or network&#039;s fastest speed, whichever is slower. If in doubt, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30M&amp;lt;/span&amp;gt; is a safe starting value.&lt;br /&gt;
* If you manually adjust the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer&amp;lt;/span&amp;gt; speed, it will not immediately change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;. It takes a while to change, be patient.&lt;br /&gt;
&lt;br /&gt;
The good thing about DRBD is that we do not have to wait for the resources to be synchronized. So long as one of the resource is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;, both nodes will work. If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node needs to read data, it will simply read it from its peer. &lt;br /&gt;
&lt;br /&gt;
It is worth noting though; If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; node disconnects or disappears, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node will immediately demote to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;, making it unusable. This is the biggest reason for making the synchronization speed as high as we did. The cluster can not be considered redundant until both nodes are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So with this understood, let&#039;s get back to work. The resources can synchronize in the background.&lt;br /&gt;
&lt;br /&gt;
In order for a DRBD resource to be usable, it has to be &amp;quot;promoted&amp;quot;. Be default, DRBD resources start in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state. This means that it will receive changes from the peer, but no changes can be made. You can&#039;t even look at the contents of a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; resource. Why this is requires more time to discuss than we can go into here.&lt;br /&gt;
&lt;br /&gt;
So the next step is to promote both resource on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:20010808 nr:0 dw:0 dr:20011804 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 9:01:50 speed: 15,660 (14,680) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:18860984 nr:0 dw:0 dr:18861980 al:0 bm:1151 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:282221684&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.3% (275604/294024)M&lt;br /&gt;
        finish: 2:31:28 speed: 31,036 (13,836) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:20010808 dw:20010752 dr:608 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 11:06:52 speed: 12,724 (14,584) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:19152824 dw:19152768 dr:608 al:0 bm:1168 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:281929844&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.4% (275320/294024)M&lt;br /&gt;
        finish: 2:27:30 speed: 31,844 (13,956) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how the roles have changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Primary/Primary&amp;lt;/span&amp;gt;? That tells us that DRBD is now ready to be used on both nodes!&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re done setting up DRBD!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Stopping DRBD while a synchronization is running is fine. When DRBD starts back up, it will pick up where it left off.}}&lt;br /&gt;
&lt;br /&gt;
Eventually, the next day in the case of our cluster, the synchronization will complete. This is what it looks like once it&#039;s finished. After this point, all application writes to the DRBD resources will get all the available performance your storage and network have to offer.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:413259760 nr:0 dw:20 dr:413261652 al:1 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:188464424 nr:0 dw:20 dr:188465928 al:1 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:413259760 dw:413259600 dr:944 al:0 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:188464424 dw:188464264 dr:876 al:0 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the next section, we&#039;re going to start working on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. You will want to stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; and go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
= Initializing Clustered Storage =&lt;br /&gt;
&lt;br /&gt;
Before we can provision the first virtual machine, we must first create the storage that will back them. This will take a few steps:&lt;br /&gt;
&lt;br /&gt;
* Configuring [[LVM]]&#039;s clustered locking and creating the [[PV]]s, [[VG]]s and [[LV]]s&lt;br /&gt;
* Formatting and configuring the shared [[GFS2]] partition.&lt;br /&gt;
* Adding storage to the cluster&#039;s resource management.&lt;br /&gt;
&lt;br /&gt;
== Clustered Logical Volume Management ==&lt;br /&gt;
&lt;br /&gt;
We will assign all three DRBD resources to be managed by clustered LVM. This isn&#039;t strictly needed for the [[GFS2]] partition, as it uses DLM directly. However, the flexibility of LVM is very appealing, and will make later growth of the GFS2 partition quite trivial, should the need arise. &lt;br /&gt;
&lt;br /&gt;
The real reason for clustered LVM in our cluster is to provide DLM-backed locking to the partitions, or logical volumes in LVM, that will be used to back our VMs. Of course, the flexibility of LVM managed storage is enough of a win to justify using LVM for our VMs in itself, and shouldn&#039;t be ignored here.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Clustered LVM Locking ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to edit the configuration on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. When we&#039;re done, we&#039;ll copy the configuration files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Before we create the clustered LVM, we need to first make three changes to the LVM configuration:&lt;br /&gt;
&lt;br /&gt;
* We need to filter out the DRBD backing devices so that LVM doesn&#039;t see the same signature a second time on the DRBD resource&#039;s backing device.&lt;br /&gt;
* Switch from local locking to clustered locking.&lt;br /&gt;
* Prevent fall-back to local locking when the cluster is not available.&lt;br /&gt;
&lt;br /&gt;
Start by making a backup of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; and then begin editing it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The configuration option to filter out the DRBD backing device is, surprisingly, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter = [ ... ]&amp;lt;/span&amp;gt;. By default, it is set to allow everything via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a/.*/&amp;quot;&amp;lt;/span&amp;gt; regular expression. We&#039;re only using DRBD in our LVM, so we&#039;re going to flip that to reject everything &#039;&#039;except&#039;&#039; DRBD by changing the regex to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the locking, we&#039;re going to change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;locking_type&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (local locking) to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;, (clustered locking). This is what tells LVM to use DLM and gives us the &amp;quot;clustered&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    locking_type = 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, we&#039;re also going to disallow fall-back to local locking. Normally, LVM would try to access a clustered LVM [[VG]] using local locking if DLM is not available. We want to prevent any access to the clustered LVM volumes &#039;&#039;except&#039;&#039; when the DLM is itself running. This is done by changing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fallback_to_local_locking&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes, then lets run a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; against our backup to see a summary of the changes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/lvm/lvm.conf /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/lvm/lvm.conf	2013-10-10 09:40:04.000000000 -0400&lt;br /&gt;
+++ /etc/lvm/lvm.conf	2013-10-31 00:21:36.196228144 -0400&lt;br /&gt;
@@ -67,2 +67,2 @@&lt;br /&gt;
-    # By default we accept every block device:&lt;br /&gt;
-    filter = [ &amp;quot;a/.*/&amp;quot; ]&lt;br /&gt;
+    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
+    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
@@ -408 +408 @@&lt;br /&gt;
-    locking_type = 1&lt;br /&gt;
+    locking_type = 3&lt;br /&gt;
@@ -424 +424 @@&lt;br /&gt;
-    fallback_to_local_locking = 1&lt;br /&gt;
+    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect! Now copy the modified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; file to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm/lvm.conf root@an-c05n02:/etc/lvm/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm.conf&lt;br /&gt;
&lt;br /&gt;
sent 2399 bytes  received 355 bytes  5508.00 bytes/sec&lt;br /&gt;
total size is 37569  speedup is 13.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Testing the clvmd Daemon ===&lt;br /&gt;
&lt;br /&gt;
A little later on, we&#039;re going to put clustered LVM under the control of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Before we can do that though, we need to start it manually so that we can use it to create the [[LV]] that will back the [[GFS2]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. We will also be adding this partition to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, once it has been created.&lt;br /&gt;
&lt;br /&gt;
Before we start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon, we&#039;ll want to ensure that the cluster is running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M     64   2013-10-30 22:40:07  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M     64   2013-10-30 22:40:07  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is, and both nodes are members. We can start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve not created any volume groups yet, so that complaint about not finding any is expected.&lt;br /&gt;
&lt;br /&gt;
We can now use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool&amp;lt;/span&amp;gt; to verify that a [[DLM]] lock space has been created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. If it has, we&#039;re good to go.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 2,2&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 1,1&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Initialize our DRBD Resource for use as LVM PVs ===&lt;br /&gt;
&lt;br /&gt;
This is the first time we&#039;re actually going to use DRBD and clustered LVM, so we need to make sure that both are started.&lt;br /&gt;
&lt;br /&gt;
First, check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198972/294024)M&lt;br /&gt;
0:r0   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
1:r1   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198956/294024)M&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary/Primary&amp;lt;/span&amp;gt;, so we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
Now to check on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13936) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13894) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and running. As we did earlier, we can also verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; if we wish.&lt;br /&gt;
&lt;br /&gt;
Before we can use LVM, clustered or otherwise, we need to initialize one or more raw storage devices called &amp;quot;Physical Volumes&amp;quot;. This is done using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; command. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should see the newly initialized DRBD resources appear.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s verify that, indeed, we have no existing [[PV]]s. We&#039;ll do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;, a tool that looks at blocks devices for physical volumes it may not yet have seen.&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; first, we&#039;ll see that no [[PV]]s have been created.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; against both DRBD devices. This will &amp;quot;sign&amp;quot; the devices and tell LVM that it can use them in [[VG]]s we&#039;ll soon create. On the other node, we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt;. If The &amp;quot;clustered&amp;quot; part of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; is working, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; should immediately know about the new PVs without needing another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvcreate /dev/drbd{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd0&amp;quot; successfully created&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd1&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;/dev/drbd0&amp;quot; is a new physical volume of &amp;quot;504.97 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               504.97 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;/dev/drbd1&amp;quot; is a new physical volume of &amp;quot;287.13 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               287.13 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If this was normal LVM, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; would not have seen the new [[PV]]s. Because DRBD replicated the changes and clustered LVM alerted the peer though, it immediately knew about the changes. &lt;br /&gt;
&lt;br /&gt;
Pretty neat!&lt;br /&gt;
&lt;br /&gt;
=== Creating Cluster Volume Groups ===&lt;br /&gt;
&lt;br /&gt;
As with initializing the DRBD resource above, we will create our volume groups, called [[VG]]s, on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. As with the PVs, we will again be able to see them on both nodes immediately.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that no previously-unseen VGs exist using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgscan&amp;lt;/span&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to create the VGs, we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgcreate&amp;lt;/span&amp;gt; command with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; switch, which tells LVM to make the VG a clustered VG. Note that when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon is running, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; is implied. However, it&#039;s best to get into the habit of being extra careful and thorough. If there was a problem, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; not being running for example, it will trigger an error and we avoid hassles later.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you plan to use the [[AN!CDB|cluster dashboard]], it is important that the volume group names match those below. If you do not do this, you may have trouble provisioning new servers via the dashboard&#039;s user interface.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use the volume group naming convention of:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;_vgX&amp;lt;/span&amp;gt;&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; matches the node that will become home to the servers using this storage pool.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgX&amp;lt;/span&amp;gt; is a simple sequence, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. If you ever need to add space to an existing storage pool, you can create a new DRBD resource, sign it as a PV and either assign it directly to the existing volume group or increment this number and create a second storage pool for the associated node.&lt;br /&gt;
&lt;br /&gt;
Earlier, while planning our partition sizes, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; would back the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; physical volume.&lt;br /&gt;
&lt;br /&gt;
Likewise, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd1&amp;lt;/span&amp;gt; would be used for the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, create both of our new VGs!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgcreate -c y an-c05n01_vg0 /dev/drbd0&lt;br /&gt;
vgcreate -c y an-c05n02_vg0 /dev/drbd1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n01_vg0&amp;quot; successfully created&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n02_vg0&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       73506 / 287.13 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
   &lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               504.97 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       129273 / 504.97 GiB&lt;br /&gt;
  VG UUID               TzKBFn-xBVB-e9AP-iL1l-AvQi-mZiV-86KnSF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good! Now as a point of note, let&#039;s look again at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; (we know it will be the same on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  PV Size               287.13 GiB / not usable 1.99 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Free PE               73506&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
   &lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  PV Size               504.97 GiB / not usable 2.18 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Free PE               129273&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice now that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;VG Name&amp;lt;/span&amp;gt; has a value where it didn&#039;t before? This shows us that the PV has been allocated to a volume.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it for the volume groups!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Logical Volume ===&lt;br /&gt;
&lt;br /&gt;
The last LVM step, for now, is to create a &amp;quot;logical volume&amp;quot; carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group. This will be used in the next step as the volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
&lt;br /&gt;
Out of thoroughness, let&#039;s scan for any previously unseen logical volumes using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
None found, as expected. So let&#039;s create our 40 [[GB]] logical volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition. We&#039;ll do this by specifying how large we want the new logical volume to be, what name we want to give it and what volume group to carve the space out of. The resulting logical volume will then be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/&amp;lt;vg&amp;gt;/&amp;lt;lv&amp;gt;&amp;lt;/span&amp;gt;. Here, we&#039;re taking space from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and we&#039;ll call this LV &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shared&amp;lt;/span&amp;gt;, so the resulting volume will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 40G -n shared an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;shared&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/shared&lt;br /&gt;
  LV Name                shared&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                f0w1J0-6aTz-0Bz0-SX57-pstr-g5qu-SAGGSS&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-10-31 17:07:50 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                40.00 GiB&lt;br /&gt;
  Current LE             10240&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. We can now create our GFS2 partition!&lt;br /&gt;
&lt;br /&gt;
== Creating the Shared GFS2 Partition ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Red Hat &#039;&#039;&#039;[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Global_File_System_2/index.html#s2-selinux-gfs2-gfs2 does NOT]&#039;&#039;&#039; support using SELinux and GFS2 together. The principle reason for this is the performance degradation caused by the additional storage overhead required for SELinux to operate. We decided to enable SELinux in the [[Anvil!]] anyway because of how infrequently the partition is changed. In our case, performance is not a concern. However, if you need to be 100% in compliance with what Red Hat supports, you will need to disable SELinux.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; are running.}}&lt;br /&gt;
&lt;br /&gt;
The GFS2-formatted &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; partition will be mounted at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on both nodes and it will be used for four main purposes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;; Storing files like [[ISO]] images needed when installing server operating systems and mounting &amp;quot;DVDs&amp;quot; into the virtual DVD-ROM drives.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision&amp;lt;/span&amp;gt;; Storing short scripts used to call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; which handles the creation of new servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;; This is where the [[XML]] definition files which define the virtual hardware backing our servers will be kept. This is the most important directory as the cluster and [[AN!CDB|dashboard]] will look here when starting, migrating and recovering servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/archive&amp;lt;/span&amp;gt;; This is used to store old copies of the [[XML]] definition files and provision scripts.&lt;br /&gt;
&lt;br /&gt;
Formatting the logical volume is much like formatting a traditional file system on a traditional partition. There are a few extra arguments needed though. Lets look at them first.&lt;br /&gt;
&lt;br /&gt;
The following switches will be used with our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt; call:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-p lock_dlm&amp;lt;/span&amp;gt;; This tells GFS2 to use [[DLM]] for its clustered locking.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-j 2&amp;lt;/span&amp;gt;; This tells GFS2 to create two journals. This must match the number of nodes that will try to mount this partition at any one time.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-t an-cluster-05:shared&amp;lt;/span&amp;gt;; This is the lock space name, which must be in the format &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;cluste_name&amp;gt;:&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster_name&amp;lt;/span&amp;gt; must match the one in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt; has to be unique in the cluster, which is easy for us because we&#039;ll only have the one gfs2 file system.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve formatted the partition, we&#039;ll use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_tool&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to query the new partition&#039;s superblock. We&#039;re going to use it shortly in some bash magic to pull out the [[UUID]] and feed it into a string formatted for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. More importantly here, it shows us that the second node sees the new file system.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Depending on the size of the new partition, this call could take a while to complete. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs.gfs2 -p lock_dlm -j 2 -t an-cluster-05:shared /dev/an-c05n01_vg0/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This will destroy any data on /dev/an-c05n01_vg0/shared.&lt;br /&gt;
It appears to contain: symbolic link to `../dm-0&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Are you sure you want to proceed? [y/n] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device:                    /dev/an-c05n01_vg0/shared&lt;br /&gt;
Blocksize:                 4096&lt;br /&gt;
Device Size                40.00 GB (10485760 blocks)&lt;br /&gt;
Filesystem Size:           40.00 GB (10485758 blocks)&lt;br /&gt;
Journals:                  2&lt;br /&gt;
Resource Groups:           160&lt;br /&gt;
Locking Protocol:          &amp;quot;lock_dlm&amp;quot;&lt;br /&gt;
Lock Table:                &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
UUID:                      774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  mh_magic = 0x01161970&lt;br /&gt;
  mh_type = 1&lt;br /&gt;
  mh_format = 100&lt;br /&gt;
  sb_fs_format = 1801&lt;br /&gt;
  sb_multihost_format = 1900&lt;br /&gt;
  sb_bsize = 4096&lt;br /&gt;
  sb_bsize_shift = 12&lt;br /&gt;
  no_formal_ino = 2&lt;br /&gt;
  no_addr = 23&lt;br /&gt;
  no_formal_ino = 1&lt;br /&gt;
  no_addr = 22&lt;br /&gt;
  sb_lockproto = lock_dlm&lt;br /&gt;
  sb_locktable = an-cluster-05:shared&lt;br /&gt;
  uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
Now, on both nodes, we need to create a mount point for the new file system and then we&#039;ll mount it on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   29M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   26M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the path under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Filesystem&amp;lt;/span&amp;gt; is different from what we used when creating the GFS2 partition. This is an effect of [[Device Mapper]], which is used by LVM to create [[symlinks]] to actual block device paths. If we look at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; device and the device from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;df&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/mapper/an--c05n01_vg0-shared&amp;lt;/span&amp;gt;, we&#039;ll see that they both point to the same actual block device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/an-c05n01_vg0/shared /dev/mapper/an--c05n01_vg0-shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/an-c05n01_vg0/shared -&amp;gt; ../dm-0&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/mapper/an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt; at the beginning of the files&#039; mode? That tells us that these are links. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt; -&amp;gt; ../dm-0&amp;lt;/span&amp;gt; shows where they point to. If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/dm-0&amp;lt;/span&amp;gt;, we see its mode line begins with a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;, telling us that it is an actual block device. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/dm-0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
brw-rw----. 1 root disk 253, 0 Oct 31 17:27 /dev/dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re curious, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to gather more information about the [[device mapper]] devices. Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dmsetup info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Name:              an--c05n01_vg0-shared&lt;br /&gt;
State:             ACTIVE&lt;br /&gt;
Read Ahead:        256&lt;br /&gt;
Tables present:    LIVE&lt;br /&gt;
Open count:        1&lt;br /&gt;
Event number:      0&lt;br /&gt;
Major, minor:      253, 0&lt;br /&gt;
Number of targets: 1&lt;br /&gt;
UUID: LVM-TzKBFnxBVBe9APiL1lAvQimZiV86KnSFf0w1J06aTz0Bz0SX57pstrg5quSAGGSS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we see the link back to the LV.&lt;br /&gt;
&lt;br /&gt;
== Adding /shared to /etc/fstab ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;re going to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. Breaking this file may leave your system unbootable! As always, practice on unimportant nodes until you are comfortable with this process.}}&lt;br /&gt;
&lt;br /&gt;
In order for the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; initialization script to work, it must be able to find the GFS partition in the file system table, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. The operating system reads this file when it is booting, looking for file systems to mount. As such, this is a critical system file and breaking it can leave a node either unable to boot, or booting into the single user recovery console. &lt;br /&gt;
&lt;br /&gt;
So please proceed carefully.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a new entry to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; requires a particularly crafted line. You can read about this in detail by typing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fstab&amp;lt;/span&amp;gt;. In short though, each line is made up of six space-separated values;&lt;br /&gt;
&lt;br /&gt;
# This is the device (by path or by [[UUID]]). We will be using the partition&#039;s UUID here.&lt;br /&gt;
# This is the mount point for the file system. For this entry, that will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
# This tells the [[OS]] what file system this partition is. For us, we&#039;ll set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;.&lt;br /&gt;
# These are the mount options. Usually this is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;default&amp;lt;/span&amp;gt; which implies a set of option. We&#039;re going to add a couple other options to modify this, which we&#039;ll discuss shortly.&lt;br /&gt;
# This tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt; program whether to back this file system up or not. It&#039;s not usually used except with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext2]]&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext3]]&amp;lt;/span&amp;gt; file systems. Even then, it&#039;s rarely used any more. We will set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; which disables this.&lt;br /&gt;
# This last field sets the order in which boot-time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck&amp;lt;/span&amp;gt; (file system checks) run. This file system is never available at boot, so the only sensible value here is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With all this, we can now build our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
First, we need to query the file system&#039;s UUID.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
current uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We only need the UUID, so let&#039;s filter out the parts we don&#039;t want by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;awk&amp;lt;/span&amp;gt;, which splits a line up on spaces.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need to make sure that the UUID is lower-case. It is already, but we can make sure it&#039;s always lower case by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When specifying a device in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; but UUID instead of using a device path, we need to prefix the entry with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID=&amp;lt;/span&amp;gt;. We can expand on our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to do this.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generally, all but the last two values are separated by tabs. We know that the second field is the mount point for this file system, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; in this case. lets expand the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to add a tab followed by the mount point.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The third entry is the file system type, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; in our case. Let&#039;s add another tab and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; word.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up are the file system options. GFS2, being a clustered file system, requires cluster locking. Cluster locks are, relative to non-clustered internal locks, fairly slow. So we also want to reduce the number of writes that hit the partition. Normally, every time you look at a file or directory, a field called &amp;quot;access time&amp;quot;, or &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;atime&amp;lt;/span&amp;gt;&amp;quot; for short, gets updated. This is actually a write, which would in turn require a DLM lock. Few people care about access times, so we&#039;re going to disable it for files and directories as well. We&#039;re to append a couple of option to help here; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;defaults,noatime,nodiratime&amp;lt;/span&amp;gt;. Let&#039;s add them to our growing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All that is left now are the two last options. We&#039;re going to separate these with a single space. Let&#039;s finish off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; with one last addition to our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
Now, we can add it by simply copy and pasting this line into the file directly. Another bash trick though, as we say in the SSH section, is using bash redirection to append the output of one program onto the end of a file. We&#039;ll do a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; immediately after to see that the line was appended properly.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Be sure to use two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt; brackets! A single &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; bracket says &amp;quot;overwrite&amp;quot;. Two &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; brackets says &amp;quot;append&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:17:33.865210115 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:18:04.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:14:39.035500695 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This looks good. Note that for this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt;, we used the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-u&amp;lt;/span&amp;gt; option. This shows a couple lines on either side of the changes. We see the existing entries above the new one, so we know we didn&#039;t accidentally over-write the existing data.&lt;br /&gt;
&lt;br /&gt;
Now we need to make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; daemon can see the new partition. If it can, we know the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; entry works properly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That works.&lt;br /&gt;
&lt;br /&gt;
The last test is to create our sub-directories we talked about earlier. We&#039;ll do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then we will do a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. If everything is working properly, we should see the new directories immediately.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared/{definitions,provision,archive,files}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 40K&lt;br /&gt;
drwxr-xr-x.  6 root root 3.8K Nov  1 01:23 .&lt;br /&gt;
dr-xr-xr-x. 24 root root 4.0K Oct 31 21:02 ..&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 archive&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 definitions&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 files&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fantastic! &lt;br /&gt;
&lt;br /&gt;
Our clustered storage is complete. The last thing we need to do is to move the clustered storage to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
=== Stopping All Clustered Storage Components ===&lt;br /&gt;
&lt;br /&gt;
In the next step, we&#039;re going to put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; under the cluster&#039;s control. Let&#039;s stop these daemons now so we can see them be started by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; shortly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
= Managing Storage In The Cluster =&lt;br /&gt;
&lt;br /&gt;
A little while back, we spoke about how the cluster is split into two components; cluster communication managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and resource management provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It is the later which we will now begin to configure.&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; component is contained within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; element tags. Within this element are three types of child elements. They are:&lt;br /&gt;
&lt;br /&gt;
* Fail-over Domains - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** These are optional constraints which allow for control which nodes, and under what circumstances, services may run. When not used, a service will be allowed to run on any node in the cluster without constraints or ordering.&lt;br /&gt;
* Resources - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** Within this element, available resources are defined. Simply having a resource here will not put it under cluster control. Rather, it makes it available for use in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
* Services - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** This element contains one or more parallel or series child-elements which are themselves references to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt; elements. When in parallel, the services will start and stop at the same time. When in series, the services start in order and stop in reverse order. We will also see a specialized type of service that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm /&amp;gt;&amp;lt;/span&amp;gt; element name, as you can probably guess, for creating virtual machine services.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll look at each of these components in more detail shortly.&lt;br /&gt;
&lt;br /&gt;
== A Note on Daemon Starting ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Readers of the old tutorial will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; has been removed. We found that, in rare occasions, bleeding-edge client software, like modern versions of &amp;quot;Virtual Machine Manager&amp;quot; of Fedora workstations, connecting to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon could cause it to crash. This didn&#039;t interfere with the servers, but the cluster would try to fail the storage stack, causing the service to enter a failed state. This left servers running, but it is a mess to clean up that is easily avoided by simply removing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; from the storage stack. To address this, we will monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; as its own service. Should it fail, it will restart without impacting the storage daemons.}}&lt;br /&gt;
&lt;br /&gt;
There are four daemons we will be putting under cluster control:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;; Replicated storage.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;; Clustered LVM.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;; Mounts and Unmounts configured GFS2 partition. We will manage this using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;; Enables access to the KVM hypervisor via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; suite of tools.&lt;br /&gt;
&lt;br /&gt;
The reason we do not want to start these daemons with the system is so that we can let the cluster do it. This way, should any fail, the cluster will detect the failure and fail the entire service tree. &lt;br /&gt;
&lt;br /&gt;
For example, lets say that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; failed to start, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; would fail the storage service and give up, rather than continue trying to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and the rest.&lt;br /&gt;
&lt;br /&gt;
If we had left these daemons to start on boot, the failure of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; would not effect the start-up of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, which would then not find its [[PV]]s given that DRBD is down. The system would then try to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; daemon which would also fail as the [[LV]] backing the partition would not be available.&lt;br /&gt;
&lt;br /&gt;
=== Defining the Resources ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=All of these edits will be done on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once we&#039;re done and the config has been validated, we&#039;ll use the cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; to push the update to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and update the running cluster&#039;s config.}}&lt;br /&gt;
&lt;br /&gt;
Lets start by first defining our clustered resources. &lt;br /&gt;
&lt;br /&gt;
As stated before, the addition of these resources does not, in itself, put the defined resources under the cluster&#039;s management. Instead, it defines services, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; scripts. These can then be used by one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements, as we will see shortly. For now, it is enough to know what, until a resource is defined, it can not be used in the cluster.&lt;br /&gt;
&lt;br /&gt;
Given that this is the first component of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; being added to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, we will be creating the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; elements here as well.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the new section, then discuss the parts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First and foremost; Note that we&#039;ve incremented the configuration version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8&amp;lt;/span&amp;gt;. As always, &amp;quot;increment and then edit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the new section;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve added the attribute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;log_level=&amp;quot;5&amp;quot;&amp;lt;/span&amp;gt; to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element to cut down on the log entries in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;. Every 10 seconds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/$foo status&amp;lt;/span&amp;gt; on all script services. At the default log, these checks are logged. So without this, every ten seconds, four status messages would be printed to the system log. That can make is difficult when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing the logs when testing or debugging.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources&amp;gt;...&amp;lt;/resources&amp;gt;&amp;lt;/span&amp;gt; element contains our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources. This is a particular type of resource which specifically handles that starting and stopping of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[init.d]]&amp;lt;/span&amp;gt; style scripts. That is, the script must exit with [[LSB]] compliant codes. They must also properly react to being called with the sole argument of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are many other types of resources which, with the exception of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm .../&amp;gt;&amp;lt;/span&amp;gt;, we will not be looking at in this tutorial. Should you be interested in them, please look in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/usr/share/cluster&amp;lt;/span&amp;gt; for the various scripts (executable files that end with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.sh&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Each of our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ... /&amp;gt;&amp;lt;/span&amp;gt; resources have two attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;file=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The full path to the script to be managed.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; A unique name used to reference this resource later on in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
Other resources are more involved, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources are quite simple.&lt;br /&gt;
&lt;br /&gt;
=== Creating Failover Domains ===&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are, at their most basic, a collection of one or more nodes in the cluster with a particular set of rules associated with them. Services can then be configured to operate within the context of a given fail-over domain. There are a few key options to be aware of.&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are optional and can be left out of the cluster, generally speaking. However, in our cluster, we will need them for our storage services, as we will later see, so please do not skip this step.&lt;br /&gt;
&lt;br /&gt;
* A fail-over domain can be unordered or prioritized.&lt;br /&gt;
** When unordered, a service will start on any node in the domain. Should that node later fail, it will restart to another random node in the domain.&lt;br /&gt;
** When prioritized, a service will start on the available node with the highest priority in the domain. Should that node later fail, the service will restart on the available node with the next highest priority.&lt;br /&gt;
* A fail-over domain can be restricted or unrestricted.&lt;br /&gt;
** When restricted, a service is &#039;&#039;&#039;only&#039;&#039;&#039; allowed to start on, or restart on. a nodes in the domain. When no nodes are available, the service will be stopped.&lt;br /&gt;
** When unrestricted, a service will try to start on, or restart on, a node in the domain. However, when no domain members are available, the cluster will pick another available node at random to start the service on.&lt;br /&gt;
* A fail-over domain can have a fail-back policy.&lt;br /&gt;
** When a domain allows for fail-back and the domain is ordered, and a node with a higher &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt; (re)joins the cluster, services within the domain will migrate to that higher-priority node. This allows for automated restoration of services on a failed node when it rejoins the cluster.&lt;br /&gt;
** When a domain does not allow for fail-back, but is unrestricted, fail-back of services that fell out of the domain will happen anyway. That is to say, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; is ignored if a service was running on a node outside of the fail-over domain and a node within the domain joins the cluster. However, once the service is on a node within the domain, the service will &#039;&#039;&#039;not&#039;&#039;&#039; relocate to a higher-priority node should one join the cluster later.&lt;br /&gt;
** When a domain does not allow for fail-back and is restricted, then fail-back of services will never occur.&lt;br /&gt;
&lt;br /&gt;
What we need to do at this stage is to create something of a hack. Let me explain;&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, we need to start a set of local daemons on all nodes. These aren&#039;t really clustered resources though as they can only ever run on their host node. They will never be relocated or restarted elsewhere in the cluster as as such, are not highly available. So to work around this desire to &amp;quot;cluster the unclusterable&amp;quot;, we&#039;re going to create a fail-over domain for each node in the cluster. Each of these domains will have only one of the cluster nodes as members of the domain and the domain will be restricted, unordered and have no fail-back. With this configuration, any service group using it will only ever run on the one node in the domain.&lt;br /&gt;
&lt;br /&gt;
In the next step, we will create a service group, then replicate it once for each node in the cluster. The only difference will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failoverdomain&amp;lt;/span&amp;gt; each is set to use. With our configuration of two nodes then, we will have two fail-over domains, one for each node, and we will define the clustered storage service twice, each one using one of the two fail-over domains.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, then we will focus closer on the new section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, the version was incremented, this time to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;. We&#039;ve also added the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains&amp;gt;...&amp;lt;/failoverdomains&amp;gt;&amp;lt;/span&amp;gt; element. Let&#039;s take a closer look at this new element.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first thing to note is that there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;...&amp;lt;/failoverdomain&amp;gt;&amp;lt;/span&amp;gt; child elements:&lt;br /&gt;
&lt;br /&gt;
* The first has the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n01&amp;lt;/span&amp;gt; and contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
* The second is effectively identical, save that the domain&#039;s name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n02&amp;lt;/span&amp;gt; and it contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt; element has four attributes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute sets the unique name of the domain which we will later use to bind a service to the domain.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster to never &amp;quot;fail back&amp;quot; any services in this domain. This seems redundant, given there is only one node, but when combined with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;, prevents any migration of services.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; this is also somewhat redundant in that there is only one node defined in the domain, but I don&#039;t like to leave attributes undefined so I have it here.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute is key in that it tells the cluster to &#039;&#039;&#039;not&#039;&#039;&#039; try to restart services within this domain on any other nodes outside of the one defined in the fail-over domain.&lt;br /&gt;
&lt;br /&gt;
Each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;&amp;lt;/span&amp;gt; elements has a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode .../&amp;gt;&amp;lt;/span&amp;gt; child element. This is a very simple element which has, at this time, only one attribute:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The name of the node to include in the fail-over domain. This name must match the corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; node name.&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re ready to finally create our clustered storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; monitoring services.&lt;br /&gt;
&lt;br /&gt;
=== Creating Clustered Storage and libvirtd Service ===&lt;br /&gt;
&lt;br /&gt;
With the resources defined and the fail-over domains created, we can set about creating our services.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, services can have one or more resources within them. When two or more resources exist, then can be put into a dependency tree, they can used in parallel or a combination of parallel and dependent resources.&lt;br /&gt;
&lt;br /&gt;
When you create a service dependency tree, you put each dependent resource as a child element of its parent. The resources are then started in order, starting at the top of the tree and working its way down to the deepest child resource. If at any time one of the resources should fail, the entire service will be declared failed and no attempt will be made to try and start any further child resources. Conversely, stopping the service will cause the deepest child resource to be stopped first. Then the second deepest and on upwards towards the top resource. This is exactly the behaviour we want, as we will see shortly.&lt;br /&gt;
&lt;br /&gt;
When resources are defined in parallel, all defined resources will be started at the same time. Should any one of the resources fail to start, the entire resource will be declared failed. Stopping the service will likewise cause a simultaneous call to stop all resources.&lt;br /&gt;
&lt;br /&gt;
As before, let&#039;s take a look at the entire updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, then we&#039;ll focus in on the new service section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With the version now at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;, we have added four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements. Two of which contain the storage resources in a service tree configuration. The other two have a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; resource for managing the hypervisors. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a closer look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements have five attributes each:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute is a unique name that will be used to identify the service, as we will see later.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that, when it starts, it should automatically start this service.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster which fail-over domain this service must run within. The two otherwise identical services each point to a different fail-over domain, as we discussed in the previous section.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that a node running this service &#039;&#039;&#039;is&#039;&#039;&#039; allowed to to have other services running as well.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery=&amp;quot;restart&amp;quot;&amp;lt;/span&amp;gt; attribute sets the service recovery policy. As the name implies, the cluster will try to restart this service should it fail. Should the service fail multiple times in a row, it will be disabled. The exact number of failures allowed before disabling is configurable using the optional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt; attributes, which are not covered here.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=It is a fairly common mistake to interpret &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt; to mean that a service is only allowed to run on one node at a time. This is not the case, please do not use this attribute incorrectly.}}&lt;br /&gt;
&lt;br /&gt;
Within each of the two first two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; attributes are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script...&amp;gt;&amp;lt;/span&amp;gt; type resources and a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; type resource. These are configured as a service tree in the order:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The other two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements are there to simply monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon on each node. Should it fail for any reason, the cluster will restart the service right away.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ...&amp;gt;&amp;lt;/span&amp;gt; elements has just one attribute; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ref=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; which points to a corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;script&amp;lt;/span&amp;gt; resource. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; element has five attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; is the name used to reference this resource in the service tree.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; is the logical volume we formatted as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;force_unmount&amp;lt;/span&amp;gt;, when set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, tells the system to try and kill any processes that might be holding the mount open. This is useful if, for example, you left a terminal window open where you had browsed into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Without it, the service would fail and restart.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstype&amp;lt;/span&amp;gt; is the file system type. If you do not specify this, the system will try to determine it automatically. To be safe, we will set it.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mountpoint&amp;lt;/span&amp;gt; is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; should be mounted.&lt;br /&gt;
&lt;br /&gt;
The logic for the storage resource tree is:&lt;br /&gt;
&lt;br /&gt;
* DRBD needs to start so that the bare clustered storage devices become available.&lt;br /&gt;
* Clustered LVM must next start so that the logical volumes used by GFS2 and our VMs become available.&lt;br /&gt;
* Finally, the GFS2 partition contains the [[XML]] definition files needed to start our servers, host shared files and so on.&lt;br /&gt;
&lt;br /&gt;
From the other direction, we need the stop order to be organized in the reverse order:&lt;br /&gt;
&lt;br /&gt;
* We need the GFS2 partition to unmount first.&lt;br /&gt;
* With the GFS2 partition stopped, we can safely say that all LVs are no longer in use and thus &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; can stop.&lt;br /&gt;
* With Clustered LVM now stopped, nothing should be using our DRBD resources any more, so we can safely stop them, too.&lt;br /&gt;
&lt;br /&gt;
All in all, it&#039;s a surprisingly simple and effective configuration.&lt;br /&gt;
&lt;br /&gt;
== Validating and Pushing the Changes ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve made a big change, so it&#039;s all the more important that we validate the config before proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, no errors and we checked that the current cluster configuration version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We need to now tell the cluster to use the new configuration file. Unlike last time, we won&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;. Now that the cluster is up and running, we can use it to push out the updated configuration file using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;. This is the first time we&#039;ve used the cluster to push out an updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, so we will have to enter the password we set earlier for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As confirmed on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the new configuration loaded properly! Note as well that we had to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password for both nodes. Once done, you will not have to do that again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Later, if you push an update from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, you will need to enter the passwords once again, but not after that. You authenticate from a node only one time.&lt;br /&gt;
&lt;br /&gt;
If you were watching syslog, you will have seen an entries like the ones below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:48 an-c05n01 ricci[26853]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 ricci[26856]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/533317550&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 corosync[6448]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26653]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26656]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/15604613&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 corosync[6404]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the Cluster&#039;s Status ==&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at a new tool; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, &#039;&#039;&#039;clu&#039;&#039;&#039;ster &#039;&#039;&#039;stat&#039;&#039;&#039;us. We&#039;ll be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; extensively from here on out to monitor the status of the cluster members and managed services. It does not manage the cluster in any way, it is simply a status tool.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re only running the foundation of the cluster, so we can only see which nodes are members. &lt;br /&gt;
&lt;br /&gt;
We&#039;ll now start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It will read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; configuration file and parse the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; child elements. It will find our four new services and, according to their configuration, start them. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;ve configured the storage services to start automatically. When we start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now, it will start the storage resources, including DRBD. In turn, DRBD will stop and wait for up to five minutes and wait for its peer. This will cause the first node you start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on to appear to hang until the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; has started DRBD as well. If the other node doesn&#039;t start DRBD, it will be fenced. So be sure to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on both nodes at the same time.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, and see what&#039;s new.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What we see are two sections; The top section shows the cluster members and the lower part covers the managed resources. &lt;br /&gt;
&lt;br /&gt;
We can see that both members, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Online&amp;lt;/span&amp;gt;, meaning that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running and that they&#039;ve joined the cluster. It also shows us that both members are running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. You will always see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Local&amp;lt;/span&amp;gt; beside the name of the node you ran the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; command from.&lt;br /&gt;
&lt;br /&gt;
Under the services, you can see the four new services we created with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix. We can see that each service is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;started&amp;lt;/span&amp;gt;, meaning that all four of the resources are up and running properly and which node each service is running on.&lt;br /&gt;
&lt;br /&gt;
If we were watching the system log, we will see that, very shortly after starting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; starts and mounts. Somewhere in there, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; will start.&lt;br /&gt;
&lt;br /&gt;
Lets take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:07 an-c05n01 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 kernel: dlm: connecting to 2&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: I am node #1&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Starting stopped service service:storage_n01&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: minor_table @ 0xffff880638752a80&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Found 4 transactions (126 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: bitmap READ of 4040 pages took 9 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: attached to UUIDs D62CF91BB06F1B41:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Found 1 transactions (1 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: attached to UUIDs FF678525C82359F3:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting receiver thread (from drbd0_worker [12026])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting receiver thread (from drbd1_worker [12041])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Starting stopped service service:libvirtd_n01&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Service service:libvirtd_n01 started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Starting asender thread (from drbd0_receiver [12058])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: self D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Starting asender thread (from drbd1_receiver [12063])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: self FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated sync UUID FF678525C82359F2:CFC277C83C414547:CFC177C83C414547:0EC499BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated sync UUID D62CF91BB06F1B41:AB8966B4CD6A5E71:AB8866B4CD6A5E71:F1BA98C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: bitmap WRITE of 2298 pages took 12 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1, already locked for use&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 rgmanager[10738]: Service service:storage_n01 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: got connection from 1&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: I am node #2&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:storage_n02&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: minor_table @ 0xffff880638440280&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Found 4 transactions (4 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: bitmap READ of 4040 pages took 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: attached to UUIDs AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: No usable activity log found.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: attached to UUIDs CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting receiver thread (from drbd0_worker [11833])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting receiver thread (from drbd1_worker [11848])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:libvirtd_n02&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 rgmanager[10547]: Service service:libvirtd_n02 started&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Starting asender thread (from drbd0_receiver [11865])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: self AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Starting asender thread (from drbd1_receiver [11869])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: self CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated sync uuid CFC277C83C414547:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated sync uuid AB8966B4CD6A5E71:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: bitmap WRITE of 2298 pages took 14 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0, already locked for use&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Done&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n02 rgmanager[10547]: Service service:storage_n02 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sure enough, we can confirm that everything started properly.&lt;br /&gt;
&lt;br /&gt;
DRBD;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looks good. Lets look at clustered LVM;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  29009) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  28801) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good, too. Last service in storage is GFS2;&lt;br /&gt;
&lt;br /&gt;
GFS2;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, our stand-alone service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  12131) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  11939) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nice, eh?&lt;br /&gt;
&lt;br /&gt;
== Managing Cluster Resources ==&lt;br /&gt;
&lt;br /&gt;
Managing services in the cluster is done with a fairly simple tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to look at two commands at this time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Command&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e &amp;lt;service&amp;gt; -m &amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Enable the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt; on the specified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;. When a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; is not specified, the local node where the command was run is assumed.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -d &amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Disable (stop) the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stopping Clustered Storage - A Preview to Cold-Stopping the Cluster ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at how we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to stop our storage services.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Services with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix can be called with their name alone. As we will see later, other services will need to have the service type prefix included.}}&lt;br /&gt;
&lt;br /&gt;
Before doing any work on an &#039;&#039;Anvil!&#039;&#039;, start by confirming the current state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is running, as expected. Let&#039;s stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d storage_n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling service:storage_n01...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we now run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; now, we should see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:storage_n01&amp;lt;/span&amp;gt; is now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt; state? If you check the status of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; now, you will see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is indeed down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd not loaded&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs            ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
1:r1   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; are stopped as well.&lt;br /&gt;
&lt;br /&gt;
Pretty simple!&lt;br /&gt;
&lt;br /&gt;
== Starting Clustered Storage ==&lt;br /&gt;
&lt;br /&gt;
As we saw earlier, the storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; services start automatically. It&#039;s still important to know how to manually start these services though. So that is what we&#039;ll cover here.&lt;br /&gt;
&lt;br /&gt;
The main difference from stopping the service is that we swap the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-d&amp;lt;/span&amp;gt; switch for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;, &#039;&#039;&#039;e&#039;&#039;&#039;nable, switch. We will also add the target cluster member name using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt; switch. We didn&#039;t need to use the member switch while stopping because the cluster could tell where the service was running and, thus, which member to contact to stop the service.&lt;br /&gt;
&lt;br /&gt;
Should you omit the member name, the cluster will try to use the local node as the target member. Note though that a target service will start on the node the command was issued on, regardless of the fail-over domain&#039;s ordered policy. That is to say, a service will not start on another node in the cluster when the member option is not specified, despite the fail-over configuration set to prefer another node.&lt;br /&gt;
&lt;br /&gt;
As always, start by verifying the current state of the services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; is disabled. Let&#039;s start it up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e storage_n01 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable service:storage_n01...Success&lt;br /&gt;
service:storage_n01 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at DRBD now, it will show as being up and running on both nodes.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If the DRBD status shows the resource still stopped on the node, give it a minute and check again. It can sometimes take a few moments before the resources in the service starts.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back up and running normally.&lt;br /&gt;
&lt;br /&gt;
= Testing Network Redundancy =&lt;br /&gt;
&lt;br /&gt;
Now that the &#039;&#039;Anvil!&#039;&#039; is up and running, it&#039;s time to test the network&#039;s fault tolerance capabilities.&lt;br /&gt;
&lt;br /&gt;
We wanted to wait this long because we need to see how our cluster and storage software handles the failure and recovery of various networking components. Had we tested before now, we would have had to rely on simple tests, like ping responses, which do not give us a complete picture of the network&#039;s real resiliency.&lt;br /&gt;
&lt;br /&gt;
We will perform the following tests:&lt;br /&gt;
&lt;br /&gt;
* Pull each network cable and confirm that the bond it belongs to failed over to the other interface.&lt;br /&gt;
* Kill the primary switch entirely and then recover it.&lt;br /&gt;
* Kill the backup switch entirely and then recover it.&lt;br /&gt;
&lt;br /&gt;
During these tests, we will watch the following:&lt;br /&gt;
&lt;br /&gt;
* Watch a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; file for each bond to see how its state changes.&lt;br /&gt;
* Run a ping flood from each node to the other node, using each of out three networks.&lt;br /&gt;
* Watch the cluster membership.&lt;br /&gt;
* Watch the status of the DRBD resources.&lt;br /&gt;
* Tail the system log files.&lt;br /&gt;
&lt;br /&gt;
The cluster will be formed and the storage services will be running. We do not need to have the servers running, so we will turn them off. If something goes wrong here, it will certainly end up with a node being fenced. No need to risk hurting the servers. Whether they are running or nor will not will have no effect of the tests.&lt;br /&gt;
&lt;br /&gt;
== What we will be Watching ==&lt;br /&gt;
&lt;br /&gt;
Before setup for the tests, lets take a minute to look at the various things we&#039;ll be monitoring for faults.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/proc/net/bonding/bondX&#039; ===&lt;br /&gt;
&lt;br /&gt;
When a bond is created, a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file is created whose name matches the name of the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; device. We created three bonds; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, so we&#039;ll find &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond2&amp;lt;/span&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
These look like normal files, and we can read them like files, but they&#039;re actually representations of kernel values. Specifically, the health and state of the bond device, its slaves and current performance settings. Lets take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you recall from the network setup step, we made &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; the primary interface and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; the backup interface for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;. Indeed, we can see that these two interfaces are indeed slaved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The data here is in three sections:&lt;br /&gt;
&lt;br /&gt;
* The first section shows the state of the overall bond. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that we&#039;re using the &amp;quot;Active/Backup&amp;quot; bonding mode, that the currently active interface is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will always be used when both interfaces are healthy, though it will wait two minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120,000 ms&amp;lt;/span&amp;gt;) after &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; returns before it will be used. It also tells us that it will manually check for a link on the slaved interfaces every 100 ms.&lt;br /&gt;
&lt;br /&gt;
The next two sections cover the two slaved interfaces:&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the link (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;) is up and running at 1000 Mbps in full duplex mode. It shows us that it has not seen any failures in this interface since the bond was last started. It also shows us the interfaces real [[MAC]] address. This is important because, from the point of view of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ip addr&amp;lt;/span&amp;gt;, both slaved interfaces will &#039;&#039;appear&#039;&#039; to have the same MAC address (which depends on the currently active interface). This is a trick done in active-backup (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) bonding to speed up fail-over. The queue ID is used in other bonding modes for routing traffic down certain slaves when possible, we can ignore it here.&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; information is more or less the same as the first. This is expected because, usually, the hardware is the same. The only expected differences are the device name and MAC address, of course.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/etc/init.d/drbd status&#039; ===&lt;br /&gt;
&lt;br /&gt;
Earlier, we looked at another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; in order to watch the state of our DRBD resources. There is another way we can monitor DRBD using its initialization script. We&#039;ll use that method here.&lt;br /&gt;
&lt;br /&gt;
Lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will notice that the output is almost exactly the same as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt;&#039;s output, but formatted a little nicer. &lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;cman_tool nodes&#039; ===&lt;br /&gt;
&lt;br /&gt;
This is a more specific &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; call than we&#039;ve used in the past. Before, we called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; to get a broad overview of the cluster&#039;s state. It can be used in many ways to get more information about specific about the cluster. &lt;br /&gt;
&lt;br /&gt;
If you recall, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; would show us the simple sum of nodes in the cluster; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt;. If we want to know more about the nodes, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;. Lets see what that looks like on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    332   2013-11-27 14:11:01  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    340   2013-11-27 14:11:02  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Slightly more informative.&lt;br /&gt;
&lt;br /&gt;
== Network Testing Terminal Layout ==&lt;br /&gt;
&lt;br /&gt;
If you have a decent resolution monitor (or multiple monitors), you should be able to open 18 terminals at once. This is how many are needed to run ping floods, watch the bond status files, watch the system logs, watch DRBD and watch cluster membership all at the same time. This configuration makes it very easy to keep a near real-time, complete view of all network components.&lt;br /&gt;
&lt;br /&gt;
Personally, I have a 1920 x 1080 screen, which is pretty typical these days. I use a 9-point monospace font in my gnome terminals and I disable the menu bar. With that, the layout below fits nicely;&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node_el6-tutorial_network-test_terminal-layout_02.png|thumb|center|1000px|Terminal layout used for HA network testing; Calls running.]]&lt;br /&gt;
&lt;br /&gt;
The details of that are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Terminal layout for monitoring during network testing.&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The actual commands we will use are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this, we can keep a real-time overview of the status of all network, drbd and cluster components for both nodes. It may take a little bit to setup, but it will make the following network failure and recovery tests much easier to keep track of. Most importantly, it will allow you to quickly see if any of the tests fail.&lt;br /&gt;
&lt;br /&gt;
== How to Know if the Tests Passed ==&lt;br /&gt;
&lt;br /&gt;
Well, the most obvious answer to this question is if the cluster stack blows up or not.&lt;br /&gt;
&lt;br /&gt;
We can be a little more subtle than that though.&lt;br /&gt;
&lt;br /&gt;
We will be watching for:&lt;br /&gt;
&lt;br /&gt;
* Bonds not failing over to or back from their backup links when the primary link fails.&lt;br /&gt;
* More than 20 or 30 lost packets across each/all effected bonds fail over or back. Keep in mind that this may sound like a lot of dropped packets, but we&#039;re flooding the network with as many pings as the hardware can push out, so 20 to 30 lost packets is actually very low packet loss.&lt;br /&gt;
* Corosync declaring the peer node lost and cluster membership changing / node fencing.&lt;br /&gt;
* DRBD losing connection to the peer / node fencing.&lt;br /&gt;
&lt;br /&gt;
== Breaking things! ==&lt;br /&gt;
&lt;br /&gt;
To document the testing of all failure conditions would add substantially to this tutorial and not add much value.&lt;br /&gt;
&lt;br /&gt;
So instead we will look at sample failures to see what to expect. You can then use them as references for your own testing.&lt;br /&gt;
&lt;br /&gt;
=== Failing a Bond&#039;s Primary Interface ===&lt;br /&gt;
&lt;br /&gt;
For this test, we will pull &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&#039;s network cable out of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This will trigger a fail-over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; which we will see in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; file and we will see messages about the failure in the system logs. Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s ping flood on the [[BCN]] will show a number of dropped packets.&lt;br /&gt;
&lt;br /&gt;
Assuming all goes well, corosync should not report any errors or react in any way to this test.&lt;br /&gt;
&lt;br /&gt;
So pull the cable and see if you&#039;re result match ours.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; became the active link and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; shows as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lets look at the ping flood;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly in-line with what we expected! If you look at the cluster membership and system logs, you will see that nothing was noticed outside of the bonding driver!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s plug the cable back in.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll notice that the bond driver will see the link return, change the state of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt; and nothing more will happen at first. After two minutes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; will switch back to using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and there will be another short burst of dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: going back&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for two minutes.&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at the dropped packets when the switch-back happened;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; didn&#039;t lose a packet and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; only lost a few? The switch was controlled, so no time was lost detecting the link failure.&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t be tempted to test only a few links!}}&lt;br /&gt;
&lt;br /&gt;
Repeat this test for all network connections on both nodes. Ensure that each links fails and recovers in the same way. We have a complex network and tests like this help find cabling and configuration issues. These tests have value beyond simply verifying fail-over and recovery.&lt;br /&gt;
&lt;br /&gt;
=== Failing the Network Switches ===&lt;br /&gt;
&lt;br /&gt;
Failing and then recovering the primary switch tests a few things:&lt;br /&gt;
&lt;br /&gt;
* Can all the bonds fail over to their backup links at the same time?&lt;br /&gt;
* Does the switch handle the loss of the primary switch in the stack properly?&lt;br /&gt;
* Does the switch interrupt traffic when it recovers?&lt;br /&gt;
&lt;br /&gt;
Even if you don&#039;t have a stacked switch, this test is still very important. We set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; to two minutes, but there is a chance that is still not long enough for your switch. This test will expose issues like this.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you don&#039;t have port trunking, be sure to switch your workstation&#039;s links or network uplink from the primary to backup switch before proceeding. This will ensure you can monitor the nodes during the test without interruption.}}&lt;br /&gt;
&lt;br /&gt;
Before we start, lets take a look at the current view of thing;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we will pull the power cable out of the primary switch and wait for things to settle.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
..................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! All of the bonds failed over to their backup interfaces and the cluster stays stable. Both cluster membership and DRBD continued without interruption!&lt;br /&gt;
&lt;br /&gt;
Now to test recover of the primary switch. If everything was configured properly, the switch will recover, the primary links will wait two minutes before recovering and the actual cut-over will complete with few dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:53 an-c05n02 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Some switches will show a link and then drop the connection a few times as they boot. If your switch is like this, you will see this reflected in the system logs. This should be fine because of the two minute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; value.}}&lt;br /&gt;
&lt;br /&gt;
Now repeat this test by failing and recovering the backup switch. Do not assume that, because the first switch cycled successfully, the second switch will as well. A bad configuration can easily allow the primary switch to pass this test while the secondary switch would cause a failure.&lt;br /&gt;
&lt;br /&gt;
With the second switch test complete, we can be confident that the networking infrastructure is totally fault tolerant.&lt;br /&gt;
&lt;br /&gt;
= Provisioning Virtual Machines =&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re getting to the purpose of our cluster; Provision virtual machines!&lt;br /&gt;
&lt;br /&gt;
We have two steps left:&lt;br /&gt;
&lt;br /&gt;
* Provision our VMs.&lt;br /&gt;
* Add the VMs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Provisioning&amp;quot; a virtual machine simple means to create it; Assign a collection of emulated hardware, connected to physical devices, to a given virtual machine and begin the process of installing the operating system on it. This tutorial is more about clustering than it is about virtual machine administration, so some experience with managing virtual machines has to be assumed. If you need to brush up, here are some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM project&#039;s How-Tos]&lt;br /&gt;
* [http://kvm.et.redhat.com/page/FAQ KVM project&#039;s FAQ]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Hypervisor_Deployment_Guide/index.html Red Hat&#039;s Hypervisor Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html Red Hat&#039;s Virtualization Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html Red Hat&#039;s Virtualization Administration]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html Red Hat&#039;s Virtualization Host Configuration and Guest Installation Guide]&lt;br /&gt;
&lt;br /&gt;
When you feel comfortable, proceed.&lt;br /&gt;
&lt;br /&gt;
== Before We Begin - Building a Dashboard ==&lt;br /&gt;
&lt;br /&gt;
[[Image:An-cdb-splash.png|thumb|right|400px|[[AN!CDB]] dashboard with server &amp;quot;monitor&amp;quot; displayed.]]&lt;br /&gt;
&lt;br /&gt;
One of the biggest advances since the initial tutorial was created was the creation of the [[AN!CDB - Cluster Dashboard]].&lt;br /&gt;
&lt;br /&gt;
It provides a very easy to use web-based user interface for building, modifying and removing servers on the &#039;&#039;Anvil!&#039;&#039; platform. &lt;br /&gt;
&lt;br /&gt;
It also provides a &amp;quot;[https://en.wikipedia.org/wiki/KVM_switch KVM switch]&amp;quot; style access to the servers you create. This gives you direct access to your servers, just as if you have a physical keyboard, mouse and monitor plugged into a physical server. You can watch the server boot from the virtual, boot into recovery consoles or off of repair &amp;quot;DVDs&amp;quot; and so forth.&lt;br /&gt;
&lt;br /&gt;
The link above covers the dashboard and its use, and includes a link to an installer showing how to setup a dashboard for yourself. Now is a good time to take a break from this tutorial and setup that dashboard.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to build a dashboard, that is fine. It is not required in this tutorial.&lt;br /&gt;
&lt;br /&gt;
If you decide not to though, you will now need to setup &amp;quot;Virtual Machine Manager&amp;quot; on your (Linux) computer in order to get access to the servers we are about to build. You will need this in order to walk through the installation process for your new servers. Of course, once the install is complete, you can switch to another, traditional form of remote access like [[RDP]] on windows servers or [[ssh]] on *nix servers.&lt;br /&gt;
&lt;br /&gt;
If you want to use &amp;quot;Virtual Machine Manager&amp;quot;, look for a package from your distribution package manager with a name like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;. Once it is installed, add the connections to your &#039;&#039;Anvil!&#039;&#039; nodes. Once that&#039;s done, you&#039;re ready to proceed to the next section!&lt;br /&gt;
&lt;br /&gt;
== A Note on the Following Server Installations ==&lt;br /&gt;
&lt;br /&gt;
We wanted to show as many different server installations as possible. Obviously, it&#039;s unlikely that you will want or need all of the operating we&#039;re about to install. Please feel free to skip over the installation of servers that are not interesting to you.&lt;br /&gt;
&lt;br /&gt;
== Provision Planning ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to spend a lot of time provisioning &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. If you plan to skip it, please be sure to refer back to it if you run into questions on a later install.}}&lt;br /&gt;
&lt;br /&gt;
If you recall, when we were planning out our partitions, we&#039;ve already chosen which servers will draw from which storage pools and how big their &amp;quot;hard drives&amp;quot; will be. The last thing to consider is RAM allocation. The servers we&#039;re using to write this tutorial are a little modest in the RAM department with only 24 [[GiB]] of RAM. We need to subtract at least 2 GiB for the host nodes, leaving us with a total of 22 GiB. &lt;br /&gt;
&lt;br /&gt;
That needs to be divided up amongst our eight servers. Now, nothing says you have to use it all, of course. It&#039;s perfectly fine to leave some RAM unallocated for future use. This is really up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s put together a table with the RAM we plan to allocate and summarizing the logical volume we&#039;re going to create for each server. The [[LV]]s will be named after the server they&#039;ll be assigned to with the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_0&amp;lt;/span&amp;gt;. Later, if we add a second &amp;quot;hard drive&amp;quot; to a server, it will have the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_1&amp;lt;/span&amp;gt; and so on.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Server&lt;br /&gt;
!RAM (GiB)&lt;br /&gt;
!Storage Pool (VG)&lt;br /&gt;
!LV name&lt;br /&gt;
!LV size&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you plan to set static IP addresses for your servers, now would be a good time to select them, too. It&#039;s not needed, of course, but it certainly can make things easier to have all the details in one place.&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Not to spoil the surprise, but if you plan to not follow this tutorial exactly, please be sure to read [[#Calculating_Free_Space.3B_Converting_GiB_to_MB|the notes in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris100&amp;lt;/span&amp;gt; section]].}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm01-win2008 ==&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_08.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_Svr_2008_R2_64Bit_SP1.ISO root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
  3166720000 100%   65.53MB/s    0:00:46 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3167106674 bytes  received 31 bytes  59198256.17 bytes/sec&lt;br /&gt;
total size is 3166720000  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; to grab the latest version from [https://alt.fedoraproject.org/pub/alt/virtio-win/ their website]. At the time of this writing, the &amp;quot;[https://alt.fedoraproject.org/pub/alt/virtio-win/stable/ stable]&amp;quot; version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0.1-74&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Being conservative when it comes to servers, my preference is to use the &amp;quot;stable&amp;quot; version.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-04-28 18:01:10--  https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
Resolving alt.fedoraproject.org (alt.fedoraproject.org)... 209.132.181.27, 209.132.181.23, 209.132.181.24, ...&lt;br /&gt;
Connecting to alt.fedoraproject.org (alt.fedoraproject.org)|209.132.181.27|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 61272064 (58M) [application/octet-stream]&lt;br /&gt;
Saving to: ‘virtio-win-0.1-74.iso’&lt;br /&gt;
&lt;br /&gt;
100%[======================================&amp;gt;] 61,272,064  5.23MB/s   in 15s    &lt;br /&gt;
&lt;br /&gt;
2014-04-28 18:01:26 (3.86 MB/s) - ‘virtio-win-0.1-74.iso’ saved [61272064/61272064]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 3.1G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov  2 10:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--  1 root root  59M Nov 20 15:08 virtio-win-0.1-74.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm01-win2008_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm01-win2008_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm01-win2008_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm01-win2008_0&lt;br /&gt;
  LV Name                vm01-win2008_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                bT0zon-H2LN-0jmi-refA-J0QX-zHjT-nEY7YY&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-02 11:04:44 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm01-win2008.sh&lt;br /&gt;
chmod 755 /shared/provision/vm01-win2008.sh &lt;br /&gt;
vim /shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm01-win2008 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s break it down;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--connect qemu:///system&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; to use the [[QEMU]] hardware emulator (as opposed to [[Xen]], for example) and to install the server on to local node.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the name of the server. It is the name we will use in the cluster configuration and whenever we use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--arch x86_64&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the emulated CPU&#039;s architecture to 64-[[bit]]. This can be used even when you plan to install a 32-bit [[OS]], but not the other way around, of course.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--vcpus 2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the number of CPU cores to allocate to this server. Here, we&#039;re allocating two CPUs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|We need to make the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers available during the install process. This command is similar to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom&amp;lt;/span&amp;gt; above, but crafted as if it was a disk drive with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device=cdrom&amp;lt;/span&amp;gt; switch. This helps make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cdrom&amp;lt;/span&amp;gt; above is used as the boot drive. Also note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; option. This is used because, normally, if the ISO was &amp;quot;inserted&amp;quot; into another server&#039;s cd-rom, it would refuse to work here. The nature of ISOs ensures they&#039;re read-only, so we can safely force two or more servers to use the same ISO at the same time.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tweaks the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;&#039;s initial method of running and tunes the hypervisor to try and get the best performance for the server. There are many possible values here for many, many different operating systems. If you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install --os-variant list&amp;lt;/span&amp;gt; on your node, you will get a full list of available operating systems. If you can&#039;t find your exact operating system, select the one that is the closest match.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor that we want to create a network card using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; &amp;quot;hardware&amp;quot; and that we want it plugged into the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge. We only need one network card, but if you wanted two or more, simply repeat this command. If you create two or more bridges, you can have different network devices connect to different bridges.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finally, this tells the hypervisor to use the [http://www.spice-space.org/ spice] emulated video card. It is a bit simplistic to call it simply a &amp;quot;graphics card&amp;quot;, but that&#039;s close enough for now. Given that this is the last line, we close off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command with a simple redirection to a log file. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm01-win2008&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_01.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_02.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN7\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_05.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_06.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_07.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm01-win2008_a_Highly_Available_Service|Making vm01-win2008 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm02-win2012 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_2012_R2_64-bit_Preview.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
  4128862208 100%   66.03MB/s    0:00:59 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 4129366322 bytes  received 31 bytes  65029391.39 bytes/sec&lt;br /&gt;
total size is 4128862208  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 6.9G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 11 11:28 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm02-win2012_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm02-win2012_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm02-win2012_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm02-win2012_0&lt;br /&gt;
  LV Name                vm02-win2012_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                Lnyg1f-kNNV-qjfn-P7X3-LxLw-1Uyh-dfNfL0&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n02.alteeve.ca, 2013-11-11 11:30:55 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm02-win2012.sh&lt;br /&gt;
chmod 755 /shared/provision/vm02-win2012.sh &lt;br /&gt;
vim /shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm02-win2012 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is also the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script. At the time of writing, there wasn&#039;t an entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2012&amp;lt;/span&amp;gt;, so we&#039;re using the closest match which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2k8&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm02-win2012&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm02-win2012_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm03-win7 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous two servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_7_Pro_SP1_64bit_OEM_English.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
  3321233408 100%   83.97MB/s    0:00:37 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3321638948 bytes  received 31 bytes  80039493.47 bytes/sec&lt;br /&gt;
total size is 3321233408  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 10G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 11:32 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm03-win7_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm03-win7_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm03-win7_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm03-win7_0&lt;br /&gt;
  LV Name                vm03-win7_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                vgdtEm-aOsU-hatQ-2PxO-BN1e-sGLM-J7NVcn&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 12:08:52 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm03-win7.sh&lt;br /&gt;
chmod 755 /shared/provision/vm03-win7.sh &lt;br /&gt;
vim /shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm03-win7 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm03-win7.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm03-win7&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm03-win7_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm04-win8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our last Microsoft operating system!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation media and our driver disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous three servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Win8.1_Enterprise_64-bit_eval.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
  3797866496 100%   62.02MB/s    0:00:58 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3798330205 bytes  received 31 bytes  60773283.78 bytes/sec&lt;br /&gt;
total size is 3797866496  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 14G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 18:12 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm04-win8_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm04-win8_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm04-win8_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm04-win8_0&lt;br /&gt;
  LV Name                vm04-win8_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                WZIGmp-xkyZ-Q6Qs-ovMP-qr1k-9xC2-PmbcUD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 18:13:53 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm04-win8.sh&lt;br /&gt;
chmod 755 /shared/provision/vm04-win8.sh &lt;br /&gt;
vim /shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm04-win8 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm04-win8.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm04-win8&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm04-win8_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm05-freebsd9 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our first non-Microsft OS!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[http://www.freebsd.org/ FreeBSD] is free software and can be downloaded directly from their website.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-18 15:48:09--  ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
           =&amp;gt; `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039;&lt;br /&gt;
Resolving ftp.freebsd.org... 204.152.184.73, 2001:4f8:0:2::e&lt;br /&gt;
Connecting to ftp.freebsd.org|204.152.184.73|:21... connected.&lt;br /&gt;
Logging in as anonymous ... Logged in!&lt;br /&gt;
==&amp;gt; SYST ... done.    ==&amp;gt; PWD ... done.&lt;br /&gt;
==&amp;gt; TYPE I ... done.  ==&amp;gt; CWD (1) /pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2 ... done.&lt;br /&gt;
==&amp;gt; SIZE FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... 2554132480&lt;br /&gt;
==&amp;gt; PASV ... done.    ==&amp;gt; RETR FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... done.&lt;br /&gt;
Length: 2554132480 (2.4G) (unauthoritative)&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================&amp;gt;] 2,554,132,480  465K/s   in 45m 9s  &lt;br /&gt;
&lt;br /&gt;
2013-11-18 16:33:19 (921 KB/s) - `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039; saved [2554132480]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 18 15:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 18 16:35 ..&lt;br /&gt;
-rw-r--r--. 1 root root 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm05-freebsd9_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm05-freebsd9_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm05-freebsd9_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm05-freebsd9_0&lt;br /&gt;
  LV Name                vm05-freebsd9_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                ioF6jU-pXEQ-wAhm-1zkB-LTDw-PQPG-1SPdkD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-18 16:41:30 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm05-freebsd9.sh&lt;br /&gt;
chmod 755 /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
vim /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm05-freebsd9 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso \&lt;br /&gt;
  --os-variant freebsd8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant freebsd8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running FreeBSD 8, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm05-freebsd9&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
The entire install process for FreeBSD is normal. It has native support for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so the virtual hard drive and network card will &amp;quot;just work&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_03.png|thumb|900px|center|The hard drive for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_04.png|thumb|900px|center|The network card for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is also found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
There is one trick with installing FreeBSD 9 though. The optimization was for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;freebsd8&amp;lt;/span&amp;gt; and one down-side is that FreeBSD won&#039;t reboot automatically after the install finishes and tries to reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; server stays off after the initial install completes.]]&lt;br /&gt;
&lt;br /&gt;
Obviously, the server is not yet in the cluster so we can&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e&amp;lt;/span&amp;gt;. So instead, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to boot it up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_06.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is back up and running.]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm05-freebsd9_a_Highly_Available_Service|Making vm05-freebsd9 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm06-solaris11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Oracle&#039;s Solaris operating system is a commercial [[UNIX]] product. You can download an [http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html?ssSourceSiteId=ocomen evaluation version] from their website. We&#039;ll be using the [[x86]] version.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/sol-11-1111-text-x86.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
sol-11-1111-text-x86.iso&lt;br /&gt;
   450799616 100%  108.12MB/s    0:00:03 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 450854737 bytes  received 31 bytes  69362272.00 bytes/sec&lt;br /&gt;
total size is 450799616  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 17G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 19 17:11 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 19 17:04 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 root root 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n02_vg0&amp;quot; has insufficient free space (23506 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What&#039;s this?!&lt;br /&gt;
&lt;br /&gt;
=== Calculating Free Space; Converting GiB to MB ===&lt;br /&gt;
&lt;br /&gt;
What we have here is, despite our efforts to mitigate the [[GiB]] versus [[GB]] issue, we ran out of space.&lt;br /&gt;
&lt;br /&gt;
This highlights the need for careful design planning. We weren&#039;t careful enough, so now we have to deal with the resources we have left. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s figure out how much space is left in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; volume group.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  3&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                2&lt;br /&gt;
  Open LV               2&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       50000 / 195.31 GiB&lt;br /&gt;
  Free  PE / Size       23506 / 91.82 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can see that there is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]] left (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; &amp;quot;extents&amp;quot; which are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4.00&amp;lt;/span&amp;gt; [[MiB]] each).&lt;br /&gt;
&lt;br /&gt;
Knowing this, there are a few ways we could proceed.&lt;br /&gt;
&lt;br /&gt;
# Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l xx&amp;lt;/span&amp;gt; syntax, which says to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; extents. We have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; extents free, so we could just do &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 23506&amp;lt;/span&amp;gt;&lt;br /&gt;
# Use the &amp;quot;percentage free&amp;quot; method of defining free space. That would be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; which simply uses all remaining free space.&lt;br /&gt;
# Calculate the number of [[MB]] in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]].&lt;br /&gt;
&lt;br /&gt;
The first two are self-evident, so let&#039;s look the 3rd option because math is awesome!&lt;br /&gt;
&lt;br /&gt;
To do this, we need to convert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; GiB into bytes. We can get close by simply doing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(91.82 * (1024 * 1024 * 1024))&amp;lt;/span&amp;gt; (x GiB -&amp;gt; MiB -&amp;gt; KiB = bytes), but this gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590,974,279.68&amp;lt;/span&amp;gt;... The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.82&amp;lt;/span&amp;gt; is not precise enough. If we divide this by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; (number of bytes in a [[MB]]), we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98590.97&amp;lt;/span&amp;gt;. Round down to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we take the extent size times free extent count, we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;((23506 * 4) * (1024 * 1024))&amp;lt;/span&amp;gt; (extents free * extent size) converted to MiB -&amp;gt; KiB = bytes) which gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591309824&amp;lt;/span&amp;gt;. Divided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; to get [[MB]] and we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591.30&amp;lt;/span&amp;gt;, rounded down we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,591&amp;lt;/span&amp;gt; [[MB]].&lt;br /&gt;
&lt;br /&gt;
Both methods are pretty darn close, and would end up with the same number of extents used. So now, if we wanted to, we could use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -L 98591M&amp;lt;/span&amp;gt; to keep in line with our previous usage of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
That was fun!&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll be boring and practical and use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; because it&#039;s safe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm06-solaris11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
  LV Name                vm06-solaris11_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                3BQgmu-QHca-0XtE-PRQB-btQc-LmdF-rTVyi5&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-19 15:37:29 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                91.82 GiB&lt;br /&gt;
  Current LE             23506&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we&#039;re a little smaller than we originally planned. A good and simple way to avoid this problem is to plan your storage to have more free space than you think you will need. Storage space is, relatively speaking, fairly cheap.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Solaris 11 does not support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so we will be emulating a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;scsi&amp;lt;/span&amp;gt; storage controller and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e1000&amp;lt;/span&amp;gt; (Intel 1 Gbps) network card.}}&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm06-solaris11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm06-solaris11.sh &lt;br /&gt;
vim /shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm06-solaris11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/sol-11-1111-text-x86.iso \&lt;br /&gt;
  --os-variant solaris10 \&lt;br /&gt;
  --network bridge=vbr2,model=e1000 \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm06-solaris11_0 \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/sol-11-1111-text-x86.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant solaris10&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Solaris 10, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=e1000&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to emulate an Intel gigabit network controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm06-solaris11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off, but with errors!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; begins, but with (harmless) errors.]]&lt;br /&gt;
&lt;br /&gt;
By default, Solaris tries to use the [[uhci]] USB driver which doesn&#039;t work. It generates the following error;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received&lt;br /&gt;
, this USB UHCI host controller is unusable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is harmless and can be safely ignored. Once the install is complete, we will disabled [[uhci]] by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rem_drv uhci&amp;lt;/span&amp;gt; in the server.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_03.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_04.png|thumb|900px|center|Installation summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm06-solaris11_a_Highly_Available_Service|Making vm06-solaris11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm07-rhel6 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux operating system is a commercial [[Linux]] product. You can download an [http://www.redhat.com/products/enterprise-linux/server/download.html evaluation version] from their website. If you prefer a community-supported version, the [http://www.centos.org/modules/tinycontent/index.php?id=30 CentOS] project is a binary-compatible, free-as-in-beer operating system that you can use here instead.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/rhel-server-6.4-x86_64-dvd.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
  3720347648 100%   65.25MB/s    0:00:54 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3720801890 bytes  received 31 bytes  64709598.63 bytes/sec&lt;br /&gt;
total size is 3720347648  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 20G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 20 16:54 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 20 16:50 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm07-rhel6_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm07-rhel6_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
  LV Name                vm07-rhel6_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                wBNRrK-N8xL-nJm4-lM0y-a858-ydgC-d0UU04&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-20 16:56:22 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm07-rhel6.sh&lt;br /&gt;
chmod 755 /shared/provision/vm07-rhel6.sh &lt;br /&gt;
vim /shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm07-rhel6 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso \&lt;br /&gt;
  --os-variant rhel6 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running RHEL 6.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm07-rhel6&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
It&#039;s no surprise that [[RHEL6]] works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers. Red Hat did write them, after all.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_04.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_05.png|thumb|900px|center|Performing a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Desktop&amp;lt;/span&amp;gt; install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_06.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_07.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Desktop&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm07-rhel6_a_Highly_Available_Service|Making vm07-rhel6 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
=== Making sure RHEL 6 reboots after panic&#039;ing ===&lt;br /&gt;
&lt;br /&gt;
It used to be that [[RHEL]] would halt all CPU activity if the kernel panic&#039;ed. This lack of activity could be used to detect a failure in the guest which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; could use to trigger recovery of the guest. Now though, RHEL 6 keeps one of the virtual CPUs after after panic&#039;ing, which the node can not differentiate from a normal load.&lt;br /&gt;
&lt;br /&gt;
To ensure that your RHEL guest recovers after panic&#039;ing, you will need to append the following to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysctl.conf&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make the server reboot within 5 seconds of a panic.&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make the change take immediate effect, run the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 5 &amp;gt; /proc/sys/kernel/panic&lt;br /&gt;
sysctl -e kernel.panic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify that the server will reboot post panic, you can send the following command to your server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This command will immediately and totally halt your server. It will not recover until it reboots.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If things worked properly, the server will reboot five seconds after issuing this command.&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm08-sles11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
The last server in our tutorial!&lt;br /&gt;
&lt;br /&gt;
SUSE&#039;s Linux Enterprise Server is a commercial [[Linux]] product. You can download an [https://www.suse.com/products/server/eval.html evaluation version] from their website.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/SLES-11-SP3-DVD-x86_64-GM-DVD* root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
  3362783232 100%   60.94MB/s    0:00:52 (xfer#1, to-check=1/2)&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
  5311318016 100%   73.66MB/s    0:01:08 (xfer#2, to-check=0/2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 28G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 21 01:19 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 21 01:12 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-------. 1 1000 1000 3.2G Oct 30 17:52 SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
-rw-------. 1 1000 1000 5.0G Oct 30 18:25 SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n01_vg0&amp;quot; has insufficient free space (19033 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve run into the same problem that we hit with [[#Calculating_Free_Space.3B_Converting_GiB_to_MB]]. So we&#039;ve learned our lesson and will switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; to use up the free space that remains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm08-sles11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
  LV Name                vm08-sles11_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                9J9eO1-BhTe-Ee8X-zP5u-UY5S-Y7AB-Ql0hhI&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-21 01:23:16 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                74.35 GiB&lt;br /&gt;
  Current LE             19033&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our compounding error in planning has reduced this server&#039;s planned space down to a mere &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;74.35&amp;lt;/span&amp;gt; [[GiB]]!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm08-sles11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm08-sles11.sh &lt;br /&gt;
vim /shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm08-sles11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso \&lt;br /&gt;
  --disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force \&lt;br /&gt;
  --os-variant sles11 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|SLES 11 has two install DVDs. This tells the hypervisor to create a second DVD drive and to insert &#039;Disc 2&#039; into it.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running SLES 11.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm08-sles11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
SLES 11 works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_04.png|thumb|900px|center|Install summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_05.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_08.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Physical Machine&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
That is all eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm08-sles11_a_Highly_Available_Service|Making vm08-sles11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
Eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
= Making Our VMs Highly Available Cluster Services =&lt;br /&gt;
&lt;br /&gt;
We&#039;re ready to start the final step; Making our VMs highly available cluster services! This involves two main steps:&lt;br /&gt;
&lt;br /&gt;
* Creating two new, ordered fail-over Domains; One with each node as the highest priority.&lt;br /&gt;
* Adding our VMs as services, one is each new fail-over domain.&lt;br /&gt;
&lt;br /&gt;
== Creating the Ordered Fail-Over Domains ==&lt;br /&gt;
&lt;br /&gt;
We have planned for two VMs, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-dev&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-web&amp;lt;/span&amp;gt; to normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-db&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-ms&amp;lt;/span&amp;gt; to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Of course, should one of the nodes fail, the lost VMs will be restarted on the surviving node. For this, we will use an ordered fail-over domain.&lt;br /&gt;
&lt;br /&gt;
The idea here is that each new fail-over domain will have one node with a higher priority than the other. That is, one will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the highest priority and the other will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as the highest. This way, VMs that we want to normally run on a given node will be added to the matching fail-over domain.&lt;br /&gt;
&lt;br /&gt;
{{note|1=With 2-node clusters like ours, ordering is arguably useless. It&#039;s used here more to introduce the concepts rather than providing any real benefit. If you want to make production clusters unordered, you can. Just remember to run the VMs on the appropriate nodes when both are on-line.}}&lt;br /&gt;
&lt;br /&gt;
Here are the two new domains we will create in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/cluster/cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			...&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two major pieces of the puzzle here are the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority=&amp;quot;x&amp;quot;&amp;lt;/span&amp;gt; attributes. The former tells the cluster that there is a preference for which node should be used when both are available. The later, which is the difference between the two new domains, tells the cluster which specific node is preferred.&lt;br /&gt;
&lt;br /&gt;
The first of the new fail-over domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt;. Any service placed in this domain will prefer to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, as its priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; is higher than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. The second of the new domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; which reverses the preference, making &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; preferred over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; with the new domain, and the version updated to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s validate it now, but we won&#039;t bother to push it out just yet.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, now to create the new VM services!&lt;br /&gt;
&lt;br /&gt;
== Making vm01-win2008 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you jumped straight here after provisioning the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server, please [[#Making_Our_VMs_Highly_Available_Cluster_Services|jump back]] and be sure you&#039;ve created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; fail-over domains.}}&lt;br /&gt;
&lt;br /&gt;
The final piece of the puzzle, and the whole purpose of this exercise is in sight!&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm01-win2008|vm01-win2008]]&amp;lt;/span&amp;gt;, as it was the first server we provisioned.&lt;br /&gt;
&lt;br /&gt;
There is a special resource agent for virtual machines which use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:&amp;lt;/span&amp;gt; service prefix in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. We will need to create one of these services for each server that will be managed by the &#039;&#039;Anvil!&#039;&#039; platform.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm01-win2008 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
In order for the cluster to manage a server, it must know where to find the &amp;quot;definition&amp;quot; file that describes the virtual machine and its hardware. When the server was created with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt;, it saved this definition file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/libvirt/qemu/vm01-win2008.xml&amp;lt;/span&amp;gt;. If this was a single-host setup, that would be fine.&lt;br /&gt;
&lt;br /&gt;
In our case though, there are two reasons we need to move this.&lt;br /&gt;
&lt;br /&gt;
# We want both nodes to be able to see the definition file and we want a single place to make updates.&lt;br /&gt;
# Normal &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools are not cluster-aware, so we don&#039;t want them to see our server except when it is running.&lt;br /&gt;
&lt;br /&gt;
To address the first issue, we&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to write out the definition file for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. We&#039;ll use a simple bash redirection to write this to a file on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; where both nodes will be able to read it. Also, being stored on our GFS2 partition, any change made to the file will immediately be seen by both nodes.&lt;br /&gt;
&lt;br /&gt;
To address the second issue, we will &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;&amp;quot; the server. This effectively deletes it from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;, so when a server is off (or running elsewhere), tools like &amp;quot;Virtual Machine Manager&amp;quot; will not see it. This helps avoid problems like a user, unaware that the server is running on another node, starting it on the first. The cluster will still be able to start and stop the server just fine, so there is no worry about losing your new server. The cluster tools, being cluster-aware obviously, are smart enough to not try and boot a server on one node when it&#039;s already running on another.&lt;br /&gt;
&lt;br /&gt;
So the first step is to dump the server&#039;s definition file.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tool, to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--all&amp;lt;/span&amp;gt; option is needed to show us servers that are defined but powered off. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh list&amp;lt;/span&amp;gt; only shows running servers, so it&#039;s a good habit to always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--list&amp;lt;/span&amp;gt; to be sure you have a complete view of your system.&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is running. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots. It changes frequently and you need not worry about it. its principal purpose to be unique among running servers.&lt;br /&gt;
&lt;br /&gt;
So before we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt; the server, we first need to record its definition. We can do that with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh dumpxml $vm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain type=&#039;kvm&#039; id=&#039;1&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;vm01-win2008&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;uuid&amp;gt;d06381fc-8033-9768-3a28-b751bcc00716&amp;lt;/uuid&amp;gt;&lt;br /&gt;
  &amp;lt;memory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/memory&amp;gt;&lt;br /&gt;
  &amp;lt;currentMemory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/currentMemory&amp;gt;&lt;br /&gt;
  &amp;lt;vcpu placement=&#039;static&#039;&amp;gt;2&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch=&#039;x86_64&#039; machine=&#039;rhel6.4.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;boot dev=&#039;hd&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
  &amp;lt;features&amp;gt;&lt;br /&gt;
    &amp;lt;acpi/&amp;gt;&lt;br /&gt;
    &amp;lt;apic/&amp;gt;&lt;br /&gt;
    &amp;lt;pae/&amp;gt;&lt;br /&gt;
  &amp;lt;/features&amp;gt;&lt;br /&gt;
  &amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;timer name=&#039;rtc&#039; tickpolicy=&#039;catchup&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/clock&amp;gt;&lt;br /&gt;
  &amp;lt;on_poweroff&amp;gt;destroy&amp;lt;/on_poweroff&amp;gt;&lt;br /&gt;
  &amp;lt;on_reboot&amp;gt;restart&amp;lt;/on_reboot&amp;gt;&lt;br /&gt;
  &amp;lt;on_crash&amp;gt;restart&amp;lt;/on_crash&amp;gt;&lt;br /&gt;
  &amp;lt;devices&amp;gt;&lt;br /&gt;
    &amp;lt;emulator&amp;gt;/usr/libexec/qemu-kvm&amp;lt;/emulator&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hda&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-0-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;0&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/virtio-win-0.1-52.iso&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hdc&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-1-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;1&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;block&#039; device=&#039;disk&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039; cache=&#039;none&#039; io=&#039;native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&#039;/dev/an-c05n01_vg0/vm01-win2008_0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vda&#039; bus=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;virtio-disk0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x04&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;usb&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;usb0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;ide&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;interface type=&#039;bridge&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;mac address=&#039;52:54:00:8e:67:32&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source bridge=&#039;vbr2&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vnet0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;net0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x03&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/interface&amp;gt;&lt;br /&gt;
    &amp;lt;serial type=&#039;pty&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/serial&amp;gt;&lt;br /&gt;
    &amp;lt;console type=&#039;pty&#039; tty=&#039;/dev/pts/3&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target type=&#039;serial&#039; port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/console&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;tablet&#039; bus=&#039;usb&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;input0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;graphics type=&#039;spice&#039; port=&#039;5900&#039; autoport=&#039;yes&#039; listen=&#039;127.0.0.1&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;listen type=&#039;address&#039; address=&#039;127.0.0.1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/graphics&amp;gt;&lt;br /&gt;
    &amp;lt;video&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;qxl&#039; ram=&#039;65536&#039; vram=&#039;65536&#039; heads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;video0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x02&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/video&amp;gt;&lt;br /&gt;
    &amp;lt;memballoon model=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;balloon0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x05&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/memballoon&amp;gt;&lt;br /&gt;
  &amp;lt;/devices&amp;gt;&lt;br /&gt;
  &amp;lt;seclabel type=&#039;dynamic&#039; model=&#039;selinux&#039; relabel=&#039;yes&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;unconfined_u:system_r:svirt_t:s0:c68,c367&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;imagelabel&amp;gt;unconfined_u:object_r:svirt_image_t:s0:c68,c367&amp;lt;/imagelabel&amp;gt;&lt;br /&gt;
  &amp;lt;/seclabel&amp;gt;&lt;br /&gt;
&amp;lt;/domain&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is your server&#039;s hardware!&lt;br /&gt;
&lt;br /&gt;
Notice how it shows the mounted cd-roms? You can also see the [[MAC]] address assigned to the network card, the RAM and CPU cores allocated and other details. Pretty awesome!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s re-run the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dumpxml&amp;lt;/span&amp;gt; file, but this time, we&#039;ll use a bash redirection to save the output to a file in our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definition&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008 &amp;gt; /shared/definitions/vm01-win2008.xml&lt;br /&gt;
ls -lah /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 11:54 /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now, as we will see in a moment, the cluster will be able to use this to start, stop, migrate and recover the server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm01-win2008.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm01-win2008 Service ===&lt;br /&gt;
&lt;br /&gt;
As we discussed earlier, we are now going to create a new service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
&lt;br /&gt;
This element will have a child element that tells the cluster to give servers up to 30 minutes to shut down. Normally, the cluster will wait for two minutes after calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; against a server. For privacy reasons, there is not way for the cluster to know what is happening inside the server. So after the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; timeout expires, the node is considered failed and is forced off. The problem is that windows often queues updates to be installed during the shut down, so it can take a very long time to turn off. We don&#039;t want to risk &amp;quot;pulling the plug&amp;quot; on a windows machine that is being updated, of course, so we will tell the cluster to be very patient.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is a good idea to set your windows servers to download updates but not install them until an admin says to do so. This way, there is less chance of problem because the admin can do a reboot to install the updates during a maintenance window. It also avoids false-decleration of server failure.}}&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12&amp;lt;/span&amp;gt; and take a look at the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at each of the attributes now;&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;&lt;br /&gt;
|This must match the name we created the VM with (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name ...&amp;lt;/span&amp;gt; value when we provisioned the VM). In this case, that is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. This is the name that will be passed to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm.sh&amp;lt;/span&amp;gt; resource agent when managing this service, and it will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;name&amp;gt;.xml&amp;lt;/span&amp;gt; used when looking under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path=...&amp;lt;/span&amp;gt; for the VM&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster to manage the VM using the given fail-over domain. We built &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage pool, so this server will be assigned to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; domain. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster where to look for the server&#039;s definition file. &#039;&#039;&#039;Do not&#039;&#039;&#039; include the actual file name, just the path. The cluster takes this path, appends the server&#039;s name and then appends &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.xml&amp;lt;/span&amp;gt; in order to find the server&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster &#039;&#039;not&#039;&#039; to start the server automatically. This is needed because, if this was &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the cluster will try to start the server and the storage at the same time. It takes a few moments for the storage to start, and by the time it did, the server service would have failed.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt;&lt;br /&gt;
|As we saw with the storage services, we want to ensure that this service &#039;&#039;&#039;is not&#039;&#039;&#039; exclusive. If it were, starting the VM would stop storage/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and prevent other servers from running on the node. This would be a bad thing™.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the &#039;&#039;Anvil!&#039;&#039; what to do when the service fails. We are setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt;, so the cluster will try to restart the server on the same node it was on when it failed. The alternative is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;, which would instead start the server on another node. More about this next.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt;&lt;br /&gt;
|When a server fails, it is possible that it is because there is a subtle problem on the host node itself. So this attribute allows us to set a limit on how many times a server will be allowed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt; before giving up and switching to a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy. We&#039;re setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;, which means that if a server is restarted twice, the third failure will trigger a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt;&lt;br /&gt;
|If we let the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; failure count increment indefinitely, than a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy becomes inevitable. To account for this, we use this attribute to tell the &#039;&#039;Anvil!&#039;&#039; to &amp;quot;forget&amp;quot; a restart after the defined number of seconds. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds (ten minutes). So if a server fails, the failure count increments from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. After &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds though, the restart is &amp;quot;forgotten&amp;quot; and the failure count returns to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Said another way, a server will have to fail three times in ten minutes to trigger the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; recovery policy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So let&#039;s take a look at the final, complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s now take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;? That is because of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, the cluster is smart enough that we can tell it to start the service and it will see the server is already running and not actually do anything. So we can do this next step safely while the server is running.&lt;br /&gt;
&lt;br /&gt;
The trick, of course, is to be sure to tell the cluster to start the server on the right cluster node.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; once more to verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is, in fact, still on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent. So now to tell the cluster to begin managing the server, we&#039;re use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. It takes two switches in this case:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;; &amp;quot;enable&amp;quot; the service&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt;; do the action on the named member.&lt;br /&gt;
&lt;br /&gt;
We can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; from any node in the cluster. For now though, lets stick to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; that the server is now under cluster control.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. Windows 2008 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 13:36:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Windows occasionally ignores ACPI power button events. In other cases, some programs will block the shut-down. In either case, the server will not actually shut down. It&#039;s a good habit to connect to the server and make sure it shuts down when you disable the service. If it does not shut down on its own, use the operating system&#039;s power off feature.}}&lt;br /&gt;
&lt;br /&gt;
As we expected. So now, &amp;quot;press the server&#039;s power button&amp;quot; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We have to do it this way because, if the server stops any other way, the cluster will treat it as a failure and boot it right back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:11:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt;; That tells rgmanager to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service on the preferred host. It&#039;s a nice habit to get into as it will ensure the server always boots on the preferred node, when possible.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What the deuce!?&lt;br /&gt;
&lt;br /&gt;
=== Solving vm01-win2008 &amp;quot;Failure to Enable&amp;quot; Error ===&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the log file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n02 rgmanager[2864]: Recovering failed service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, we&#039;ll see that the server is stuck in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:16:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            none                                       recovering    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is why we saw the &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&amp;lt;/span&amp;gt;&amp;quot; message on both nodes. The cluster tried to enable it on the preferred host first, because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch, that failed so it tried to enable it on the second node and that also failed. &lt;br /&gt;
&lt;br /&gt;
The first step to diagnosing the problem is to disable the service in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and then manually trying to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:17:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now the cluster is no longer trying to touch the server. Lets start it manually. As always, verify the state of things. In this case, we&#039;ll double-check that the server really didn&#039;t start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s for sure off, so let&#039;s try to start it. As you can see above, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server is not shown as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shut off&amp;lt;/span&amp;gt; because we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;d it. So to start it, we need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt; option and specify the definition file manually.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh create &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 created from /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 10    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we know that the server itself is fine. Let&#039;s shut down the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;. Note that it will take a minute for the server to gracefully shut down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh shutdown vm01-win2008 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 is being shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a likely cause of problems is an [[SELinux]] denial. Let&#039;s verify that SELinux is, in fact, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enforcing&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is. So to test, let&#039;s temporarily put SELinux into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;permissive&amp;lt;/span&amp;gt; mode and see if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; starts working.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bingo! So we&#039;ve SELinux appears to be the problem.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s disable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt;, re-enable SELinux and then try to debug SELinux.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 1&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re back to where it fails. We will now want to look for errors. SELinux writes log entries to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/audit/audit.log&amp;lt;/span&amp;gt;, however, by default, many things are set to not logged (set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; in SELinux parlance). This includes cluster related issues. So to temporarily enable complete logging, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semodule&amp;lt;/span&amp;gt; command to tell it to log all messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# no output, but it takes a while to complete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f /var/log/audit/audit.log&amp;lt;/span&amp;gt; and try again to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We expect it will fail, but the log messages will be useful. Once it fails, we&#039;ll immediately disable it again. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;audit.log&amp;lt;/span&amp;gt;, we see;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1384209306.795:2768): avc:  denied  { search } for  pid=24850 comm=&amp;quot;virsh&amp;quot; name=&amp;quot;/&amp;quot; dev=dm-0 ino=22 scontext=unconfined_u:system_r:xm_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s complaining about the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; and specifically about the [[inode]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;. If you recall from when we setup the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; was a &amp;quot;device mapper&amp;quot; device. Let&#039;s see what this is.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/mapper/ | grep dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx.  1 root root      7 Nov  3 12:14 an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the device mapper name for the [[LV]] we created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Knowing this, let&#039;s search &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; for what is at [[inode]] number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find /shared -inum 22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So inode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt; is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; directory itself. So lets look at the SELinux context using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-Z&amp;lt;/span&amp;gt; switch.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:file_t:s0      .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the current context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt; entry above) is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;system_u:object_r:file_t:s0&amp;lt;/span&amp;gt;. This isn&#039;t permissive enough, so we need to fix it. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_t&amp;lt;/span&amp;gt; context should be good enough as it allows reads from files under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{{note|1=If you use a program other than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; that tries to manipulate the files in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;, you may need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_rw_t&amp;lt;/span&amp;gt; context as it allows read/write permissions.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll need to make this change on &#039;&#039;&#039;both&#039;&#039;&#039; nodes. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage&amp;lt;/span&amp;gt; to make the change followed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restorecon&amp;lt;/span&amp;gt; to make sure the changes remain in case the file system is ever re-labelled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We told SELinux to ignore the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; option earlier. We&#039;ll want to undo this so that our logs don&#039;t get flooded.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# No output, but it will take a while to return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If all went well, we should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Live Migration ===&lt;br /&gt;
&lt;br /&gt;
One of the most useful features of the &#039;&#039;Anvil!&#039;&#039; is the ability to &amp;quot;push&amp;quot; a running server from one node to another. This can be done without interrupting users, so it allows maintenance of nodes in the middle of work days. Upgrades, maintenance and repairs can be done without scheduling maintenance windows!&lt;br /&gt;
&lt;br /&gt;
As always, lets take a look at where things are right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:15:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that the cluster&#039;s view is accurate.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we expected.&lt;br /&gt;
&lt;br /&gt;
Now, to live-migrate a server, we will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-M&amp;lt;/span&amp;gt; (note the capitalization). This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; to migrate, instead of relocated, the service to the target cluster member.&lt;br /&gt;
&lt;br /&gt;
Seeing as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is currently on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll migrate it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you get an error like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Failed; service running on original owner&amp;lt;/span&amp;gt;, you may not have your [[#Configuring_iptables|firewall]] configured properly. Alternately, you may have run into [[2-Node_Red_Hat_KVM_Cluster_Tutorial_-_Troubleshooting#.5Bvm.5D_error:_internal_error_Attempt_to_migrate_guest_to_the_same_host_.7Buuid.7D|mainboards with matching UUIDs]].}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:57:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you were logged into the server, you would have noticed than any running appications, including network applications, would have not been effected in any way.&lt;br /&gt;
&lt;br /&gt;
How cool is that?&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll push it back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 15:02:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, we can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very cool.&lt;br /&gt;
&lt;br /&gt;
== Making vm02-win2012 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm02-win2012|vm02-win2012]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm02-win2012 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Recall that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm02-win2012 &amp;gt; /shared/definitions/vm02-win2012.xml&lt;br /&gt;
ls -lah /shared/definitions/vm02-win2012.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 13:03 /shared/definitions/vm02-win2012.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm02-win2012.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm02-win2012 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm02-win2012 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;13&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;13&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you&#039;ve been following along, this will be the first time we&#039;ve pushed a change to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll need to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password on both nodes.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:08:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:09:00 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To show that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; can be used anywhere, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to enable the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:29:12 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm02-win2012 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:35:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re flipping to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, but we don&#039;t have to. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; command is smart enough to know where the server is running and disable it on the appropriate node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm02-win2012...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:36:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ll go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; so that we can see how the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch is, in fact, smart enough to start the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm02-win2012...Success&lt;br /&gt;
vm:vm02-win2012 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SELinux fix [[#Solving_vm01-win2008_Failure_to_Enable_Error|from before]] worked for this server, too! You can verify this by disabling the server and re-running the above command on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:08:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@an-c05n01 ~]# virsh list --all&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 6     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:13:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Making vm03-win7 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm03-win7|vm03-win7]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm03-win7 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm03-win7 &amp;gt; /shared/definitions/vm03-win7.xml&lt;br /&gt;
ls -lah /shared/definitions/vm03-win7.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 14:21 /shared/definitions/vm03-win7.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm03-win7.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm03-win7 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm03-win7 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;14&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm03-win7 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm03-win7...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:30:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:43:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:56:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
 4     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:59:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm04-win8 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm04-win8|vm04-win8]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm04-win8 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm04-win8 &amp;gt; /shared/definitions/vm04-win8.xml&lt;br /&gt;
ls -lah /shared/definitions/vm04-win8.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 15:24 /shared/definitions/vm04-win8.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm04-win8.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm04-win8 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm04-win8 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. This server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;15&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm04-win8 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm04-win8...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:34:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:35:11 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm05-freebsd9 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm05-freebsd9|vm05-freebsd9]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm05-freebsd9 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm05-freebsd9 &amp;gt; /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
ls -lah /shared/definitions/vm05-freebsd9.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.8K Nov 19 12:29 /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm05-freebsd9.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm05-freebsd9 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm05-freebsd9...Success&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:56:03 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm05-freebsd9 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:57:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm05-freebsd9...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:02:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 10    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:03:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm06-solaris11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm06-solaris11|vm06-solaris11]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm06-solaris11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm06-solaris11 &amp;gt; /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm06-solaris11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 20 16:05 /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm06-solaris11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm06-solaris11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm06-solaris11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;17&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm06-solaris11...Success&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:31:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm06-solaris11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:39:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm06-solaris11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:38 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:42:46 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:43:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm07-rhel6 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm07-rhel6|vm07-rhel6]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm07-rhel6 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm07-rhel6 &amp;gt; /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
ls -lah /shared/definitions/vm07-rhel6.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 21 00:55 /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm07-rhel6.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm07-rhel6 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm07-rhel6 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you did a &amp;quot;minimal&amp;quot; install, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; will not be installed. Without it, the server will not shut down gracefully in the next step. Be sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is installed and that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpi&amp;lt;/span&amp;gt; daemon is running.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm07-rhel6...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:05:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:06:16 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:07:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 20    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:08:49 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making vm08-sles11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add our last server, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm08-sles11|vm08-sles11]]&amp;lt;/span&amp;gt;, to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm08-sles11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm08-sles11 &amp;gt; /shared/definitions/vm08-sles11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm08-sles11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.1K Nov 21 02:14 /shared/definitions/vm08-sles11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm08-sles11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm08-sles11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;19&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm08-sles11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm08-sles11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:20:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 21    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:21:13 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 25    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s really pretty easy, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
= Setting Up Alerts =&lt;br /&gt;
&lt;br /&gt;
One of the major additions to this second addition is the advent of the new alert system we developed called &amp;quot;AN!CM&amp;quot;; &amp;quot;AN! Cluster Monitor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Alert System Overview ==&lt;br /&gt;
&lt;br /&gt;
It is hardly fancy, but it does provide, in one package, very careful and detailed monitoring of:&lt;br /&gt;
&lt;br /&gt;
* Incoming power issues via UPS monitoring.&lt;br /&gt;
* Network interruptions via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond&amp;lt;/span&amp;gt; driver events&lt;br /&gt;
* Monitoring of node environmental health via IPMI BMC sensor readings&lt;br /&gt;
* Monitoring of all storage components via LSI&#039;s MegaCli tool&lt;br /&gt;
* Monitoring of the HA cluster stack using Red Hat&#039;s tools&lt;br /&gt;
&lt;br /&gt;
In all, over 200 points are monitored every 30 seconds. Most changes are simply logged, but events deemed important (or new events not before seen) trigger email alerts. These alerts are kept as simple and to the point as possibly to minimize the amount of time needed to understand what event triggered the alert.&lt;br /&gt;
&lt;br /&gt;
The alerting system tries to be intelligent about how alerts are triggered. For example, a thermal alert can trigger if it passes a set threshold, of course. At the same time, &amp;quot;early warning&amp;quot; alerts can be triggered is a sudden excessive change in temperature is seen. This allows early reaction to major events like HVAC failures in the server room or DC.&lt;br /&gt;
&lt;br /&gt;
Basic predictive failure analysis is also provided. Examples of this are alerts on distorted incoming power from the building mains. Likewise, a sudden jump in the number of media errors from a disk drive will trigger alerts. In this way, early warning alerts can get out before a component actually fails. This allows for corrective measures or replacement parts to be ordered pre-failure, minimizing risk exposure time.&lt;br /&gt;
&lt;br /&gt;
== AN!CM Requirements ==&lt;br /&gt;
&lt;br /&gt;
The alerting system is fairly customized to the &#039;&#039;Anvil!&#039;&#039; build-out. For example, only APC brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] controllers are supported for UPS monitoring. Likewise, only LSI-brand RAID controllers are currently supported.&lt;br /&gt;
&lt;br /&gt;
That said, AN!CM is an [https://github.com/digimer/an-cdb/tree/master/tools open-source project] (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.lib&amp;lt;/span&amp;gt;), so contributions are happily accepted. If you need help adapting this to your hardware, please don&#039;t hesitate to [[Support|contact us]]. We will be happy to assist however we can.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Your Dashboard ==&lt;br /&gt;
&lt;br /&gt;
You can configure a node&#039;s monitoring without a dashboard, if you wish. However, [[AN!CDB]] has been designed to use the dashboard systems as the center of the AN! tools.&lt;br /&gt;
&lt;br /&gt;
Please setup a dashboard before proceeding:&lt;br /&gt;
&lt;br /&gt;
* [[Install and Configure AN!CDB]]&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re done there, come back here.&lt;br /&gt;
&lt;br /&gt;
== Testing Monitoring ==&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/an/an.conf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm.lib&amp;lt;/span&amp;gt; should be on our nodes.&lt;br /&gt;
&lt;br /&gt;
Before we enable monitoring, lets test it once manually. If things work as expected, you should get two emails:&lt;br /&gt;
&lt;br /&gt;
* First indicating that the alert system has started with an overview of the node&#039;s health.&lt;br /&gt;
* Second indicating that the alert system has stopped.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The monitoring and alert program generally will not print anything to the screen. When we run the command below, the terminal will appear hung. It is not though. Wait a minute and you should get an email from the node. Once you see that email, press &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; to close the program and return to the command prompt.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C3:34&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:58:06:A9&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:8E:67:32&lt;br /&gt;
          |- vnet2, MAC: FE:54:00:68:9B:FD&lt;br /&gt;
          |- vnet3, MAC: FE:54:00:D5:49:4C&lt;br /&gt;
          \- vnet4, MAC: FE:54:00:8A:6C:52&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 73 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4080 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      36 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 110 Watts  | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 16.50 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 18.70 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 210 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 37        |&lt;br /&gt;
| CPU2           | ok        | 41        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4560      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     30.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  sharedfs&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:5E:29:1C&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:29:38:3B&lt;br /&gt;
          \- vnet2, MAC: FE:54:00:B0:6C:AA&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 68 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4058 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      35 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.13 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 33        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4920      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 51.0 Minutes    Current Load:    26.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once you see these emails, you can close the monitoring programs by pressing &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot;. When you do, the terminal will return and you will get another email from each node warning you that the alerting system has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 2480 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n01 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 1447 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n02 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to see what AN!CM is doing, it writes its log files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt;. There are many events that are logged which do not trigger emails. Sensors like thermometers, fan tachometers and various voltage and wattage sensors will constantly be shifting. These changes are recorded in this log file, should you ever wish to see how things change over time.&lt;br /&gt;
&lt;br /&gt;
Lets take a quick look at what was written to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.log&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 41 *C -&amp;gt; 42 *C&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 18.70 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 19.80 Watts -&amp;gt; ok, 17.60 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201452 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 52.0 Minutes -&amp;gt; 51.0 Minutes&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4081 mV -&amp;gt; 4079 mV&lt;br /&gt;
1386201487 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 42 *C -&amp;gt; 41 *C&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 20.90 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN1 PSU2&amp;quot; fan speed has change; ok, 6480 RPM -&amp;gt; ok, 6600 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 SYS&amp;quot; fan speed has change; ok, 5280 RPM -&amp;gt; ok, 5340 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN3 SYS&amp;quot; fan speed has change; ok, 4980 RPM -&amp;gt; ok, 5040 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 5220 RPM -&amp;gt; ok, 5280 RPM.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 14.30 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 11 Watts.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN1 SYS&amp;quot; fan speed has change; ok, 4740 RPM -&amp;gt; ok, 4680 RPM.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6360 RPM -&amp;gt; ok, 6240 RPM.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;PSU2 Power&amp;quot; has change; ok, 120 Watts -&amp;gt; ok, 110 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;Total Power&amp;quot; has change; ok, 210 Watts -&amp;gt; ok, 200 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4060 mV -&amp;gt; 4061 mV&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;BATT 3.0V&amp;quot; voltage has change; ok, 3.14 Volts -&amp;gt; ok, 3.13 Volts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 14.30 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 11 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6240 RPM -&amp;gt; ok, 6360 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 4860 RPM -&amp;gt; ok, 4920 RPM.&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;IOH 1.8V&amp;quot; voltage has change; ok, 1.80 Volts -&amp;gt; ok, 1.79 Volts.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shortly, we will look at what alerts that trigger emails look like. For now, we&#039;re ready to enable monitoring!&lt;br /&gt;
&lt;br /&gt;
== Enabling Monitoring ==&lt;br /&gt;
&lt;br /&gt;
Now that we know that monitoring and emailing is working, it is time to enable it.&lt;br /&gt;
&lt;br /&gt;
By design, the monitoring program is designed to exit should it run into any unexpected problems. Obviously, it is quite important that the alert system always run. &lt;br /&gt;
&lt;br /&gt;
The way we ensure this is to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[crontab]]&amp;lt;/span&amp;gt; to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; every five minutes. The first thing that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; does is check to see if it is already running. If so, it simply exits, so the alert system won&#039;t run more than once. Should it crash or be killed for some reason, however, this will ensure that the alert system is back up within five minutes.&lt;br /&gt;
&lt;br /&gt;
So if you find that you suddenly get an email claiming that the monitoring software has started, be sure to check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt; for error messages.&lt;br /&gt;
&lt;br /&gt;
Back to enabling monitoring; &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to also enable two log archival scripts; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_megasas.log.sh&amp;lt;/span&amp;gt;. These prevent the log files generated by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; directly and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file created by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; from growing too big. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; will run once a day and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; archival scripts will run once per month. We already downloaded &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt;, but we still need to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt;. Both will create up to five archived log files, allowing you to review up to five days and five months, respectively. After that, the oldest log files are removed, effectively capping the amount of disk space these logs will use.&lt;br /&gt;
&lt;br /&gt;
Lets download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; and make it executable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:58--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.1 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:59--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.3 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cronbtab -e&amp;lt;/span&amp;gt; to edit the cron table and add three entries for these programs. If you already added &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/archive_an-cm.log.sh&amp;lt;/span&amp;gt;, then simply append the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save and quit. Within five minutes, you should see an email telling you that the monitoring system has started up again.&lt;br /&gt;
&lt;br /&gt;
We&#039;re done!&lt;br /&gt;
&lt;br /&gt;
== We&#039;re Done! or are We? ==&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, ladies and gentlemen. Our cluster is completed! In theory now, any failure in the cluster will result in no lost data and, at worst, no more than a minute or two of downtime.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In theory&amp;quot; just isn&#039;t good enough in clustering though. Time to take &amp;quot;theory&amp;quot; and make it a tested, known fact.&lt;br /&gt;
&lt;br /&gt;
= Testing Server Recovery =&lt;br /&gt;
&lt;br /&gt;
You may have thought that we were done. Indeed, the &#039;&#039;Anvil!&#039;&#039; has been built, but we need to do a final round of testing. Thus far, we&#039;re tested network redundancy and we have tested our fencing devices.&lt;br /&gt;
&lt;br /&gt;
The last round of testing will be to make sure our servers recover properly. We will test the following;&lt;br /&gt;
&lt;br /&gt;
# Controlled migration and node withdrawal.&lt;br /&gt;
## Migrate all servers to one node, then withdraw and power off the other node.&lt;br /&gt;
## Restart the node and rejoin it to the cluster.&lt;br /&gt;
## Repeat for the other node.&lt;br /&gt;
# Controlled, out-of-cluster power-off of a server, ensure it is restarted&lt;br /&gt;
# Crashing nodes.&lt;br /&gt;
## Ensuring crashed node is fenced.&lt;br /&gt;
## Confirm all servers recover on the surviving node.&lt;br /&gt;
## Rejoining the recovered node and migrating servers back.&lt;br /&gt;
## Crashing the other node, ensuring its servers recover.&lt;br /&gt;
&lt;br /&gt;
== Controlled Migration and Node Withdrawal ==&lt;br /&gt;
&lt;br /&gt;
These tests ensure that we will be able to safely pull a node out of service for upgrades, repairs, routine service and OS updates.&lt;br /&gt;
&lt;br /&gt;
We will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;; We will live-migrate all servers over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then power off &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. We will then power &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back up and rejoin it to the cluster. Once both DRBD resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; again, we will live-migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
Once done, we will repeat the process in order to test taking &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; out, then restarting it and putting it back into production. If all goes well, both nodes will be powered off at one point or another and none of the servers should be interrupted.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
As always, the first step is to check what state the cluster is in.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:08:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Remember; It is not uncommon for live migrations to take several minutes to complete. The hypervisor will slow the migration process if it thinks that is needed to avoid negatively affecting performance inside the server. Please be patient!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s a good idea to be running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; from this point forward. It will allow you to monitor the changes as they happen.}}&lt;br /&gt;
&lt;br /&gt;
Before we can withdraw &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll need to live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What is this? An alert!&lt;br /&gt;
&lt;br /&gt;
You should have just gotten two alerts, one from each node, telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; has moved. Lets take a look;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike the long and detailed message from the initial startup, these &amp;quot;state change&amp;quot; emails are much shorter and to the point. It tells you only what has changed, so that you can quickly tell exactly what happened. In this case, we expected this change so there is no need for concern.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s migrate the other servers. You will see another pair of alerts like this after each migration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That should be all of them. Verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:53:54 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now we will stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. We&#039;ll verify that the node is gone by calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; from both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:56:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
We can now update &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s OS or power it off for physical maintenance, repairs or upgrades!&lt;br /&gt;
&lt;br /&gt;
We will power it off now to simulate hardware maintenance.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
poweroff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n01.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 21:57 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for power off NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Load Testing in a Degraded State ===&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is powered off. &lt;br /&gt;
&lt;br /&gt;
This is a great time to load test your servers! &lt;br /&gt;
&lt;br /&gt;
This is an effective simulation of a degraded state. Should you lose a node, you will be forced to run on a single node until repairs can be made. You need to be sure that performance on a single node is good enough to maintain full production during this time. &lt;br /&gt;
&lt;br /&gt;
How you load test your servers will be entirely dependent on what they are and what they do. So there is not much we can do in the scope of this tutorial. Once your load tests are done, proceed to the next section.&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
So you&#039;re load tests are done. Now you&#039;re ready to bring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back online and rejoin it to the cluster.&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent to first verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is truly off, then we will use it to turn it on. We could certainly use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; directly, of course, but it is an excellent opportunity to practice with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Getting status of IPMI:an-c05n01.ipmi...Chassis power = Off&lt;br /&gt;
Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State confirmed. Let&#039;s power it up!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Powering on machine @ IPMI:an-c05n01.ipmi...Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most hardware servers take several minutes to boot, so this is a great time to go make a tea or coffee. Once it&#039;s booted, within five minutes, you should get an alert email telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is up and running. This is an excellent way to know when your break is over.&lt;br /&gt;
&lt;br /&gt;
Once the node is up, log back into and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resource are back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;. Do not proceed until this is the case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:24:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready to migrate the servers back!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; is once again fully redundant and our servers are back on their preferred hosts.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Next up; Withdrawing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. As always, we will check the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:34:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This time, we will live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All servers are off, so now we&#039;ll stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as offline now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:41:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As before, we can now do an OS update or power off the node.&lt;br /&gt;
&lt;br /&gt;
We did our single-node load testing already, so this time we will simply reboot &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to simulate a (very quick) hardware service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n02.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 22:43 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for reboot NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
As before, we&#039;ll verify the current state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Then we&#039;ll watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:47:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:50:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step; Migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;re back into a fully redundant state and our servers are running on their preferred nodes!&lt;br /&gt;
&lt;br /&gt;
== Out-of-Cluster Server Power-off ==&lt;br /&gt;
&lt;br /&gt;
If a server shuts off, for any reason, the cluster will treat it as a failed service and it will recover it by turning it back on. &lt;br /&gt;
&lt;br /&gt;
There is a catch though...&lt;br /&gt;
&lt;br /&gt;
For privacy reasons, there is no way to look inside a server to determine if it has failed. So detecting a failure is restricted to simply seeing it not do anything any more. Some operating systems, like most or all Microsoft operating systems, go into an infinite loop when they [http://en.wikipedia.org/wiki/Blue_Screen_of_Death blue screen]. To the cluster, it simply looks like the server is really really busy, so it is not treated as failed. &lt;br /&gt;
&lt;br /&gt;
So please make sure, if at all possible, to set your servers to reboot on crash. Most modern operating systems do this already, but consult your server operating system&#039;s documentation to verify.&lt;br /&gt;
&lt;br /&gt;
For this test, all we will do is log into a server and turn it off the way you would if it was a bare-iron server. If things work properly, the server should see it as failed and turn it back on within a few seconds.&lt;br /&gt;
&lt;br /&gt;
For this test, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, click on the &amp;quot;Start&amp;quot; icon and then click on &#039;&#039;Shut down&#039;&#039;. We will watch the system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as that is the node hosting the server.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: device vnet1 left promiscuous mode&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: Deleting interface #19 vnet1, fe80::fc54:ff:fe68:9bfd#123, interface stats: received=0, sent=0, dropped=0, active_time=99 secs&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:23 an-c05n01 rgmanager[2770]: status on vm &amp;quot;vm03-win7&amp;quot; returned 1 (generic error)&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Stopping service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 is recovering&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Recovering failed service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: device vnet1 entered promiscuous mode&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
Dec  5 02:10:25 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: Listen normally on 20 vnet1 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:39 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Above we see the hypervisor report that the server shut down at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:17&amp;lt;/span&amp;gt;. The message &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Deleting interface #19 vnet1...&amp;lt;/span&amp;gt;&amp;quot; is the virtual network cable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; being deleted because the server it was &amp;quot;plugged into&amp;quot; was no longer running.&lt;br /&gt;
&lt;br /&gt;
Six seconds later, at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:23&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; realized that the server had failed. If you had been watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, you would have seen the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; server enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failed&amp;lt;/span&amp;gt; state. Moments later, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; began recovering the server by first disabling it, then starting it back up.&lt;br /&gt;
&lt;br /&gt;
Two seconds after that, eight seconds after the unexpected shut down, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; was recovered and running again. Three seconds later, a new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; was created, reconnecting the server to the network. A this point, recovery is complete!&lt;br /&gt;
&lt;br /&gt;
Probably the easiest test so far. Of course, you will want to repeat this test for all of your servers.&lt;br /&gt;
&lt;br /&gt;
== Crashing Nodes; The Ultimate Test ==&lt;br /&gt;
&lt;br /&gt;
Finally, we&#039;ve reaches the ultimate test.&lt;br /&gt;
&lt;br /&gt;
Most people first look at high-availability to protect against crashed bare-iron servers. As we&#039;ve seen, there are many other single-points of failure that we had to address and which we&#039;ve already tested.&lt;br /&gt;
&lt;br /&gt;
In this test, we&#039;re going to have all services and servers running. &lt;br /&gt;
&lt;br /&gt;
We will first crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; by sending a &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; character to the &amp;quot;magic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Magic_SysRq_key SysRq Key]&amp;lt;/span&amp;gt;, as we did when we first tested our fencing configuration. This will cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to instantly [http://en.wikipedia.org/wiki/Kernel_panic kernel panic], crashing the node and halting all the servers running on it. This will simulate the harshest software crash possible on a node.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve recovered from that, we will crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; by cutting the power to it. This will simulate a total destruction of a node. As we saw in our early fence testing, this will cause the [[IPMI]] [[BMC]] under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to also fail, forcing the surviving node to fall back to the [[PDU]] based backup fence method.&lt;br /&gt;
&lt;br /&gt;
These tests will also ensure that your &#039;&#039;Anvil!&#039;&#039; does not suffer from a [[boot storm]] when all of the servers from either node reboot at the same time during recovery. This is a very, very important aspect of this test. Should the servers start, but fail to finish booting and become unresponsive, it is likely that your storage was not fast enough to handle the sudden high read load placed on them during recovery. As bad as this is, it is much better to find out now, &#039;&#039;&#039;before&#039;&#039;&#039; going into production.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=&#039;&#039;Virtual Machine Manager&#039;&#039; will appear to hang when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; until the connection is determined to have failed. To watch the recovery of the servers on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in real time, please disconnect from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.}}&lt;br /&gt;
&lt;br /&gt;
Once we crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we should see the following sequence of events:&lt;br /&gt;
&lt;br /&gt;
* Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will declare &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost and will fence it.&lt;br /&gt;
* An alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will arrive indicating the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All servers that had been running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will boot on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Additional alerts will arrive as the servers are recovered.&lt;br /&gt;
* Within five or ten minutes, we will get an alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; saying that the alert system has started, indicating the node is back.&lt;br /&gt;
&lt;br /&gt;
Before we do this, lets see what is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 11:55:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So this test is going to crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. This is the majority of our servers, so this recovery will tell us if we&#039;re going to have a boot storm or not. If all of them boot without trouble, we will know that our storage is likely fast enough.&lt;br /&gt;
&lt;br /&gt;
Be sure to log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system logs before proceeding.&lt;br /&gt;
&lt;br /&gt;
Ok, let&#039;s do this!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing returned, it&#039;s dead&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 corosync[2546]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 fenced[2613]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fenced[2613]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fence_node[2294]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: new current UUID AC7D34993319CF07:96939998C25B00D5:C667A4D09ADAF91B:C666A4D09ADAF91B&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:06 an-c05n02 rgmanager[2785]: Marking service:storage_n01 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 fence_node[2325]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: new current UUID 20CEE1AD5C066F57:BF89350BA62F87D1:EAA52C899C7C1F8D:EAA42C899C7C1F8D&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Looking at journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replaying journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replayed 259 of 476 blocks&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Found 5 revoke tags&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Journal replayed in 1s&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Done&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm01-win2008 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm03-win7 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm04-win8 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: device vnet3 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm07-rhel6 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm08-sles11 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet4 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 rgmanager[2785]: Service vm:vm01-win2008 started&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 rgmanager[2785]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm07-rhel6 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm04-win8 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm08-sles11 started&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 14 vnet3 fe80::fc54:ff:fe8e:6732 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 15 vnet5 fe80::fc54:ff:fe58:6a9 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 16 vnet6 fe80::fc54:ff:fe8a:6c52 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 17 vnet4 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 18 vnet7 fe80::fc54:ff:fed5:494c UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: peers refreshed&lt;br /&gt;
Dec  5 12:02:19 an-c05n02 kernel: kvm: 3933: cpu0 disabled perfctr wrmsr: 0xc1 data 0xabcd&lt;br /&gt;
Dec  5 12:02:22 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that, in this case, DRBD caught the failure slightly faster than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; did. It initiated a fence via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. Next we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; also call a fence, which succeeded on first try. Shortly after, DRBD recognized the fence succeeded as well. &lt;br /&gt;
&lt;br /&gt;
With the fence actions succeeded, we see DRBD mark the lost resources as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Outdated&amp;lt;/span&amp;gt;, GFS2 reaps lost locks and cleans up the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; filesystem. We also see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; mark &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage as disabled and then begin recovery of the five lost servers. Once they&#039;re booted, the last recovery step is &amp;quot;plugging them in&amp;quot; to the bridge.&lt;br /&gt;
&lt;br /&gt;
Lets look at the alerts we received.&lt;br /&gt;
&lt;br /&gt;
The alert system checks for state changes every 30 seconds. So depending on when the loop fires during the failure and recovery process, you may get a couple alerts. That is what happened in my case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n01.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local, rgmanager	-&amp;gt; Online, Local&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
30 seconds later, the next alert arrives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local	-&amp;gt; Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n01; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service storage_n01; State change!&lt;br /&gt;
  --	-&amp;gt; stopped&lt;br /&gt;
  --	-&amp;gt; (an-c05n01.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm03-win7; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm04-win8; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm07-rhel6; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm08-sles11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first email shows the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. The second email shows the recovery of all the servers. The astute reader will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; showed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. &lt;br /&gt;
&lt;br /&gt;
This is because there is a time between node loss and fence complete where [[DLM]] stops giving out locks. As we mentioned, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; all require DLM locks in order to work. So during a pending fence, these programs will appear to hang, which is by design. Once the fence action succeeds, normal operation resumes. In this case, we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; returned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in the second email alert.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 12:37:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at the timeline, we see that the fault was detected almost immediately at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:01:27&amp;lt;/span&amp;gt;. Recovery is completed at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:02:24&amp;lt;/span&amp;gt;. The total recovery time was 57 seconds.&lt;br /&gt;
&lt;br /&gt;
Not too shabby!&lt;br /&gt;
&lt;br /&gt;
=== Degraded Mode Load Testing ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Load-testing your &#039;&#039;Anvil!&#039;&#039; in a degraded state is just as critical as anything else we&#039;ve done thus far!}}&lt;br /&gt;
&lt;br /&gt;
It is very important that you ensure all of your servers can run well at full load on a single node. All of our work until now is useless if your servers grind during a degraded state.&lt;br /&gt;
&lt;br /&gt;
The two biggest concerns are CPU and storage.&lt;br /&gt;
&lt;br /&gt;
Please be sure to test, as long as needed, all of your applications running at full speed, both CPU and storage. If those tests pass, it&#039;s a good idea to then run synthetic benchmarks to find out just how much load your servers can take on the one node before performance degrades. This will be very useful for predicting when additional resource must be added as you grow.&lt;br /&gt;
&lt;br /&gt;
The actual methods used in this step are dependent entirely on your setup, so no further discussion can be had here.&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; recovers from the fence, it will send out the &amp;quot;I&#039;ve started!&amp;quot; alerts. There might be two emails, depending on the when the alert system started. That was the case in this test. The first alert came up before the bond devices &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; expired. Once that delay passed, a second alert was triggered showing the backup interfaces coming online.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 71 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4077 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      37 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 120 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6600 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 6.60 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 120 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 35        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6600      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4500      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 120.0 Volts -&amp;gt; UPS -&amp;gt; 120.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bond bond0 (Back-Channel Network); Second slave eth3&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond1 (Storage Network); Second slave eth4&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond2 (Internet-Facing Network); Second slave eth5&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lets check the state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 13:04:05 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything looks good, so lets rejoin &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for the DRBD resource to both be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    71.2%            (176592/607108)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   Connected   Primary/Primary  UpToDate/UpToDate      C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a bit...&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to start live-migrating the five servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back to normal.&lt;br /&gt;
&lt;br /&gt;
You should see numerous alert emails showing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; rejoining the cluster and the servers moving back.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Last test!&lt;br /&gt;
&lt;br /&gt;
As mentioned, we&#039;re going to cut the power to this node. We could just pull the power cables out and that would be perfectly fine. Downside to that is that it requires getting up, and who wants to do that?&lt;br /&gt;
&lt;br /&gt;
So we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to call each PDU and turn off outlet #2, which powers &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we saw in our initial round of fence testing, the initial fence attempt using [[IPMI]] will fail. Then the PDUs should be called and the outlets we turned off will be verified as off, then turned back on. &lt;br /&gt;
&lt;br /&gt;
If your server is set to boot when power is restored, or if you have it set to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Last State&amp;lt;/span&amp;gt;&amp;quot;, the server should boot automatically. If it stays off, simply call an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt; action against it using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;. It will be great practice!&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s watch the logs, kill the power, and look at the email alerts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An alert!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Warning! - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN1 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6360 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN1 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN2 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6480 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN2 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;Power Unit&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; ok, 0x02&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x02	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is because we took our time killing the second power supply. The node stayed up long enough for a scan to run and it saw all power lost to its primary PSU, so its fans have died as well as the power itself vanishing. If you&#039;re in earshot on the node, you can probably hear an audible alarm, too.&lt;br /&gt;
&lt;br /&gt;
Lets finish the job.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p02 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:03 an-c05n01 corosync[27890]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 fenced[27962]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 fence_node[19868]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: new current UUID 982B45395AF5322D:AC7D34993319CF07:96949998C25B00D5:96939998C25B00D5&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 fence_node[19898]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: new current UUID 46F3B4E245FCFB01:20CEE1AD5C066F57:BF8A350BA62F87D1:BF89350BA62F87D1&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:27 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replaying journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replayed 3 of 5 blocks&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Found 12 revoke tags&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Journal replayed in 1s&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:libvirtd_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Taking over service vm:vm02-win2012 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm05-freebsd9 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm06-solaris11 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Service vm:vm02-win2012 started&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 rgmanager[28154]: Service vm:vm06-solaris11 started&lt;br /&gt;
Dec  5 18:38:31 an-c05n01 rgmanager[28154]: Service vm:vm05-freebsd9 started&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 16 vnet6 fe80::fc54:ff:feb0:6caa UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 17 vnet7 fe80::fc54:ff:fe29:383b UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 18 vnet5 fe80::fc54:ff:fe5e:291c UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: peers refreshed&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:45 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the log entries are almost the same as we saw when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; was crashed. The main difference is that the first fence attempt failed, as expected.&lt;br /&gt;
&lt;br /&gt;
Lets look at the timeline;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Event&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:02&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD detects the failure and initiates a fence.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:03&amp;lt;/span&amp;gt;&lt;br /&gt;
|Corosync detects the failure, reforms the cluster. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[DLM]] blocks.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:22&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD-called fence succeeds. We do not see the failed IPMI attempt in the log.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:26&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; initiated [[IPMI]] call fails, the [[PDU]]-based fence succeeds.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:27&amp;lt;/span&amp;gt;&lt;br /&gt;
|GFS2 cleans up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:28&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; begins recovery, boots lost servers.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:44&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; interfaces link the recovered servers to the bridge. Recovery is complete.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this case, recovery took 42 seconds, actually faster than the recovery of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This shows the difference in timings to detect losses. Normally, this is a little slower because of the time taken to declare the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPMI&amp;lt;/span&amp;gt; fence method &amp;quot;failed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lets look again at the alerts from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; triggered by the failure of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Half a minute later;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike last time, we didn&#039;t see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. This is because the fence completed, so &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; didn&#039;t block when the monitoring system checked it. Half a minute later, the servers were already recovered so the alert system saw them move rather than recover.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that the servers are indeed back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:56:04 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; boots up, we&#039;ll get the usual &amp;quot;I&#039;m alive!&amp;quot; alert.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 65 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4052 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      41 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 190 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 27        |&lt;br /&gt;
| CPU1           | ok        | 31        |&lt;br /&gt;
| CPU2           | ok        | 36        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4920      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 5100      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN5 SYS       | ok        | 5160      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     33.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s log in and double check the state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:46:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected. Time to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Watch the status of the drbd resources and wait until both are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    36.7%            (391292/612720)K&lt;br /&gt;
...    sync&#039;ed:    7.1%             (653544/699704)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a few...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready. &lt;br /&gt;
&lt;br /&gt;
Verify everything with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
Ready to live-migrate the servers back now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is beautiful.&lt;br /&gt;
&lt;br /&gt;
== Done and Done! ==&lt;br /&gt;
&lt;br /&gt;
That, ladies and gentlemen, is all she wrote!&lt;br /&gt;
&lt;br /&gt;
You should now be safely ready to take your &#039;&#039;Anvil!&#039;&#039; into production at this stage.&lt;br /&gt;
&lt;br /&gt;
Happy Clustering!&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Here are some common problems you might run into.&lt;br /&gt;
&lt;br /&gt;
== SELinux Related Problems ==&lt;br /&gt;
&lt;br /&gt;
SELinux is a double-edged sword. It can certainly protect you, and it is worth having, but it can cut you, too. Here we cover a couple common issues.&lt;br /&gt;
&lt;br /&gt;
=== Password-less SSH doesn&#039;t work, but ~/.ssh/authorized_keys is fine ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve double-checked that you&#039;ve copied your public keys into a target node or server&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; file, it could be that the file&#039;s context is not correct. To check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how the context is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt;? That should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. So we need to update the context now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/authorized_keys&lt;br /&gt;
restorecon -r /root/.ssh/authorized_keys&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to log in to the target machine without a password.&lt;br /&gt;
&lt;br /&gt;
=== Live-Migration fails with &#039;[vm] error: Unable to read from monitor: Connection reset by peer&#039; ===&lt;br /&gt;
&lt;br /&gt;
When trying to migrate a server using the [[AN!CDB|dashboard]], you will see an error like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm01-win2008 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; you will see errors like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8474]: [vm] Migrate vm01-win2008 to an-c05n02.alteeve.ca failed:&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8496]: [vm] error: Unable to read from monitor: Connection reset by peer&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: migrate on vm &amp;quot;vm01-win2008&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: Migration of vm:vm01-win2008 to an-c05n02.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can happen for two reasons;&lt;br /&gt;
&lt;br /&gt;
# You forgot to [[#Populate_known_hosts|populate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt;]].&lt;br /&gt;
# The context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt; is not correct.&lt;br /&gt;
&lt;br /&gt;
It is usually the second case, so that is what we will address here.&lt;br /&gt;
&lt;br /&gt;
Check to see what context is currently set for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The context on this file needs to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. To change it, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts &lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to live-migrate your servers to the node.&lt;br /&gt;
&lt;br /&gt;
=== Attempting to Live Migrate Fails with &#039;Host key verification failed.&#039; ===&lt;br /&gt;
&lt;br /&gt;
Attempting to Live-Migrate a server from one node to another fails with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the system log, we see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migrating vm:vm02-win2008r2 to an-c05n01.alteeve.ca&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10618]: [vm] Migrate vm02-win2008r2 to an-c05n01.alteeve.ca failed:&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10640]: [vm] error: Cannot recv data: Host key verification failed.: Connection reset by peer&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: migrate on vm &amp;quot;vm02-win2008r2&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migration of vm:vm02-win2008r2 to an-c05n01.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has two causes:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[AN!Cluster_Tutorial_2#Populate_known_hosts|/root/.ssh/known_hosts]]&amp;lt;/span class=&amp;quot;code&amp;quot;&amp;gt; isn&#039;t populated.&lt;br /&gt;
# The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[selinux]]&amp;lt;/span&amp;gt; context is not correct.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve confirmed that your &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file is correct, then you can verify you&#039;ve hit an SELinux issue by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 0&amp;lt;/span&amp;gt; on both nodes and trying again. If the migration works, you have an SELinux issue. Re-enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 1&amp;lt;/span&amp;gt; and we&#039;ll fix it.&lt;br /&gt;
&lt;br /&gt;
If we look at the current context:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:admin_home_t:s0 id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We see that it is currently &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;, but &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; is fine. We want all of them to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;, so we&#039;ll have to fix it.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Check both nodes! If one node has a bad context, it&#039;s likely the other node is bad, too. Both nodes will need to be fixed for reliable migration.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa.pub &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa.pub &lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:ssh_home_t:s0  id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:ssh_home_t:s0  id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can try migrating again, and this time it should work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed!&lt;br /&gt;
&lt;br /&gt;
== Other Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These tutorials are not directly related to this one, but might be of use to some.&lt;br /&gt;
&lt;br /&gt;
* [[Anvil! Tutorial 2 - Growing Storage]]&lt;br /&gt;
* [[Configuring Brocade Switches]]&lt;br /&gt;
* [[Anvil! m2 Tutorial]]&lt;br /&gt;
* [[Configuring Network Boot on Fujitsu Primergy]]&lt;br /&gt;
* [[Configuring Hardware RAID Arrays on Fujitsu Primergy]]&lt;br /&gt;
* [[Encrypted Arrays with LSI SafeStore]]&lt;br /&gt;
* [[Configuring an APC AP7900]]&lt;br /&gt;
* [[Configuring APC SmartUPS with AP7930 Network Cards]]&lt;br /&gt;
* [[Anvil! m2 Tutorial - Installing RHEL/Centos]]&lt;br /&gt;
&lt;br /&gt;
== Older Issues From Previous Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These links have older troubleshooting issues that probably aren&#039;t needed anymore, but you never know.&lt;br /&gt;
&lt;br /&gt;
* [[Managing Drive Failures with AN!CDB]]&lt;br /&gt;
* [[2-Node Red Hat KVM Cluster Tutorial - Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
{{footer}}&lt;/div&gt;</summary>
		<author><name>Misko</name></author>
	</entry>
	<entry>
		<id>https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6586</id>
		<title>AN!Cluster Tutorial 2</title>
		<link rel="alternate" type="text/html" href="https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6586"/>
		<updated>2015-01-06T12:31:42Z</updated>

		<summary type="html">&lt;p&gt;Misko: /* Checking the Cluster&amp;#039;s Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{howto_header}}&lt;br /&gt;
&lt;br /&gt;
[[image:RN3-m2_01.jpg|thumb|right|400px|A typical &#039;&#039;Anvil!&#039;&#039; build-out]]&lt;br /&gt;
&lt;br /&gt;
This paper has one goal:&lt;br /&gt;
&lt;br /&gt;
* Create an easy to use, fully redundant platform for virtual servers.&lt;br /&gt;
&lt;br /&gt;
Oh, and do have fun!&lt;br /&gt;
&lt;br /&gt;
= What&#039;s New? =&lt;br /&gt;
&lt;br /&gt;
In the last two years, we&#039;ve learned a lot about how to make an even more solid high-availability platform. We&#039;ve created tools to make monitoring and management of the virtual servers and nodes trivially easy. This updated release of our [[2-Node Red Hat KVM Cluster Tutorial|tutorial]] brings these advances to you!&lt;br /&gt;
&lt;br /&gt;
* Many refinements to the cluster stack that protect against corner cases seen over the last two years.&lt;br /&gt;
* Configuration naming convention changes to support the new [[AN!CDB]] dashboard.&lt;br /&gt;
* Addition of the [[AN!CM]] monitoring and alert system.&lt;br /&gt;
* Security improved; [[selinux]] and [[iptables]] now enabled and used.&lt;br /&gt;
&lt;br /&gt;
== A Note on Terminology ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use the following terms:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Anvil!&#039;&#039;: This is our name for the HA platform as a whole.&lt;br /&gt;
* &#039;&#039;Nodes&#039;&#039;: The physical hardware servers used as members in the cluster and which host the virtual servers.&lt;br /&gt;
* &#039;&#039;Servers&#039;&#039;: The virtual servers themselves. &lt;br /&gt;
* &#039;&#039;Compute Pack&#039;&#039;: This describes a pair of nodes that work together to power highly-available servers.&lt;br /&gt;
* &#039;&#039;Foundation Pack&#039;&#039;: This describes the switches, [[PDU]]s and [[UPS]]es used to power and connect the nodes.&lt;br /&gt;
* &#039;&#039;Monitor Pack&#039;&#039;: This describes the equipment used for the [[AN!CDB]] management dashboard.&lt;br /&gt;
&lt;br /&gt;
== Why Should I Follow This (Lengthy) Tutorial? ==&lt;br /&gt;
&lt;br /&gt;
Following this tutorial is not the lightest undertaking. It is designed to teach you all the inner details of building an HA platform for virtual servers. When finished, you will have a detailed and deep understanding of what it takes to build a fully redundant, mostly fault-tolerant high-availability platform. Though lengthy, it is very worthwhile if you want to understand high-availability.&lt;br /&gt;
&lt;br /&gt;
In either case, when finished, you will have the following benefits:&lt;br /&gt;
* Totally open source. Everything. This guide and all software used is open!&lt;br /&gt;
* You can host servers running almost any operating system. &lt;br /&gt;
* The HA platform requires no access to the servers and no special software needs to be installed. Your users may well never know that they&#039;re on a virtual machine.&lt;br /&gt;
* Your servers will operate just like servers installed on bare-iron machines. No special configuration is required. The high-availability components will be hidden behind the scenes.&lt;br /&gt;
* The worst failures of core components, such as a mainboard failure in a node, will cause an outage of roughly 30 to 90 seconds.&lt;br /&gt;
* Storage is synchronously replicated, guaranteeing that the total destruction of a node will cause no more data loss than a traditional server losing power.&lt;br /&gt;
* Storage is replicated without the need for a [[SAN]], reducing cost and providing total storage redundancy.&lt;br /&gt;
* Live-migration of servers enables upgrading and node maintenance without downtime. No more weekend maintenance!&lt;br /&gt;
* AN!CM; The &amp;quot;AN! Cluster Monitor&amp;quot;, watches the HA stack is continually. It sends alerts for many events from predictive hardware failure to simple live migration in a single application.&lt;br /&gt;
* Most failures are fault-tolerant and will cause no interruption in services at all.&lt;br /&gt;
&lt;br /&gt;
Ask your local VMware or Microsoft Hyper-V sales person what they&#039;d charge for all this. :)&lt;br /&gt;
&lt;br /&gt;
== High-Level Explanation of How HA Clustering Works ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is an adaptation of [http://lists.linux-ha.org/pipermail/linux-ha/2013-October/047633.html this post] to the [http://lists.linux-ha.org/mailman/listinfo/linux-ha Linux-HA] mailing list. If you find this section hard to follow, please don&#039;t worry. Each component is explained in the &amp;quot;Concepts&amp;quot; section below.}}&lt;br /&gt;
&lt;br /&gt;
Before digging into the details, it might help to start with a high-level explanation of how HA clustering works.&lt;br /&gt;
&lt;br /&gt;
[[Corosync]] uses the [[totem]] protocol for &amp;quot;heartbeat&amp;quot;-like monitoring of the other node&#039;s health. A token is passed around to each node, the node does some work (like acknowledge old messages, send new ones), and then it passes the token on to the next node. This goes around and around all the time. Should a node not pass its token on after a short time-out period, the token is declared lost, an error count goes up and a new token is sent. If too many tokens are lost in a row, the node is declared lost.&lt;br /&gt;
&lt;br /&gt;
Once the node is declared lost, the remaining nodes reform a new cluster. If enough nodes are left to form [[quorum]] (simple majority), then the new cluster will continue to provide services. In two-node clusters, like the ones we&#039;re building here, quorum is disabled so each node can work on its own.&lt;br /&gt;
&lt;br /&gt;
Corosync itself only cares about who is a cluster member and making sure all members get all [[CPG|messages]]. What happens after the cluster reforms is up to the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, and the resource group manager, [[rgmanager]].&lt;br /&gt;
&lt;br /&gt;
The first thing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; does after being notified that a node was lost is initiate a [[fence]] against the lost node. This is a process where the lost node is powered off by the healthy node (power fencing), or cut off from the network/storage (fabric fencing). In either case, the idea is to make sure that the lost node is in a known state. If this is skipped, the node could recover later and try to provide cluster services, not having realized that it was removed from the cluster. This could cause problems from confusing switches to corrupting data.&lt;br /&gt;
&lt;br /&gt;
When rgmanager is told that membership has changed because a node died, it looks to see what services might have been lost. Once it knows what was lost, it looks at the rules it&#039;s been given and decides what to do. These rules are defined in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|cluster.conf]]&#039;s&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element. We&#039;ll go into detail on this later.&lt;br /&gt;
&lt;br /&gt;
In two-node clusters, there is also a chance of a &amp;quot;split-brain&amp;quot;. Quorum has to be disabled, so it is possible for both nodes to think the other node is dead and both try to provide the same cluster services. By using fencing, after the nodes break from one another (which could happen with a network failure, for example), neither node will offer services until one of them has fenced the other. The faster node will win and the slower node will shut down (or be isolated). The survivor can then run services safely without risking a split-brain.&lt;br /&gt;
&lt;br /&gt;
Once the dead/slower node has been fenced, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; then decides what to do with the services that had been running on the lost node. Generally, this means restarting the services locally that had been running on the dead node. The details of this are decided by you when you configure the resources in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. As we will see with each node&#039;s local storage service, the service is not recovered but instead left stopped.&lt;br /&gt;
&lt;br /&gt;
= The Task Ahead =&lt;br /&gt;
&lt;br /&gt;
Before we start, let&#039;s take a few minutes to discuss clustering and its complexities.&lt;br /&gt;
&lt;br /&gt;
== A Note on Patience ==&lt;br /&gt;
&lt;br /&gt;
When someone wants to become a pilot, they can&#039;t jump into a plane and try to take off. It&#039;s not that flying is inherently hard, but it requires a foundation of understanding. Clustering is the same in this regard; there are many different pieces that have to work together just to get off the ground. &lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;must&#039;&#039;&#039; have patience.&lt;br /&gt;
&lt;br /&gt;
Like a pilot on their first flight, seeing a cluster come to life is a fantastic experience. Don&#039;t rush it! Do your homework and you&#039;ll be on your way before you know it.&lt;br /&gt;
&lt;br /&gt;
Coming back to earth:&lt;br /&gt;
&lt;br /&gt;
Many technologies can be learned by creating a very simple base and then building on it. The classic &amp;quot;Hello, World!&amp;quot; script created when first learning a programming language is an example of this. Unfortunately, there is no real analogue to this in clustering. Even the most basic cluster requires several pieces be in place and working well together. If you try to rush, by ignoring pieces you think are not important, you will almost certainly waste time. A good example is setting aside [[fencing]], thinking that your test cluster&#039;s data isn&#039;t important. The cluster software has no concept of &amp;quot;test&amp;quot;. It treats everything as critical all the time and &#039;&#039;will&#039;&#039; shut down if anything goes wrong.&lt;br /&gt;
&lt;br /&gt;
Take your time, work through these steps, and you will have the foundation cluster sooner than you realize. Clustering is fun &#039;&#039;&#039;because&#039;&#039;&#039; it is a challenge.&lt;br /&gt;
&lt;br /&gt;
== Technologies We Will Use ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Red Hat Enterprise Linux 6&#039;&#039; ([[EL6]]); You can use  a derivative like [[CentOS]] v6. Specifically, we&#039;re using 6.5.&lt;br /&gt;
* &#039;&#039;Red Hat Cluster Services&#039;&#039; &amp;quot;Stable&amp;quot; version 3. This describes the following core components:&lt;br /&gt;
** &#039;&#039;Corosync&#039;&#039;; Provides cluster communications using the [[totem]] protocol.&lt;br /&gt;
** &#039;&#039;Cluster Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[cman]]&amp;lt;/span&amp;gt;); Manages the starting, stopping and managing of the cluster.&lt;br /&gt;
** &#039;&#039;Resource Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[rgmanager]]&amp;lt;/span&amp;gt;); Manages cluster resources and services. Handles service recovery during failures.&lt;br /&gt;
** &#039;&#039;Clustered Logical Volume Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[clvm]]&amp;lt;/span&amp;gt;); Cluster-aware (disk) volume manager. Backs [[GFS2]] [[filesystem]]s and [[KVM]] virtual machines.&lt;br /&gt;
** &#039;&#039;Global File System&#039;&#039; version 2 (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[gfs2]]&amp;lt;/span&amp;gt;); Cluster-aware, concurrently mountable file system.&lt;br /&gt;
* &#039;&#039;Distributed Redundant Block Device&#039;&#039; ([[DRBD]]); Keeps shared data synchronized across cluster nodes.&lt;br /&gt;
* &#039;&#039;KVM&#039;&#039;; [[Hypervisor]] that controls and supports virtual machines.&lt;br /&gt;
* Alteeve&#039;s Niche! Cluster Dashboard and Cluster Monitor&lt;br /&gt;
&lt;br /&gt;
== A Note on Hardware ==&lt;br /&gt;
&lt;br /&gt;
[[Image:RX300-S7_close-up_01.jpg|thumb|right|500px|RX300 S7]]&lt;br /&gt;
&lt;br /&gt;
Another new change is that Alteeve&#039;s Niche!, after years of experimenting with various hardware, has partnered with [[Fujitsu]]. We chose them because of the unparalleled quality of their equipment. &lt;br /&gt;
&lt;br /&gt;
This tutorial can be used on any manufacturer&#039;s hardware, provided it meets the minimum requirements listed below. That said, we strongly recommend readers give Fujitsu&#039;s [http://www.fujitsu.com/fts/products/computing/servers/primergy/rack/ RX-line] of servers a close look. We do not get a discount for this recommendation, we genuinely love the quality of their gear. The only technical argument for using Fujitsu hardware is that we do all our cluster stack monitoring software development on Fujitsu RX200 and RX300 servers, so we can say with confidence that the AN! software components will work well on their kit.&lt;br /&gt;
&lt;br /&gt;
If you use any other hardware vendor and run into any trouble, please don&#039;t hesitate to [[Support|contact us]]. We want to make sure that our HA stack works on as many systems as possible and will be happy to help out. Of course, all Alteeve code is open source, so [https://github.com/digimer/an-cdb contributions] are always welcome, too!&lt;br /&gt;
&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
&lt;br /&gt;
The goal of this tutorial is to help you build an HA platform with zero single points of failure. In order to do this, certain minimum technical requirements must be met.&lt;br /&gt;
&lt;br /&gt;
Bare minimum requirements:&lt;br /&gt;
&lt;br /&gt;
* Two servers with the following;&lt;br /&gt;
** A CPU with [https://en.wikipedia.org/wiki/Hardware-assisted_virtualization hardware-accelerated virtualization]&lt;br /&gt;
** Redundant power supplies&lt;br /&gt;
** [[IPMI]] or vendor-specific [https://en.wikipedia.org/wiki/Integrated_Remote_Management_Controller out-of-band management], like Fujitsu&#039;s iRMC, HP&#039;s iLO, Dell&#039;s iDRAC, etc&lt;br /&gt;
** Six network interfaces, 1 [[Gbit]] or faster (yes, six!)&lt;br /&gt;
** 2 [[GiB]] of RAM and 44.5 GiB of storage for the host operating system, plus sufficient RAM and storage for your VMs&lt;br /&gt;
* Two switched [[PDU]]s; APC-brand recommended but any with a supported [[fence agent]] is fine&lt;br /&gt;
* Two network switches&lt;br /&gt;
&lt;br /&gt;
== Recommended Hardware; A Little More Detail ==&lt;br /&gt;
&lt;br /&gt;
The previous section covered the bare-minimum system requirements for following this tutorial. If you are looking to build an &#039;&#039;Anvil!&#039;&#039; for production, we need to discuss important considerations for selecting hardware.&lt;br /&gt;
&lt;br /&gt;
=== The Most Important Consideration - Storage ===&lt;br /&gt;
&lt;br /&gt;
There is probably no single consideration more important than choosing the storage you will use.&lt;br /&gt;
&lt;br /&gt;
In our years of building &#039;&#039;Anvil!&#039;&#039; HA platforms, we&#039;ve found no single issue more important than storage latency. This is true for all virtualized environments, in fact.&lt;br /&gt;
&lt;br /&gt;
The problem is this:&lt;br /&gt;
&lt;br /&gt;
Multiple servers on shared storage can cause particularly random storage access. Traditional hard drives have disks with mechanical read/write heads on the ends of arms that sweep back and forth across the disk surfaces. These platters are broken up into &amp;quot;tracks&amp;quot; and each track is itself cut up into &amp;quot;sectors&amp;quot;. When a server needs to read or write data, the hard drive needs to sweep the arm over the track it wants and then wait there for the sector it wants to pass underneath.&lt;br /&gt;
&lt;br /&gt;
This time taken to get the read/write head onto the track and then wait for the sector to pass underneath is called &amp;quot;seek latency&amp;quot;. How long this latency actually is depends on a few things:&lt;br /&gt;
&lt;br /&gt;
* How fast are the platters rotating? The faster the platter speed, the less time it takes for a sector to pass under the read/write head.&lt;br /&gt;
* How fast the read/write arms can move and how far do they have to travel between tracks? Highly random read/write requests can cause a lot of head travel and increase seek time.&lt;br /&gt;
* How many read/write requests ([[IOPS]]) can your storage handle? If your storage can not process the incoming read/write requests fast enough, your storage can slow down or stall entirely.&lt;br /&gt;
&lt;br /&gt;
When many people think about hard drives, they generally worry about maximum write speeds. For environments with many virtual servers, this is actually far less important than it might seem. Reducing latency to ensure that read/write requests don&#039;t back up is far more important. This is measured as the storage&#039;s [[IOPS]] performance. If too many requests back up in the cache, storage performance can collapse or stall out entirely. &lt;br /&gt;
&lt;br /&gt;
This is particularly problematic when multiple servers try to boot at the same time. If, for example, a node with multiple servers dies, the surviving node will try to start the lost servers at nearly the same time. This causes a sudden dramatic rise in read requests and can cause all servers to hang entirely, a condition called a &amp;quot;boot storm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, this latency problem can be easily dealt with in one of three ways;&lt;br /&gt;
&lt;br /&gt;
# Use solid-state drives. These have no moving parts, so there is less penalty for highly random read/write requests.&lt;br /&gt;
# Use fast platter drives and proper [[RAID]] controllers with [[write-back]] caching.&lt;br /&gt;
# Isolate each server onto dedicated platter drives.&lt;br /&gt;
&lt;br /&gt;
Each of these solutions have benefits and downsides;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;amp;nbsp;&lt;br /&gt;
!Pro&lt;br /&gt;
!Con&lt;br /&gt;
|-&lt;br /&gt;
|Fast drives + [[Write-back caching]]&lt;br /&gt;
|15,000rpm SAS drives are extremely reliable and the high rotation speeds minimize latency caused by waiting for sectors to pass under the read/write heads. Using multiple drives in [[RAID]] [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_5|level 5]] or [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_6|level 6]] breaks up reads and writes into smaller pieces, allowing requests to be serviced quickly and to help keep the read/write buffer empty. Write-back caching allows RAM-like write speeds and the ability to re-order disk access to minimize head movement.&lt;br /&gt;
|The main con is the number of disks needed to get effective performance gains from [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|striping]]. Alteeve always uses a minimum of six disks, but many entry-level servers support a maximum of 4 drives. You need to account for the number of disks you plan to use when selecting your hardware.&lt;br /&gt;
|-&lt;br /&gt;
|SSDs&lt;br /&gt;
|They have no moving parts, so read and write requests do not have to wait for mechanical movements to happen, drastically reducing latency. The minimum number of drives for SSD-based configuration is two.&lt;br /&gt;
|Solid state drives use [[NAND]] flash, which can only be written to a finite number of times. All drives in our &#039;&#039;Anvil!&#039;&#039; will be written to roughly the same amount, so hitting this write-limit could mean that all drives in both nodes would fail at nearly the same time. Avoiding this requires careful monitoring of the drives and replacing them before their write limits are hit.&lt;br /&gt;
{{note|1=Enterprise grade SSDs are designed to handle highly random, multi-threaded workloads and come at a significant cost. Consumer-grade SSDs are designed principally for single threaded, large accesses and do not offer the same benefits.}}&lt;br /&gt;
|-&lt;br /&gt;
|Isolated Storage&lt;br /&gt;
|Dedicating hard drives to virtual servers avoids the highly random read/write issues found when multiple servers share the same storage. This allows for the safe use of cheap, inexpensive hard drives. This also means that dedicated hardware RAID controllers with battery-backed cache are not needed. This makes it possible to save a good amount of money in the hardware design.&lt;br /&gt;
|The obvious down-side to isolated storage is that you significantly limit the number of servers you can host on your &#039;&#039;Anvil!&#039;&#039;. If you only need to support one or two servers, this should not be an issue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last piece to consider is the interface of the drives used, be they SSDs or traditional HDDs. The two common interface types are [[SATA]] and [[SAS]]. &lt;br /&gt;
&lt;br /&gt;
* SATA HDD drives generally have a platter speed of 7,200rpm. The SATA interface has limited instruction set and provides minimal health reporting. These are &amp;quot;consumer&amp;quot; grade devices that are far less expensive, and far less reliable, than SAS drives.&lt;br /&gt;
* SAS drives are generally aimed at the enterprise environment and are built to much higher quality standards. SAS HDDs have rotational speeds of up to 15,000rpm and can handle far more read/write operations per second. Enterprise SSDs using the SAS interface are also much more reliable than their commercial counterpart. The main downside to SAS drives is their cost.  &lt;br /&gt;
&lt;br /&gt;
In all production environments, we strongly, strongly recommend SAS-connected drives. For non-production environments, SATA drives are fine.&lt;br /&gt;
&lt;br /&gt;
==== Extra Security - LSI SafeStore ====&lt;br /&gt;
&lt;br /&gt;
If security is a particular concern of yours, then you can look at using [https://en.wikipedia.org/wiki/Hardware-based_full_disk_encryption self-encrypting] hard drives along with LSI&#039;s [[LSI SafeStore|SafeStore]] option. An example hard drive, which we&#039;ve tested and validated, would be the Seagate [http://www.seagate.com/internal-hard-drives/enterprise-hard-drives/hdd/enterprise-performance-10K-hdd/ ST1800MM0038] drives. In general, if the drive advertises &amp;quot;[http://www.seagate.com/tech-insights/protect-data-with-seagate-secure-self-encrypting-drives-master-ti/ SED]&amp;quot; support, it should work fine.&lt;br /&gt;
&lt;br /&gt;
The provides the ability to:&lt;br /&gt;
* Encrypt all data with [https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES-256] grade encryption without a performance hit.&lt;br /&gt;
* Require a pass phrase on boot to decrypt the server&#039;s data.&lt;br /&gt;
* Protect the contents of the drives while &amp;quot;at rest&amp;quot; (ie: while being shipped somewhere).&lt;br /&gt;
* Execute a [https://github.com/digimer/striker/blob/master/tools/anvil-self-destruct self-destruct] sequence.&lt;br /&gt;
&lt;br /&gt;
Obviously, most users won&#039;t need this, but it might be useful to some users in sensitive environments like embassies in less than friendly host countries.&lt;br /&gt;
&lt;br /&gt;
=== RAM - Preparing for Degradation ===&lt;br /&gt;
&lt;br /&gt;
RAM is a far simpler topic than storage, thankfully. Here, all you need to do is add up how much RAM you plan to assign to servers, add at least 2 [[GiB]] for the host, and then install that much memory in both of your nodes. &lt;br /&gt;
&lt;br /&gt;
In production, there are two technologies you will want to consider;&lt;br /&gt;
&lt;br /&gt;
* [[ECC]], error-correcting code, provide the ability for RAM to recover from single-[[bit]] errors. If you are familiar with how [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|parity]] in RAID arrays work, ECC in RAM is the same idea. This is often included in server-class hardware by default. It is highly recommended.&lt;br /&gt;
* [http://www.fujitsu.com/global/services/computing/server/sparcenterprise/technology/availability/memory.html Memory Mirroring] is, continuing our storage comparison, [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] for RAM. All writes to memory go to two different chips. Should one fail, the contents of the RAM can still be read from the surviving module.&lt;br /&gt;
&lt;br /&gt;
=== Never Over-Provision! ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Over-provisioning&amp;quot;, also called &amp;quot;[https://en.wikipedia.org/wiki/Thin_provisioning thin provisioning]&amp;quot; is a concept made popular in many &amp;quot;cloud&amp;quot; technologies. It is a concept that has almost no place in HA environments.&lt;br /&gt;
&lt;br /&gt;
A common example is creating virtual disks of a given apparent size, but which only pull space from real storage as needed. So if you created a &amp;quot;thin&amp;quot; virtual disk that was 80 [[GiB]] large, but only 20 GiB worth of data was used, only 20 GiB from the real storage would be used. &lt;br /&gt;
&lt;br /&gt;
In essence; Over-provisioning is where you allocate more resources to servers than the nodes can actually provide, banking on the hopes that most servers will not use all of the resources allocated to them. The danger here, and the reason it has almost no place in HA, is that if the servers collectively use more resources than the nodes can provide, something is going to crash.&lt;br /&gt;
&lt;br /&gt;
=== CPU Cores - Possibly Acceptable Over-Provisioning ===&lt;br /&gt;
&lt;br /&gt;
Over provisioning of RAM and storage is never acceptable in an HA environment, as mentioned. Over-allocating CPU cores is possibly acceptable though.&lt;br /&gt;
&lt;br /&gt;
When selecting which CPUs to use in your nodes, the number of cores and the speed of the cores will determine how much computational horse-power you have to allocate to your servers. The main considerations are:&lt;br /&gt;
&lt;br /&gt;
* Core speed; Any given &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; can be processed by a single CPU core at a time. The faster the given core is, the faster it can process any given request. Many applications do not support [https://en.wikipedia.org/wiki/Thread_%28computing%29#Multithreading multithreading], meaning that the only way to improve performance is to use faster cores, not more cores.&lt;br /&gt;
* Core count; Some applications support breaking up jobs into many threads, and passing them to multiple CPU cores at the same time for simultaneous processing. This way, the application feels faster to users because each CPU has to do less work to get a job done. Another benefit of multiple cores is that if one application consumes the processing power of a single core, other cores remain available for other applications, preventing processor congestion.&lt;br /&gt;
&lt;br /&gt;
In processing, each CPU &amp;quot;[https://en.wikipedia.org/wiki/Multi-core_processor core]&amp;quot; can handle one program &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; at a time. Since the earliest days of [https://en.wikipedia.org/wiki/Multitasking multitasking], operating systems have been able to handle threads waiting for a CPU resource to free up. So the risk of over-provisioning CPUs is restricted to performance issues only.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re building an &#039;&#039;Anvil!&#039;&#039; to support multiple servers and it&#039;s important that, no matter how busy the other servers are, the performance of each server can not degrade, then you need to be sure you have as many real CPU cores as you plan to assign to servers.&lt;br /&gt;
&lt;br /&gt;
So for example, if you plan to have three servers and you plan to allocate each server four virtual CPU cores, you need a minimum of 13 real CPU cores (3 servers x 4 cores each plus at least one core for the node). In this scenario, you will want to choose servers with dual 8-core CPUs, for a total of 16 available real CPU cores. You may choose to buy two 6-core CPUs, for a total of 12 real cores, but you risk congestion still. If all three servers fully utilize their four cores at the same time, the host OS will be left with no available core for its software, which manages the HA stack.&lt;br /&gt;
&lt;br /&gt;
In many cases, however, risking a performance loss under periods of high CPU load is acceptable. In these cases, allocating more virtual cores than you have real cores is fine. Should the load of the servers climb to a point where all real cores are under 100% utilization, then some applications will slow down as they wait for their turn in the CPU.&lt;br /&gt;
&lt;br /&gt;
In the end, the decision whether to over-provision CPU cores or not, and if so by how much, is up to you, the reader. Remember to consider balancing out faster cores with the number of cores. If your expected load will be short bursts of computationally intense jobs, then few-but-faster cores may be the best solution.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Hyper-Threading ====&lt;br /&gt;
&lt;br /&gt;
Intel&#039;s [https://en.wikipedia.org/wiki/Hyper-threading hyper-threading] technology can make a CPU appear to the OS to have twice as many real cores than it actually has. For example, a CPU listed as &amp;quot;4c/8t&amp;quot; (four cores, eight threads) will appear to the node as an 8-core CPU. In fact, you only have four cores and the additional four cores are emulated attempts to make more efficient use of the processing of each core. &lt;br /&gt;
&lt;br /&gt;
Simply put, the idea behind this technology is to &amp;quot;slip in&amp;quot; a second thread when the CPU would otherwise be idle. For example, if the CPU core has to wait for memory to be fetched for the currently active thread, instead of sitting idle, a thread in the second core will be worked on. &lt;br /&gt;
&lt;br /&gt;
How much benefit this gives you in the real world is debatable and highly depended on your applications. For the purposes of HA, it&#039;s recommended to not count the &amp;quot;HT cores&amp;quot; as real cores. That is to say, when calculating load, treat &amp;quot;4c/8t&amp;quot; CPUs as a 4-core CPUs.&lt;br /&gt;
&lt;br /&gt;
=== Six Network Interfaces, Seriously? ===&lt;br /&gt;
&lt;br /&gt;
Yes, seriously.&lt;br /&gt;
&lt;br /&gt;
Obviously, you can put everything on a single network card and your HA software will work, but it would not be advised.&lt;br /&gt;
&lt;br /&gt;
We will go into the network configuration at length later on. For now, here&#039;s an overview:&lt;br /&gt;
&lt;br /&gt;
* Each network needs two links in order to be fault-tolerant. One link will go to the first network switch and the second link will go to the second network switch. This way, the failure of a network cable, port or switch will not interrupt traffic.&lt;br /&gt;
* There are three main networks in an &#039;&#039;Anvil!&#039;&#039;;&lt;br /&gt;
** Back-Channel Network; This is used by the cluster stack and is sensitive to latency. Delaying traffic on this network can cause the nodes to &amp;quot;partition&amp;quot;, breaking the cluster stack.&lt;br /&gt;
** Storage Network; All disk writes will travel over this network. As such, it is easy to saturate this network. Sharing this traffic with other services would mean that it&#039;s very possible to significantly impact network performance under high disk write loads. For this reason, it is isolated.&lt;br /&gt;
** Internet-Facing Network; This network carries traffic to and from your servers. By isolating this network, users of your servers will never experience performance loss during storage or cluster high loads. Likewise, if your users place a high load on this network, it will not impact the ability of the &#039;&#039;Anvil!&#039;&#039; to function properly. It also isolates untrusted network traffic.&lt;br /&gt;
&lt;br /&gt;
So, three networks, each using two links for redundancy, means that we need six network interfaces. It is strongly recommended that you use three separate dual-port network cards. Using a single network card, as we will discuss in detail later, leaves you vulnerable to losing entire networks should the controller fail.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Dedicated IPMI Interfaces ====&lt;br /&gt;
&lt;br /&gt;
Some server manufacturers provide access to [[IPMI]] using the same physical interface as one of the on-board network cards. Usually these companies provide optional upgrades to break the IPMI connection out to a dedicated network connector.&lt;br /&gt;
&lt;br /&gt;
Whenever possible, it is recommended that you go with a dedicated IPMI connection.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve found that it rarely, if ever, is possible for a node to talk to its own network interface using a shared physical port. This is not strictly a problem, but it can certainly make testing and diagnostics easier when the node can ping and query its own IPMI interface over the network.&lt;br /&gt;
&lt;br /&gt;
=== Network Switches ===&lt;br /&gt;
&lt;br /&gt;
The ideal switches to use in HA clusters are [https://en.wikipedia.org/wiki/Stackable_switch stackable] and [https://en.wikipedia.org/wiki/Managed_switch managed] switches in pairs. At the very least, a pair of switches that support [https://en.wikipedia.org/wiki/Virtual_LAN VLANs] is recommended. None of this is strictly required, but here are the reasons they&#039;re recommended:&lt;br /&gt;
&lt;br /&gt;
* VLAN allows for totally isolating the [[BCN]], [[SN]] and [[IFN]] traffic. This adds security and reduces broadcast traffic.&lt;br /&gt;
* Managed switches provide a unified interface for configuring both switches at the same time. This drastically simplifies complex configurations, like setting up VLANs that span the physical switches.&lt;br /&gt;
* Stacking provides a link between the two switches that effectively makes them work like one. Generally, the bandwidth available in the stack cable is much higher than the bandwidth of individual ports. This provides a high-speed link for all three VLANs in one cable and it allows for multiple links to fail without risking performance degradation. We&#039;ll talk more about this later.&lt;br /&gt;
&lt;br /&gt;
Beyond these suggested features, there are a few other things to consider when choosing switches:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!Consideration&lt;br /&gt;
|-&lt;br /&gt;
|[https://en.wikipedia.org/wiki/Maximum_transmission_unit MTU] size&lt;br /&gt;
|&lt;br /&gt;
# The default packet size on a network is 1500 [[bytes]]. If you build your VLANs in software, you need to account for the extra size needed for the VLAN header. If your switch supports &amp;quot;[https://en.wikipedia.org/wiki/Jumbo_Frames Jumbo Frames]&amp;quot;, then there should be no problem. However, some cheap switches do not support jumbo frames, requiring you to reduce the MTU size value for the interfaces on your nodes.&lt;br /&gt;
# If you have particularly large chunks of data to transmit, you may want to enable the largest MTU possible. This maximum value is determined by the smallest MTU in your network equipment. If you have nice network cards that support traditional 9 [[KiB]] MTU, but you have a cheap switch that supports a small jumbo frame, say 4 KiB, your effective MTU is 4 [[KiB]].&lt;br /&gt;
|-&lt;br /&gt;
|Packets Per Second&lt;br /&gt;
|This is a measure of how many packets can be routed per second, and generally is a reflection of the switch&#039;s processing power and memory. Cheaper switches will not have the ability to route a high number of packets at the same time, potentially causing congestion.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multicast]] Groups&lt;br /&gt;
|Some fancy switches, like some Cisco hardware, don&#039;t maintain multicast groups persistently. The cluster software uses multicast for communication, so if your switch drops a multicast group, it will cause your cluster to partition. If you have a managed switch, ensure that persistent multicast groups are enabled. We&#039;ll talk more about this later.&lt;br /&gt;
|-&lt;br /&gt;
|Port speed and count versus Internal Fabric Bandwidth&lt;br /&gt;
|A switch that has, say, 48 [[Gbps]] ports may not be able to route 48 Gbps. This is a problem similar to over-provisioning we discussed above. If an inexpensive 48 port switch has an internal switch fabric of only 20 Gbps, then it can handle only up to 20 saturated ports at a time. Be sure to review the internal fabric capacity and make sure it&#039;s high enough to handle all connected interfaces running full speed. Note, of course, that only one link in a given [[network bonding|bond]] will be active at a time.&lt;br /&gt;
|-&lt;br /&gt;
|Uplink speed&lt;br /&gt;
|If you have a gigabit switch and you simply link the ports between the two switches, the link speed will be limited to 1 gigabit. Normally, all traffic will be kept on one switch, so this is fine. If a single link fails over to the backup switch, then its traffic will bounce up via the uplink cable to the main switch at full speed. However, if a second link fails, both will be sharing the single gigabit uplink, so there is a risk of congestion on the link. If you can&#039;t get stacked switches, which generally have 10 Gbps speeds or higher, then look for switches with 10 Gbps dedicated uplink ports and use those for uplinks.&lt;br /&gt;
|-&lt;br /&gt;
|Uplinks and VLANs&lt;br /&gt;
|When using normal ports for uplinks with VLANs defined in the switch, each uplink port will be restricted to the VLAN it is a member of. In this case, you will need one uplink cable per VLAN.&lt;br /&gt;
|-&lt;br /&gt;
|Port [https://en.wikipedia.org/wiki/Link_aggregation Trunking]&lt;br /&gt;
|If your existing network supports it, choosing a switch with port trunking provides a backup link from the foundation pack switches to the main network. This extends the network redundancy out to the rest of your network. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are numerous other valid considerations when choosing network switches for your &#039;&#039;Anvil!&#039;&#039;. These are the most prescient considerations, though.&lt;br /&gt;
&lt;br /&gt;
=== Why Switched PDUs? ===&lt;br /&gt;
&lt;br /&gt;
We will discuss this in detail later on, but in short, when a node stops responding, we can not simply assume that it is dead. To do so would be to risk a &amp;quot;[[split-brain]]&amp;quot; condition which can lead to data divergence, data loss and data corruption.&lt;br /&gt;
&lt;br /&gt;
To deal with this, we need a mechanism of putting a node that is in an unknown state into a known state. A process called &amp;quot;[[fencing]]&amp;quot;. Many people who build HA platforms use the [[IPMI]] interface for this purpose, as will we. The idea here is that, when a node stops responding, the surviving node connects to the lost node&#039;s [[IPMI]] interface and forces the machine to power off. The IPMI [[BMC]] is, effectively, a little computer inside the main computer, so it will work regardless of what state the node itself is in.&lt;br /&gt;
&lt;br /&gt;
Once the node has been confirmed to be off, the services that had been running on it can be restarted on the remaining good node, safe in knowing that the lost peer is not also hosting these services. In our case, these &amp;quot;services&amp;quot; are the shared storage and the virtual servers.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this though. Actually, two.&lt;br /&gt;
&lt;br /&gt;
# The IPMI draws its power from the same power source as the server itself. If the host node loses power entirely, IPMI goes down with the host.&lt;br /&gt;
# The IPMI BMC has a single network interface and it is a single device. &lt;br /&gt;
&lt;br /&gt;
If we relied on IPMI-based fencing alone, we&#039;d have a single point of failure. If the surviving node can not put the lost node into a known state, it will intentionally hang. The logic being that a hung cluster is better than risking corruption or a [[split-brain]]. This means that, with IPMI-based fencing alone, the loss of power to a single node would not be automatically recoverable.&lt;br /&gt;
&lt;br /&gt;
That just will not do!&lt;br /&gt;
&lt;br /&gt;
To make fencing redundant, we will use switched [[PDU]]s. Think of these as network-connected power bars.&lt;br /&gt;
&lt;br /&gt;
Imagine now that one of the nodes blew itself up. The surviving node would try to connect to its IPMI interface and, of course, get no response. Then it would log into both PDUs (one behind either side of the redundant power supplies) and cut the power going to the node. By doing this, we now have a way of putting a lost node into a known state.&lt;br /&gt;
&lt;br /&gt;
So now, no matter how badly things go wrong, we can always recover!&lt;br /&gt;
&lt;br /&gt;
=== Network Managed UPSes Are Worth It ===&lt;br /&gt;
&lt;br /&gt;
We have found that a surprising number of issues that affect service availability are power related. A network-connected smart UPS allows you to monitor the power coming from the building mains. Thanks to this, we&#039;ve been able to detect far more than simple &amp;quot;lost power&amp;quot; events. We&#039;ve been able to detect failing transformers and regulators, over and under voltage events and so on. Events that, if caught ahead of time, avoid full power outages. It also protects the rest of your gear that isn&#039;t behind a UPS.&lt;br /&gt;
&lt;br /&gt;
So strictly speaking, you don&#039;t need network managed UPSes. However, we have found them to be [http://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427ebgdg6ijlui worth their weight in gold]. We will, of course, be using them in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Dashboard Servers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; will be managed by [[AN!CDB - Cluster Dashboard]], a small little dedicated server. This can be a virtual machine on a laptop or desktop, or a dedicated little server. All that matters is that it can run [[RHEL]] or [[CentOS]] version 6 with a minimal desktop.&lt;br /&gt;
&lt;br /&gt;
Normally, we setup a couple of [http://www.asus.com/ca-en/Eee_Box_PCs/EeeBox_PC_EB1033 ASUS EeeBox] machines, for redundancy of course, hanging off the back of a monitor. Users can connect to the dashboard using a browser from any device and control the servers and nodes easily from it. It also provides [https://en.wikipedia.org/wiki/KVM_switch KVM-like] access to the servers on the &#039;&#039;Anvil!&#039;&#039;, allowing them to work on the servers when they can&#039;t connect over the network. For this reason, you will probably want to pair up the dashboard machines with a monitor that offers a decent resolution to make it easy to see the desktop of the hosted servers.&lt;br /&gt;
&lt;br /&gt;
== What You Should Know Before Beginning ==&lt;br /&gt;
&lt;br /&gt;
It is assumed that you are familiar with Linux systems administration, specifically [[Red Hat]] [[Enterprise Linux]] and its derivatives. You will need to have somewhat advanced networking experience as well. You should be comfortable working in a terminal (directly or over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ssh]]&amp;lt;/span&amp;gt;). Familiarity with [[XML]] will help, but is not terribly required as its use here is pretty self-evident.&lt;br /&gt;
&lt;br /&gt;
If you feel a little out of depth at times, don&#039;t hesitate to set this tutorial aside. Browse over to the components you feel the need to study more, then return and continue on. Finally, and perhaps most importantly, you &#039;&#039;&#039;must&#039;&#039;&#039; have patience! If you have a manager asking you to &amp;quot;go live&amp;quot; with a cluster in a month, tell him or her that it simply &#039;&#039;&#039;won&#039;t happen&#039;&#039;&#039;. If you rush, you will skip important points and &#039;&#039;&#039;you will fail&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Patience is vastly more important than any pre-existing skill.&lt;br /&gt;
&lt;br /&gt;
== A Word on Complexity ==&lt;br /&gt;
&lt;br /&gt;
Introducing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Fabimer principle&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Clustering is not inherently hard, but it is inherently complex. Consider:&lt;br /&gt;
&lt;br /&gt;
* Any given program has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; bugs.&lt;br /&gt;
** [[RHCS]] uses; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, and many more smaller apps.&lt;br /&gt;
** We will be adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DRBD&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GFS2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;KVM&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Right there, we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N * 10&amp;lt;/span&amp;gt; possible bugs. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;.&lt;br /&gt;
* A cluster has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt; nodes.&lt;br /&gt;
** In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; nodes, each with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; networks across &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; interfaces bonded into pairs.&lt;br /&gt;
** The network infrastructure (Switches, routers, etc). We will be using two managed switches, adding another layer of complexity.&lt;br /&gt;
** This gives us another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y * (2*(3*2))+2&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;+2&amp;lt;/span&amp;gt; for managed switches. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;B&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Let&#039;s add the human factor. Let&#039;s say that a person needs roughly 5 years of cluster experience to be considered an proficient. For each year less than this, add a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Z&amp;lt;/span&amp;gt; &amp;quot;oops&amp;quot; factor, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(5-Z) * 2&amp;lt;/span&amp;gt;. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt;.&lt;br /&gt;
* So, finally, add up the complexity, using this tutorial&#039;s layout, 0-years of experience and managed switches.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(N * 10) * (Y * (2*(3*2))+2) * ((5-0) * 2) == (A * B * C)&amp;lt;/span&amp;gt; == an-unknown-but-big-number.&lt;br /&gt;
&lt;br /&gt;
This isn&#039;t meant to scare you away, but it is meant to be a sobering statement. Obviously, those numbers are somewhat artificial, but the point remains.&lt;br /&gt;
&lt;br /&gt;
Any one piece is easy to understand, thus, clustering is inherently easy. However, given the large number of variables, you must really understand all the pieces and how they work together. &#039;&#039;&#039;&#039;&#039;DO NOT&#039;&#039;&#039;&#039;&#039; think that you will have this mastered and working in a month. Certainly don&#039;t try to sell clusters as a service without a &#039;&#039;lot&#039;&#039; of internal testing.&lt;br /&gt;
&lt;br /&gt;
Clustering is kind of like chess. The rules are pretty straight forward, but the complexity can take some time to master.&lt;br /&gt;
&lt;br /&gt;
= Overview of Components =&lt;br /&gt;
&lt;br /&gt;
When looking at a cluster, there is a tendency to want to dive right into the configuration file. That is not very useful in clustering.&lt;br /&gt;
&lt;br /&gt;
* When you look at the configuration file, it is quite short.&lt;br /&gt;
&lt;br /&gt;
Clustering isn&#039;t like most applications or technologies. Most of us learn by taking something such as a configuration file, and tweaking it to see what happens. I tried that with clustering and learned only what it was like to bang my head against the wall.&lt;br /&gt;
&lt;br /&gt;
* Understanding the parts and how they work together is critical.&lt;br /&gt;
&lt;br /&gt;
You will find that the discussion on the components of clustering, and how those components and concepts interact, will be much longer than the initial configuration. It is true that we could talk very briefly about the actual syntax, but it would be a disservice. Please don&#039;t rush through the next section, or worse, skip it and go right to the configuration. You will waste far more time than you will save.&lt;br /&gt;
&lt;br /&gt;
* Clustering is easy, but it has a complex web of inter-connectivity. You must grasp this network if you want to be an effective cluster administrator!&lt;br /&gt;
&lt;br /&gt;
== Component; Cman ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; portion of the the cluster is the &#039;&#039;&#039;c&#039;&#039;&#039;luster &#039;&#039;&#039;man&#039;&#039;&#039;ager. In the 3.0 series used in [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; acts mainly as a [[quorum]] provider. That is, is adds up the votes from the cluster members and decides if there is a simple majority. If there is, the cluster is &amp;quot;quorate&amp;quot; and is allowed to provide cluster services. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; service will be used to start and stop all of the components needed to make the cluster operate.&lt;br /&gt;
&lt;br /&gt;
== Component; Corosync ==&lt;br /&gt;
&lt;br /&gt;
Corosync is the heart of the cluster. Almost all other cluster compnents operate though this.&lt;br /&gt;
&lt;br /&gt;
In Red Hat clusters, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is configured via the central &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. It can be configured directly in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt;, but given that we will be building an RHCS cluster, we will only use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. That said, almost all &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt; options are available in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. This is important to note as you will see references to both configuration files when searching the Internet.&lt;br /&gt;
&lt;br /&gt;
Corosync sends messages using [[multicast]] messaging by default. Recently, [[unicast]] support has been added, but due to network latency, it is only recommended for use with small clusters of two to four nodes. We will be using [[multicast]] in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== A Little History ===&lt;br /&gt;
&lt;br /&gt;
There were significant changes between [[RHCS]] the old version 2 and version 3 available on [[EL6]], which we are using.&lt;br /&gt;
&lt;br /&gt;
In the RHCS version 2, there was a component called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;openais&amp;lt;/span&amp;gt; which provided &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt;. The OpenAIS project was designed to be the heart of the cluster and was based around the [http://www.saforum.org/ Service Availability Forum]&#039;s [http://www.saforum.org/Application-Interface-Specification~217404~16627.htm Application Interface Specification]. AIS is an open [[API]] designed to provide inter-operable high availability services.&lt;br /&gt;
&lt;br /&gt;
In 2008, it was decided that the AIS specification was overkill for most clustered applications being developed in the open source community.  At that point, OpenAIS was split in to two projects: Corosync and OpenAIS. The former, Corosync, provides totem, cluster membership, messaging, and basic APIs for use by clustered applications, while the OpenAIS project became an optional add-on to corosync for users who want the full AIS API.&lt;br /&gt;
&lt;br /&gt;
You will see a lot of references to OpenAIS while searching the web for information on clustering. Understanding its evolution will hopefully help you avoid confusion.&lt;br /&gt;
&lt;br /&gt;
=== The Future of Corosync ===&lt;br /&gt;
&lt;br /&gt;
In [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is version 1.4. Upstream, however, it&#039;s passed version 2. One of the major changes in the 2+ version is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; becomes a quorum provider, helping to remove the need for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. If you experiment with clustering on [[Fedora]], for example, you will find that cman is gone entirely.&lt;br /&gt;
&lt;br /&gt;
== Concept; Quorum ==&lt;br /&gt;
&lt;br /&gt;
[[Quorum]] is defined as the minimum set of hosts required in order to provide clustered services and is used to prevent [[split-brain]] situations.&lt;br /&gt;
&lt;br /&gt;
The quorum algorithm used by the RHCS cluster is called &amp;quot;simple majority quorum&amp;quot;, which means that more than half of the hosts must be online and communicating in order to provide service. While simple majority quorum is a very common quorum algorithm, other quorum algorithms exist ([[grid quorum]], [[YKD Dyanamic Linear Voting]], etc.).&lt;br /&gt;
&lt;br /&gt;
The idea behind quorum is that, when a cluster splits into two or more partitions, which ever group of machines has quorum can safely start clustered services knowing that no other lost nodes will try to do the same.&lt;br /&gt;
&lt;br /&gt;
Take this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a cluster of four nodes, each with one vote.&lt;br /&gt;
** The cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;. A clear majority, in this case, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; because &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(4/2)+1&amp;lt;/span&amp;gt;, rounded down, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Now imagine that there is a failure in the network equipment and one of the nodes disconnects from the rest of the cluster.&lt;br /&gt;
** You now have two partitions; One partition contains three machines and the other partition has one.&lt;br /&gt;
** The three machines will have quorum, and the other machine will lose quorum.&lt;br /&gt;
** The partition with quorum will reconfigure and continue to provide cluster services.&lt;br /&gt;
** The partition without quorum will withdraw from the cluster and shut down all cluster services.&lt;br /&gt;
&lt;br /&gt;
When the cluster reconfigures and the partition wins quorum, it will fence the node(s) in the partition without quorum. Once the fencing has been confirmed successful, the partition with quorum will begin accessing clustered resources, like shared filesystems.&lt;br /&gt;
&lt;br /&gt;
This also helps explain why an even &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; is not enough to have quorum, a common question for people new to clustering. Using the above scenario, imagine if the split were 2 and 2 nodes. Because either can&#039;t be sure what the other would do, neither can safely proceed. If we allowed an even 50% to have quorum, both partition might try to take over the clustered services and disaster would soon follow.&lt;br /&gt;
&lt;br /&gt;
There is one, and &#039;&#039;&#039;only&#039;&#039;&#039; one except to this rule.&lt;br /&gt;
&lt;br /&gt;
In the case of a two node cluster, as we will be building here, any failure results in a 50/50 split. If we enforced quorum in a two-node cluster, there would never be high availability because and failure would cause both nodes to withdraw. The risk with this exception is that we now place the entire safety of the cluster on [[fencing]], a concept we will cover in a second. Fencing is a second line of defense and something we are loath to rely on alone.&lt;br /&gt;
&lt;br /&gt;
Even in a two-node cluster though, proper quorum can be maintained by using a quorum disk, called a [[qdisk]]. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; on a [[DRBD]] resource comes with its own problems, so we will not be able to use it here.&lt;br /&gt;
&lt;br /&gt;
== Concept; Virtual Synchrony ==&lt;br /&gt;
&lt;br /&gt;
Many cluster operations, like distributed locking and so on, have to occur in the same order across all nodes. This concept is called &amp;quot;virtual synchrony&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; using &amp;quot;closed process groups&amp;quot;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[CPG]]&amp;lt;/span&amp;gt;. A closed process group is simply a private group of processes in a cluster. Within this closed group, all messages between members are ordered. Delivery, however, is not guaranteed. If a member misses messages, it is up to the member&#039;s application to decide what action to take.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at two scenarios showing how locks are handled using CPG:&lt;br /&gt;
&lt;br /&gt;
* The cluster starts up cleanly with two members.&lt;br /&gt;
* Both members are able to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Both want to start it, but need a lock from [[DLM]] to do so.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member has its totem token, and sends its request for the lock.&lt;br /&gt;
** DLM issues a lock for that service to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member requests a lock for the same service.&lt;br /&gt;
** DLM rejects the lock request.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member successfully starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; and announces this to the CPG members.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sees that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; is now running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and no longer tries to start the service.&lt;br /&gt;
&lt;br /&gt;
* The two members want to write to a common area of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; GFS2 partition.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sends a request for a DLM lock against the FS, gets it.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; sends a request for the same lock, but DLM sees that a lock is pending and rejects the request.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member finishes altering the file system, announces the changed over CPG and releases the lock.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member updates its view of the filesystem, requests a lock, receives it and proceeds to update the filesystems.&lt;br /&gt;
** It completes the changes, annouces the changes over CPG and releases the lock.&lt;br /&gt;
&lt;br /&gt;
Messages can only be sent to the members of the CPG while the node has a totem token from corosync.&lt;br /&gt;
&lt;br /&gt;
== Concept; Fencing ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=DO NOT BUILD A CLUSTER WITHOUT PROPER, WORKING AND TESTED FENCING.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:fence_meme.jpg|right|300px|thumb|Laugh, but this is a weekly conversation.]]&lt;br /&gt;
&lt;br /&gt;
Fencing is a &#039;&#039;&#039;absolutely critical&#039;&#039;&#039; part of clustering. Without &#039;&#039;&#039;fully&#039;&#039;&#039; working fence devices, &#039;&#039;&#039;&#039;&#039;your cluster will fail&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sorry, I promise that this will be the only time that I speak so strongly. Fencing really is critical, and explaining the need for fencing is nearly a weekly event. &lt;br /&gt;
&lt;br /&gt;
So then, let&#039;s discuss fencing.&lt;br /&gt;
&lt;br /&gt;
When a node stops responding, an internal timeout and counter start ticking away. During this time, no [[DLM]] locks are allowed to be issued. Anything using DLM, including &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, are effectively hung. The hung node is detected using a totem token timeout. That is, if a token is not received from a node within a period of time, it is considered lost and a new token is sent. After a certain number of lost tokens, the cluster declares the node dead. The remaining nodes reconfigure into a new cluster and, if they have quorum (or if quorum is ignored), a fence call against the silent node is made.&lt;br /&gt;
&lt;br /&gt;
The fence daemon will look at the cluster configuration and get the fence devices configured for the dead node. Then, one at a time and in the order that they appear in the configuration, the fence daemon will call those fence devices, via their fence agents, passing to the fence agent any configured arguments like username, password, port number and so on. If the first fence agent returns a failure, the next fence agent will be called. If the second fails, the third will be called, then the forth and so on. Once the last (or perhaps only) fence device fails, the fence daemon will retry again, starting back at the start of the list. It will do this indefinitely until one of the fence devices succeeds.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow, in point form:&lt;br /&gt;
&lt;br /&gt;
* The totem token moves around the cluster members. As each member gets the token, it sends sequenced messages to the CPG members.&lt;br /&gt;
* The token is passed from one node to the next, in order and continuously during normal operation.&lt;br /&gt;
* Suddenly, one node stops responding.&lt;br /&gt;
** A timeout starts (~&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238&amp;lt;/span&amp;gt;ms by default), and each time the timeout is hit, and error counter increments and a replacement token is created.&lt;br /&gt;
** The silent node responds before the failure counter reaches the limit.&lt;br /&gt;
*** The failure counter is reset to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
*** The cluster operates normally again.&lt;br /&gt;
* Again, one node stops responding.&lt;br /&gt;
** Again, the timeout begins. As each totem token times out, a new packet is sent and the error count increments.&lt;br /&gt;
** The error counts exceed the limit (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; errors is the default); Roughly one second has passed (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238ms * 4&amp;lt;/span&amp;gt; plus some overhead).&lt;br /&gt;
** The node is declared dead.&lt;br /&gt;
** The cluster checks which members it still has, and if that provides enough votes for quorum.&lt;br /&gt;
*** If there are too few votes for quorum, the cluster software freezes and the node(s) withdraw from the cluster.&lt;br /&gt;
*** If there are enough votes for quorum, the silent node is declared dead.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, telling it to fence the node.&lt;br /&gt;
**** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon notifies [[DLM]] and locks are blocked.&lt;br /&gt;
**** Which fence device(s) to use, that is, what &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to call and what arguments to pass, is gathered.&lt;br /&gt;
**** For each configured fence device:&lt;br /&gt;
***** The agent is called and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; waits for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to exit.&lt;br /&gt;
***** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt;&#039;s exit code is examined. If it&#039;s a success, recovery starts. If it failed, the next configured fence agent is called.&lt;br /&gt;
**** If all (or the only) configured fence fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will start over.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will wait and loop forever until a fence agent succeeds. During this time, &#039;&#039;&#039;the cluster is effectively hung&#039;&#039;&#039;.&lt;br /&gt;
*** Once a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; succeeds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; notifies DLM and lost locks are recovered.&lt;br /&gt;
**** [[GFS2]] partitions recover using their journal.&lt;br /&gt;
**** Lost cluster resources are recovered as per &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;&#039;s configuration (including file system recovery as needed).&lt;br /&gt;
* Normal cluster operation is restored, minus the lost node.&lt;br /&gt;
&lt;br /&gt;
This skipped a few key things, but the general flow of logic should be there.&lt;br /&gt;
&lt;br /&gt;
This is why fencing is so important. Without a properly configured and tested fence device or devices, the cluster will never successfully fence and the cluster will remain hung until a human can intervene.&lt;br /&gt;
&lt;br /&gt;
=== Is &amp;quot;Fencing&amp;quot; the same as STONITH? ===&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
In the old days, there were two distinct open-source HA clustering stacks. The Linux-HA&#039;s project used the term &amp;quot;STONITH&amp;quot;, an acronym for &amp;quot;Shoot The Other Node In The Head&amp;quot;, for fencing. Red Hat&#039;s cluster stack used the term &amp;quot;fencing&amp;quot; for the same concept.&lt;br /&gt;
&lt;br /&gt;
We prefer the term &amp;quot;fencing&amp;quot; because the fundamental goal is to put the target node into a state where it can not effect cluster resources or provide clustered services. This can be accomplished by powering it off, called &amp;quot;power fencing&amp;quot;, or by disconnecting it from SAN storage and/or network, a process called &amp;quot;fabric fencing&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;STONITH&amp;quot;, based on its acronym, implies power fencing. This is not a big deal, but it is the reason this tutorial sticks with the term &amp;quot;fencing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Component; Totem ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; protocol defines message passing within the cluster and it is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;. A token is passed around all the nodes in the cluster, and nodes can only send messages while they have the token. A node will keep its messages in memory until it gets the token back with no &amp;quot;not ack&amp;quot; messages. This way, if a node missed a message, it can request it be resent when it gets its token. If a node isn&#039;t up, it will simply miss the messages.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt; protocol supports something called &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;&#039;, &#039;&#039;&#039;R&#039;&#039;&#039;edundant &#039;&#039;&#039;R&#039;&#039;&#039;ing &#039;&#039;&#039;P&#039;&#039;&#039;rotocol. Through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;, you can add a second backup ring on a separate network to take over in the event of a failure in the first ring. In RHCS, these rings are known as &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 0&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 1&amp;lt;/span&amp;gt;&amp;quot;. The RRP is being re-introduced in RHCS version 3. Its use is experimental and should only be used with plenty of testing.&lt;br /&gt;
&lt;br /&gt;
== Component; Rgmanager ==&lt;br /&gt;
&lt;br /&gt;
When the cluster membership changes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; that it needs to recheck its services. It will examine what changed and then will start, stop, migrate or recover cluster resources as needed.&lt;br /&gt;
&lt;br /&gt;
Within &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, one or more &#039;&#039;resources&#039;&#039; are brought together as a &#039;&#039;service&#039;&#039;. This service is then optionally assigned to a &#039;&#039;failover domain&#039;&#039;, an subset of nodes that can have preferential ordering.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; daemon runs separately from the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. This means that, to fully start the cluster, we need to start both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What about Pacemaker? ===&lt;br /&gt;
&lt;br /&gt;
[[Pacemaker]] is also a resource manager, like rgmanager. You can not use both in the same cluster.&lt;br /&gt;
&lt;br /&gt;
Back prior to 2008, there were two distinct open-source cluster projects:&lt;br /&gt;
&lt;br /&gt;
* Red Hat&#039;s Cluster Service&lt;br /&gt;
* Linux-HA&#039;s Heartbeat&lt;br /&gt;
&lt;br /&gt;
Pacemaker was born out of the Linux-HA project as an advanced resource manager that could use either heartbeat or openais for cluster membership and communication. Unlike RHCS and heartbeat, its sole focus was resource management.&lt;br /&gt;
&lt;br /&gt;
In 2008, plans were made to begin the slow process of merging the two independent stacks into one. As mentioned in the corosync overview, it replaced openais and became the default cluster membership and communication layer for both RHCS and Pacemaker. Development of heartbeat was ended, though [http://www.linbit.com/en/company/news/125-linbit-takes-over-heartbeat-maintenance Linbit] continues to maintain the heartbeat code to this day.&lt;br /&gt;
&lt;br /&gt;
The fence and resource agents, software that acts as a glue between the cluster and the devices and resource they manage, were merged next. You can now use the same set of agents on both pacemaker and RHCS.&lt;br /&gt;
&lt;br /&gt;
Red Hat introduced pacemaker as &amp;quot;Tech Preview&amp;quot; in [[RHEL]] 6.0. It has been available beside RHCS ever since, though support is not offered yet[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6-Beta/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ *].&lt;br /&gt;
&lt;br /&gt;
{{note|1=Pacemaker entered full support with the release of RHEL 6.5. It is also the only available HA stack on RHEL 7 beta. This is a strong indication that, indeed, corosync and pacemaker will be the future HA stack on RHEL.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat has a strict policy of not saying what will happen in the future. That said, the speculation is that Pacemaker will become supported soon and will replace rgmanager entirely in RHEL 7, given that cman and rgmanager no longer exist upstream in Fedora.&lt;br /&gt;
&lt;br /&gt;
So why don&#039;t we use pacemaker here?&lt;br /&gt;
&lt;br /&gt;
We believe that, no matter how promising software looks, stability is king. Pacemaker on other distributions has been stable and supported for a long time. However, on RHEL, it&#039;s a recent addition and the developers have been doing a tremendous amount of work on pacemaker and associated tools. For this reason, we feel that on RHEL 6, pacemaker is too much of a moving target at this time. That said, we do intend to switch to pacemaker some time in the next year or two, depending on how the Red Hat stack evolves.&lt;br /&gt;
&lt;br /&gt;
== Component; Qdisk ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; does not work reliably on a DRBD resource, so we will not be using it in this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
A Quorum disk, known as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; is small partition on [[SAN]] storage used to enhance quorum. It generally carries enough votes to allow even a single node to take quorum during a cluster partition. It does this by using configured heuristics, that is custom tests, to decided which node or partition is best suited for providing clustered services during a cluster reconfiguration. These heuristics can be simple, like testing which partition has access to a given router, or they can be as complex as the administrator wishes using custom scripts.&lt;br /&gt;
&lt;br /&gt;
Though we won&#039;t be using it here, it is well worth knowing about when you move to a cluster with [[SAN]] storage.&lt;br /&gt;
&lt;br /&gt;
== Component; DRBD ==&lt;br /&gt;
&lt;br /&gt;
[[DRBD]]; Distributed Replicating Block Device, is a technology that takes raw storage from two nodes and keeps their data synchronized in real time. It is sometimes described as &amp;quot;network [[RAID_level_5#Level_1|RAID Level 1]]&amp;quot;, and that is conceptually accurate. In this tutorial&#039;s cluster, DRBD will be used to provide that back-end storage as a cost-effective alternative to a traditional [[SAN]] device.&lt;br /&gt;
&lt;br /&gt;
DRBD is, fundamentally, a raw block device. If you&#039;ve ever used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[mdadm]]&amp;lt;/span&amp;gt; to create a software RAID array, then you will be familiar with this.&lt;br /&gt;
&lt;br /&gt;
Think of it this way;&lt;br /&gt;
&lt;br /&gt;
With traditional software raid, you would take:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sdb5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With DRBD, you have this:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node1:/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node2:/dev/sda5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;both:/dev/drbd0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, as soon as you create the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;md0&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd0&amp;lt;/span&amp;gt; device, you pretend like the member devices no longer exist. You format a [[filesystem]] onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;, use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; as an [[LVM]] physical volume, and so on.&lt;br /&gt;
&lt;br /&gt;
The main difference with DRBD is that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; will always be the same on both nodes. If you write something to node 1, it&#039;s instantly available on node 2, and vice versa. Of course, this means that what ever you put on top of DRBD has to be &amp;quot;cluster aware&amp;quot;. That is to say, the program or file system using the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; device has to understand that the contents of the disk might change because of another node.&lt;br /&gt;
&lt;br /&gt;
== Component; Clustered LVM ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the raw storage for the cluster, we must next consider partitions. This is where Clustered [[LVM]], known as [[CLVM]], comes into play.&lt;br /&gt;
&lt;br /&gt;
CLVM is ideal in that by using [[DLM]], the distributed lock manager. It won&#039;t allow access to cluster members outside of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;&#039;s closed process group, which, in turn, requires quorum.&lt;br /&gt;
&lt;br /&gt;
It is ideal because it can take one or more raw devices, known as &amp;quot;physical volumes&amp;quot;, or simple as [[PV]]s, and combine their raw space into one or more &amp;quot;volume groups&amp;quot;, known as [[VG]]s. These volume groups then act just like a typical hard drive and can be &amp;quot;partitioned&amp;quot; into one or more &amp;quot;logical volumes&amp;quot;, known as [[LV]]s. These LVs are where [[KVM]]&#039;s virtual machine guests will exist and where we will create our [[GFS2]] clustered file system.&lt;br /&gt;
&lt;br /&gt;
LVM is particularly attractive because of how flexible it is. We can easily add new physical volumes later, and then grow an existing volume group to use the new space. This new space can then be given to existing logical volumes, or entirely new logical volumes can be created. This can all be done while the cluster is online offering an upgrade path with no down time.&lt;br /&gt;
&lt;br /&gt;
== Component; GFS2 ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the clusters raw storage space, and [[Clustered LVM]] providing the logical partitions, we can now look at the clustered file system. This is the role of the Global File System version 2, known simply as [[GFS2]].&lt;br /&gt;
&lt;br /&gt;
It works much like standard filesystem, with user-land tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck.gfs2&amp;lt;/span&amp;gt; and so on. The major difference is that it and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; use the cluster&#039;s [[DLM|distributed locking mechanism]] provided by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; daemon. Once formatted, the GFS2-formatted partition can be mounted and used by any node in the cluster&#039;s [[CPG|closed process group]]. All nodes can then safely read from and write to the data on the partition simultaneously.&lt;br /&gt;
&lt;br /&gt;
{{note|1=GFS2 is &#039;&#039;&#039;only&#039;&#039;&#039; supported when run on top of Clustered LVM [[LV]]s. This is because, in certain error states, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_controld&amp;lt;/span&amp;gt; will call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to disconnect the GFS2 partition from its storage in certain failure states.}}&lt;br /&gt;
&lt;br /&gt;
== Component; DLM ==&lt;br /&gt;
&lt;br /&gt;
One of the major roles of a cluster is to provide [[DLM|distributed locking]] for clustered storage and resource management.&lt;br /&gt;
&lt;br /&gt;
Whenever a resource, GFS2 filesystem or clustered LVM LV needs a lock, it sends a request to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; which runs in userspace. This communicates with DLM in kernel. If the lockspace does not yet exist, DLM will create it and then give the lock to the requester. Should a subsequant lock request come in for the same lockspace, it will be rejected. Once the application using the lock is finished with it, it will release the lock. After this, another node may request and receive a lock for the lockspace.&lt;br /&gt;
&lt;br /&gt;
If a node fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; that a fence is pending and new lock requests will block. After a successful fence, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert DLM that the node is gone and any locks the victim node held are released. At this time, other nodes may request a lock on the lockspaces the lost node held and can perform recovery, like replaying a GFS2 filesystem journal, prior to resuming normal operation.&lt;br /&gt;
&lt;br /&gt;
Note that DLM locks are not used for actually locking the file system. That job is still handled by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;plock()&amp;lt;/span&amp;gt; calls ([[POSIX]] locks).&lt;br /&gt;
&lt;br /&gt;
== Component; KVM ==&lt;br /&gt;
&lt;br /&gt;
Two of the most popular open-source virtualization platforms available in the Linux world today and [[Xen]] and [[KVM]]. The former is maintained by [http://www.citrix.com/xenserver Citrix] and the other by [http://www.redhat.com/solutions/virtualization/ Redhat]. It would be difficult to say which is &amp;quot;better&amp;quot;, as they&#039;re both very good. Xen can be argued to be more mature where KVM is the &amp;quot;official&amp;quot; solution supported by Red Hat in [[EL6]].&lt;br /&gt;
&lt;br /&gt;
We will be using the KVM [[hypervisor]] within which our highly-available virtual machine guests will reside. It is a type-1 hypervisor, which means that the host operating system runs directly on the bare hardware. Contrasted against Xen, which is a type-2 hypervisor where even the installed OS is itself just another virtual machine.&lt;br /&gt;
&lt;br /&gt;
= Node Installation =&lt;br /&gt;
&lt;br /&gt;
We need a baseline, a minimum system requirement of sorts. I will refer fairly frequently to the specific setup I used. Please don&#039;t take this as &amp;quot;the ideal setup&amp;quot; though... Every cluster will have its own needs, and you should plan and purchase for your particular needs.&lt;br /&gt;
&lt;br /&gt;
== Node Host Names ==&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&lt;br /&gt;
&lt;br /&gt;
We need to decide what naming convention and IP ranges to use for our nodes and their networks.&lt;br /&gt;
&lt;br /&gt;
The IP addresses and subnets you decide to use are completely up to you. The host names though need to follow a certain standard, &#039;&#039;&#039;if&#039;&#039;&#039; you wish to use the [[AN!CDB]] dashboard, as we will do here. Specifically, the node names on your nodes must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; for node #1 and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for node #2. The reason for this will be discussed later. &lt;br /&gt;
&lt;br /&gt;
The node host name convention that we&#039;ve created is this:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-cYYn0{1,2}&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; is a two or three letter prefix used to denote the company, group or person who owns the &#039;&#039;Anvil!&#039;&#039;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cYY&amp;lt;/span&amp;gt; is a simple zero-padded sequence number number.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n0{1,2}&amp;lt;/span&amp;gt; indicated the node in the cluster.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, the &#039;&#039;Anvil!&#039;&#039; is owned and operated by &amp;quot;Alteeve&#039;s Niche!&amp;quot;, so the prefix &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an&amp;lt;/span&amp;gt;&amp;quot; is used. This is the fifth cluster we&#039;ve got, so the cluster name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;, so the host name&#039;s cluster number is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c05&amp;lt;/span&amp;gt;. Thus, node #1 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and node #2 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we have three distinct networks, we have three network-specific suffixes we apply to these host names which we will map to subnets in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; later.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.bcn&amp;lt;/span&amp;gt;; Back-Channel Network host name.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.sn&amp;lt;/span&amp;gt;; Storage Network hostname.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.ifn&amp;lt;/span&amp;gt;; Internet-Facing Network host name.&lt;br /&gt;
&lt;br /&gt;
Again, what you use is entirely up to you. Just remember that the node&#039;s host name must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for AN!CDB to work.&lt;br /&gt;
&lt;br /&gt;
== Foundation Pack Host Names ==&lt;br /&gt;
&lt;br /&gt;
The foundation pack devices, switches, PDUs and UPSes, can support multiple &#039;&#039;Anvil!&#039;&#039; platforms. Likewise, the [[AN!CDB|dashboard]] servers support multiple &#039;&#039;Anvil!&#039;&#039;s as well. For this reason, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cXX&amp;lt;/span&amp;gt; portion of the host name does not make sense when choosing host names for these devices.&lt;br /&gt;
&lt;br /&gt;
As always, you are free to choose host names that make sense to you. For this tutorial, the following host names are used;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device&lt;br /&gt;
!Host name&lt;br /&gt;
!Examples&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|Network Switches&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-sYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Switch #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Switch #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Switched [[PDU]]s&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-pYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* PDU #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p01&amp;lt;/span&amp;gt;&lt;br /&gt;
* PDU #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Network Managed [[UPS]]es&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-uYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* UPS #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
* UPS #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Dashboard Servers&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-mYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Dashboard #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dashboard #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number. Note that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; letter was chosen for historical reasons. The dashboard used to be called &amp;quot;monitoring servers&amp;quot;. For consistency with existing dashboards, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; has remained. Note also that the dashboards will connect to both the [[BCN]] and [[SN]], so like the nodes, host names with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.bcn&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.ifn&amp;lt;/span&amp;gt; suffixes will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OS Installation ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=[[EL6]].1 shipped with a version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[corosync]]&amp;lt;/span&amp;gt; that had a token retransmit bug. On slower systems, there would be a form of race condition which would cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; tokens the be retransmitted and cause significant performance problems. This has been resolved in [[EL6]].2 so please be sure to upgrade.}}&lt;br /&gt;
&lt;br /&gt;
Beyond being based on [[RHEL]] 6, there are no requirements for how the operating system is installed. This tutorial is written using &amp;quot;minimal&amp;quot; installs, and as such, installation instructions will be provided that will install all needed packages if they aren&#039;t already installed on your nodes.&lt;br /&gt;
&lt;br /&gt;
== Network Security Considerations ==&lt;br /&gt;
&lt;br /&gt;
When building production clusters, you will want to consider two options with regard to network security.&lt;br /&gt;
&lt;br /&gt;
First, the interfaces connected to an untrusted network, like the Internet, should not have an IP address, though the interfaces themselves will need to be up so that virtual machines can route through them to the outside world. Alternatively, anything inbound from the virtual machines or inbound from the untrusted network should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt;ed by the firewall.&lt;br /&gt;
&lt;br /&gt;
Second, if you can not run the cluster communications or storage traffic on dedicated network connections over isolated subnets, you will need to configure the firewall to block everything except the ports needed by storage and cluster traffic.&lt;br /&gt;
&lt;br /&gt;
{{note|1=As of [[EL6]].2, you can now use [[unicast]] for totem communication instead of multicast. This is &#039;&#039;&#039;not&#039;&#039;&#039; advised, and should only be used for clusters of two or three nodes on networks where unresolvable [[multicast]] issues exist. If using [[gfs2]], as we do here, using unicast for totem is strongly discouraged.}}&lt;br /&gt;
&lt;br /&gt;
== SELinux Considerations ==&lt;br /&gt;
&lt;br /&gt;
There are two important changes needed to make our &#039;&#039;Anvil!&#039;&#039; work with [[SELinux]]. Both are presented in this tutorial when they&#039;re first needed. If you do not plan to follow this tutorial linearly, please be sure to read:&lt;br /&gt;
&lt;br /&gt;
* [[#SELinux and apcupsd|SELinux and apcupsd]]&lt;br /&gt;
* [[#Solving_vm01-win2008_.22Failure_to_Enable.22_Error|Solving vm01-win2008 &amp;quot;Failure to Enable Error&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&#039;s take a look at a block diagram of what we&#039;re going to build. This will help when trying to see what we&#039;ll be talking about.&lt;br /&gt;
&lt;br /&gt;
== A Map! ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Nodes                                                                                        \_/                                                                                           &lt;br /&gt;
  ____________________________________________________________________________             _____|____              ____________________________________________________________________________ &lt;br /&gt;
 | an-c05n01.alteeve.ca                                                       |  /--------{_Internet_}---------\  |                                                       an-c05n02.alteeve.ca |&lt;br /&gt;
 |                                 Network:                                   |  |                             |  |                                   Network:                                 |&lt;br /&gt;
 |                                 _________________     _____________________|  |  _________________________  |  |_____________________     _________________                                 |&lt;br /&gt;
 |      Servers:                  |      vbr2       |---| bond2               |  | | an-s01         Switch 1 | |  |               bond2 |---|      vbr2       |                  Servers:      |&lt;br /&gt;
 |      _______________________   |   10.255.50.1   |   | ____________________|  | |____ Internet-Facing ____| |  |____________________ |   |   10.255.50.2   |  .........................     |&lt;br /&gt;
 |     | [ vm01-win2008 ]      |  |_________________|   || eth2               =----=_01_]    Network    [_02_=----=               eth2 ||   |_________________|  :      [ vm01-win2008 ] :     |&lt;br /&gt;
 |     |   ____________________|    | : | | : : | |     || 00:1B:21:81:C3:34 ||  | |____________________[_24_=-/  || 00:1B:21:81:C2:EA ||     : : | | : : | :    :____________________   :     |&lt;br /&gt;
 |     |  | NIC 1              =----/ : | | : : | |     ||___________________||  | | an-s02         Switch 2 |    ||___________________||     : : | | : : | :----=              NIC 1 |  :     |&lt;br /&gt;
 |     |  | 10.255.1.1        ||      : | | : : | |     | ____________________|  | |____                 ____|    |____________________ |     : : | | : : |      :|        10.255.1.1 |  :     |&lt;br /&gt;
 |     |  | ..:..:..:..:..:.. ||      : | | : : | |     || eth5               =----=_01_]  VLAN ID 300  [_02_=----=               eth5 ||     : : | | : : |      :| ..:..:..:..:..:.. |  :     |&lt;br /&gt;
 |     |  |___________________||      : | | : : | |     || A0:36:9F:02:E0:05 ||  | |____________________[_24_=-\  || A0:36:9F:07:D6:2F ||     : : | | : : |      :|___________________|  :     |&lt;br /&gt;
 |     |   ____                |      : | | : : | |     ||___________________||  |                             |  ||___________________||     : : | | : : |      :                ____   :     |&lt;br /&gt;
 |  /--=--[_c:_]               |      : | | : : | |     |_____________________|  \-----------------------------/  |_____________________|     : : | | : : |      :               [_c:_]--=--\  |&lt;br /&gt;
 |  |  |_______________________|      : | | : : | |      _____________________|                                   |_____________________      : : | | : : |      :.......................:  |  |&lt;br /&gt;
 |  |                                 : | | : : | |     | bond1               |     _________________________     |               bond1 |     : : | | : : |                                 |  |&lt;br /&gt;
 |  |     .........................   : | | : : | |     | 10.10.50.1          |    | an-s01         Switch 1 |    |          10.10.50.2 |     : : | | : : |    _______________________      |  |&lt;br /&gt;
 |  |     : [ vm02-win2012 ]      :   : | | : : | |     | ____________________|    |____     Storage     ____|    |____________________ |     : : | | : : |   |      [ vm02-win2012 ] |     |  |&lt;br /&gt;
 |  |     :   ____________________:   : | | : : | |     || eth1               =----=_09_]    Network    [_10_=----=               eth1 ||     : : | | : : |   |____________________   |     |  |&lt;br /&gt;
 |  |     :  | NIC 1              =---: | | : : | |     || 00:19:99:9C:9B:9F ||    |_________________________|    || 00:19:99:9C:A0:6D ||     : : | | : : \---=              NIC 1 |  |     |  |&lt;br /&gt;
 |  |     :  | 10.255.1.2        |:     | | : : | |     ||___________________||    | an-s02         Switch 2 |    ||___________________||     : : | | : :     ||        10.255.1.2 |  |     |  |&lt;br /&gt;
 |  |     :  | ..:..:..:..:..:.. |:     | | : : | |     | ____________________|    |____                 ____|    |____________________ |     : : | | : :     || ..:..:..:..:..:.. |  |     |  |&lt;br /&gt;
 |  |     :  |___________________|:     | | : : | |     || eth4               =----=_09_]  VLAN ID 200  [_10_=----=               eth4 ||     : : | | : :     ||___________________|  |     |  |&lt;br /&gt;
 |  |     :   ____                :     | | : : | |     || A0:36:9F:02:E0:04 ||    |_________________________|    || A0:36:9F:07:D6:2E ||     : : | | : :     |                ____   |     |  |&lt;br /&gt;
 |  |  /--=--[_c:_]               :     | | : : | |     ||___________________||                                   ||___________________||     : : | | : :     |               [_c:_]--=--\  |  |&lt;br /&gt;
 |  |  |  :.......................:     | | : : | |  /--|_____________________|                                   |_____________________|--\  : : | | : :     |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                | | : : | |  |   _____________________|                                   |_____________________   |  : : | | : :                                |  |  |&lt;br /&gt;
 |  |  |   _______________________      | | : : | |  |  | bond0               |     _________________________     |               bond0 |  |  : : | | : :     .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm03-win7 ]         |     | | : : | |  |  | 10.20.50.1          |    | an-s01         Switch 1 |    |          10.20.50.2 |  |  : : | | : :     :      [ vm02-win2012 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|     | | : : | |  |  | ____________________|    |____  Back-Channel   ____|    |____________________ |  |  : : | | : :     :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-----/ | : : | |  |  || eth0               =----=_13_]    Network    [_14_=----=               eth0 ||  |  : : | | : :-----=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.3        ||       | : : | |  |  || 00:19:99:9C:9B:9E ||    |_________________________|    || 00:19:99:9C:A0:6C ||  |  : : | | :       :|        10.255.1.3 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||       | : : | |  |  ||___________________||    | an-s02         Switch 2 |    ||___________________||  |  : : | | :       :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||       | : : | |  |  || eth3               =----=_13_]  VLAN ID 100  [_14_=----=               eth3 ||  |  : : | | :       :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |       | : : | |  |  || 00:1B:21:81:C3:35 ||    |_________________________|    || 00:1B:21:81:C2:EB ||  |  : : | | :       :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |       | : : | |  |  ||___________________||                                   ||___________________||  |  : : | | :       :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|       | : : | |  |  |_____________________|                                   |_____________________|  |  : : | | :       :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                  | : : | |  |                        |                                   |                        |  : : | | :                                  |  |  |&lt;br /&gt;
 |  |  |   _______________________        | : : | |  |                        |                                   |                        |  : : | | :       .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm04-win8 ]         |       | : : | |  \                        |                                   |                       /   : : | | :       :         [ vm04-win8 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|       | : : | |   \                       |                                   |                      /    : : | | :       :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-------/ : : | |    |                      |                                   |                      |    : : | | :-------=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.4        ||         : : | |    |                      |                                   |                      |    : : | |         :|        10.255.1.4 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||         : : | |    |                      |                                   |                      |    : : | |         :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||         : : | |    |                      |                                   |                      |    : : | |         :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |         : : | |    |                      |                                   |                      |    : : | |         :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |         : : | |    |                      |                                   |                      |    : : | |         :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|         : : | |    |                      |                                   |                      |    : : | |         :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                    : : | |    |                      |                                   |                      |    : : | |                                    |  |  |&lt;br /&gt;
 |  |  |  .........................         : : | |    |                      |                                   |                      |    : : | |          _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm05-freebsd9 ]     :         : : | |    |                      |                                   |                      |    : : | |         |     [ vm05-freebsd9 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:         : : | |    |                      |                                   |                      |    : : | |         |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | em0                =---------: : | |    |                      |                                   |                      |    : : | \---------=                em0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.5        |:           : | |    |                      |                                   |                      |    : : |           ||        10.255.1.5 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:           : | |    |                      |                                   |                      |    : : |           || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:           : | |    |                      |                                   |                      |    : : |           ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :           : | |    |                      |                                   |                      |    : : |           |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_ada0_]             :           : | |    |                      |                                   |                      |    : : |           |             [_ada0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:           : | |    |                      |                                   |                      |    : : |           |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                      : | |    |                      |                                   |                      |    : : |                                      |  |  |&lt;br /&gt;
 |  |  |  .........................           : | |    |                      |                                   |                      |    : : |            _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm06-solaris11 ]    :           : | |    |                      |                                   |                      |    : : |           |    [ vm06-solaris11 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:           : | |    |                      |                                   |                      |    : : |           |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | net0               =-----------: | |    |                      |                                   |                      |    : : \-----------=               net0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.6        |:             | |    |                      |                                   |                      |    : :             ||        10.255.1.6 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:             | |    |                      |                                   |                      |    : :             || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:             | |    |                      |                                   |                      |    : :             ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :             | |    |                      |                                   |                      |    : :             |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_c3d0_]             :             | |    |                      |                                   |                      |    : :             |             [_c3d0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:             | |    |                      |                                   |                      |    : :             |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                        | |    |                      |                                   |                      |    : :                                        |  |  |&lt;br /&gt;
 |  |  |   _______________________              | |    |                      |                                   |                      |    : :             .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm07-rhel6 ]        |             | |    |                      |                                   |                      |    : :             :        [ vm07-rhel6 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|             | |    |                      |                                   |                      |    : :             :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =-------------/ |    |                      |                                   |                      |    : :-------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.7        ||               |    |                      |                                   |                      |    :               :|        10.255.1.7 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||               |    |                      |                                   |                      |    :               :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||               |    |                      |                                   |                      |    :               :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |               |    |                      |                                   |                      |    :               :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |               |    |                      |                                   |                      |    :               :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|               |    |                      |                                   |                      |    :               :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                          |    |                      |                                   |                      |    :                                          |  |  |&lt;br /&gt;
 |  |  |   _______________________                |    |                      |                                   |                      |    :               .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm08-sles11 ]       |               |    |                      |                                   |                      |    :               :       [ vm08-sles11 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|               |    |                      |                                   |                      |    :               :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =---------------/    |                      |                                   |                      |    :---------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.8        ||                    |                      |                                   |                      |                    :|        10.255.1.8 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||                    |                      |                                   |                      |                    :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||                    |                      |                                   |                      |                    :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |                    |                      |                                   |                      |                    :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |                    |                      |                                   |                      |                    :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|                    |                      |                                   |                      |                    :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |    Storage:                                   |                      |                                   |                      |                                   Storage:    |  |  |&lt;br /&gt;
 |  |  |    __________                                 |                      |                                   |                      |                                 __________    |  |  |&lt;br /&gt;
 |  |  |   [_/dev/sda_]                                |                      |                                   |                      |                                [_/dev/sda_]   |  |  |&lt;br /&gt;
 |  |  |     |   ___________    _______                |                      |                                   |                      |                _______    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda1_]--[_/boot_]               |                      |                                   |                      |               [_/boot_]--[_/dev/sda1_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ________               |                      |                                   |                      |               ________    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda2_]--[_&amp;lt;swap&amp;gt;_]              |                      |                                   |                      |              [_&amp;lt;swap&amp;gt;_]--[_/dev/sda2_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ___                    |                      |                                   |                      |                    ___    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda3_]--[_/_]                   |                      |                                   |                      |                   [_/_]--[_/dev/sda3_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |                      |                                   |                      |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda5_]--[_r0_]--[_/dev/drbd0_]--+                      |                                   |                      +--[_/dev/drbd0_]--[_r0_]--[_/dev/sda5_]--+     |  |  |&lt;br /&gt;
 |  |  |     |                                    |    |                      |                                   |                      |    |                                    |     |  |  |&lt;br /&gt;
 |  |  |     |                                    \----|--\                   |                                   |                   /--|----/                                    |     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |  |                   |                                   |                   |  |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     \--[_/dev/sda6_]--[_r1_]--[_/dev/drbd1_]--/  |                   |                                   |                   |  \--[_/dev/drbd1_]--[_r1_]--[_/dev/sda6_]--/     |  |  |&lt;br /&gt;
 |  |  |                                          |       |                   |                                   |                   |       |                                          |  |  |&lt;br /&gt;
 |  |  |   Clustered LVM:                         |       |                   |                                   |                   |       |                      Clustered LVM:      |  |  |&lt;br /&gt;
 |  |  |   _________________________________      |       |                   |                                   |                   |       |   _________________________________      |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+  |  |&lt;br /&gt;
 |  |  |   __________________________________     |       |                   |                                   |                   |       |   __________________________________     |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+  |  |&lt;br /&gt;
 |  |  |   ___________________________________    |       |                   |                                   |                   |       |   ___________________________________    |  |  |&lt;br /&gt;
 |  |  \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/       |                   |                                   |                   |       \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/  |  |&lt;br /&gt;
 |  |                                                     |                   |                                   |                   |                                                     |  |&lt;br /&gt;
 |  |      _________________________________              |                   |                                   |                   |           _________________________________         |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm01-win2008_]-------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm01-win2008_]--------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm03-win7_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm03-win7_]-----------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm04-win8_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm04-win8_]-----------+  |&lt;br /&gt;
 |  |      _______________________________                |                   |                                   |                   |           _______________________________           |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm07-rhel6_]---------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm07-rhel6_]----------+  |&lt;br /&gt;
 |  |      ________________________________               |                   |                                   |                   |           ________________________________          |  |&lt;br /&gt;
 |  \-----[_/dev/an-c05n02_vg0/vm08-sles11_]--------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm08-sles11_]---------/  |&lt;br /&gt;
 |         ___________________________                    |                   |                                   |                   |           ___________________________                  |&lt;br /&gt;
 |     /--[_/dev/an-c05n01_vg0/shared_]-------------------/                   |                                   |                   \----------[_/dev/an-c05n01_vg0/shared_]--\              |&lt;br /&gt;
 |     |   _________                                                          |     _________________________     |                                                  ________   |              |&lt;br /&gt;
 |     \--[_/shared_]                                                         |    | an-s01         Switch 1 |    |                                                 [_shared_]--/              |&lt;br /&gt;
 |                                                        ____________________|    |____  Back-Channel   ____|    |____________________                                                        |&lt;br /&gt;
 |                                                       | IPMI               =----=_03_]    Network    [_04_=----=               IPMI |                                                       |&lt;br /&gt;
 |                                                       | 10.20.51.1        ||    |_________________________|    ||        10.20.51.2 |                                                       |&lt;br /&gt;
 |                                  _________    _____   | 00:19:99:9C:9B:9E ||    | an-s02         Switch 2 |    || 00:19:99:9A:D8:E8 |   _____    _________                                  |&lt;br /&gt;
 |                                 {_sensors_}--[_BMC_]--|___________________||    |                         |    ||___________________|--[_BMC_]--{_sensors_}                                 |&lt;br /&gt;
 |                                                             ______ ______  |    |       VLAN ID 100       |    |  ______ ______                                                             |&lt;br /&gt;
 |                                                            | PSU1 | PSU2 | |    |____   ____   ____   ____|    | | PSU1 | PSU2 |                                                            |&lt;br /&gt;
 |____________________________________________________________|______|______|_|    |_03_]_[_07_]_[_08_]_[_04_|    |_|______|______|____________________________________________________________|&lt;br /&gt;
                                                                   || ||             |      |      |       |             || ||                                                                  &lt;br /&gt;
                                       /---------------------------||-||-------------|------/      \-------|-------------||-||---------------------------\                                      &lt;br /&gt;
                                       |                           || ||             |                     |             || ||                           |                                      &lt;br /&gt;
                        _______________|___                        || ||   __________|________     ________|__________   || ||                        ___|_______________                       &lt;br /&gt;
                       |             UPS 1 |                       || ||  |             PDU 1 |   |             PDU 2 |  || ||                       |             UPS 2 |                      &lt;br /&gt;
                       | an-u01            |                       || ||  | an-p01            |   | an-p02            |  || ||                       | an-u02            |                      &lt;br /&gt;
             _______   | 10.20.3.1         |                       || ||  | 10.20.2.1         |   | 10.20.2.2         |  || ||                       | 10.20.3.1         |   _______            &lt;br /&gt;
            {_Mains_}==| 00:C0:B7:58:3A:5A |=======================||=||==| 00:C0:B7:56:2D:AC |   | 00:C0:B7:59:55:7C |==||=||=======================| 00:C0:B7:C8:1C:B4 |=={_Mains_}           &lt;br /&gt;
                       |___________________|                       || ||  |___________________|   |___________________|  || ||                       |___________________|                      &lt;br /&gt;
                                                                   || ||                 || ||     || ||                 || ||                                                                  &lt;br /&gt;
                                                                   || \\===[ Port 1 ]====// ||     || \\====[ Port 2 ]===// ||                                                                  &lt;br /&gt;
                                                                   \\======[ Port 1 ]=======||=====//                       ||                                                                  &lt;br /&gt;
                                                                                            \\==============[ Port 2 ]======//                                                                  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:keanu-woah_01.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Subnets ==&lt;br /&gt;
&lt;br /&gt;
The cluster will use three separate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/16&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;255.255.0.0&amp;lt;/span&amp;gt;) networks;&lt;br /&gt;
&lt;br /&gt;
{{note|1=There are situations where it is not possible to add additional network cards, blades being a prime example. In these cases it will be up to the admin to decide how to proceed. If there is sufficient bandwidth, you can merge all networks, but it is advised in such cases to isolate IFN traffic from the SN/BCN traffic using [[VLAN]]s.}}&lt;br /&gt;
&lt;br /&gt;
If you plan to have two or more &#039;&#039;Anvil!&#039;&#039; platforms on the same network, then it is recommended that you use the third octal of the IP addresses to identify the cluster. We&#039;ve found the following works well:&lt;br /&gt;
&lt;br /&gt;
* Third octal is the cluster ID times 10&lt;br /&gt;
* Fourth octal is the node ID.&lt;br /&gt;
&lt;br /&gt;
In our case, we&#039;re building our fifth cluster, so node #1 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.1&amp;lt;/span&amp;gt; and node #2 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.2&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Purpose&lt;br /&gt;
!Subnet&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Internet-Facing Network ([[IFN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Servers hosted by the &#039;&#039;Anvil!&#039;&#039; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.1.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the server&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Storage Network ([[SN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
|-&lt;br /&gt;
|Back-Channel Network ([[BCN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Node-specific [[IPMI]] or other out-of-band management devices will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Network switches will use the IP addresses &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.1.x&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the switch&#039;s sequence number.&lt;br /&gt;
* Switched [[PDU]]s, which we will use as backup fence devices, will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.2.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the PDU&#039;s sequence number.&lt;br /&gt;
* Network-managed [[UPS]]es with use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.3.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the UPS&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We will be using six interfaces, bonded into three pairs of two NICs in Active/Passive (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) configuration. Each link of each bond will be on alternate switches. We will also configure affinity by specifying interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; as primary for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; interfaces, respectively. This way, when everything is working fine, all traffic is routed through the same switch for maximum performance.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Red Hat supports bonding modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; as of [[RHEL]] 6.4. We do not recommend these bonding modes as we&#039;ve found the most reliable and consistent ability to survive switch failure and recovery with mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; only. If you wish to use a different bonding more, please be sure to test various failure modes extensively!}}&lt;br /&gt;
&lt;br /&gt;
If you can not install six interfaces in your server, then four interfaces will do with the [[SN]] and [[BCN]] networks merged.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you wish to merge the [[SN]] and [[BCN]] onto one interface, test to ensure that the storage traffic will not block cluster communication. Test by forming your cluster and then pushing your storage to maximum read and write performance for an extended period of time (minimum of several seconds). If the cluster partitions, you will need to do some advanced quality-of-service or other network configuration to ensure reliable delivery of cluster network traffic.}}&lt;br /&gt;
&lt;br /&gt;
[[image:brocade_icx6610_stock_01.jpg|thumb|right|375px|Brocade [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page ICX6610] switches. Photo by Brocade.]]&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use two [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page Brocade ICX6610] switches, stacked.&lt;br /&gt;
&lt;br /&gt;
* Brocade ICX6610 [[Brocade Notes|stack switch configuration]].&lt;br /&gt;
&lt;br /&gt;
We will be using three [[VLAN]]s to isolate the three networks:&lt;br /&gt;
&lt;br /&gt;
* [[BCN]] will have VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[SN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[IFN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All other unassigned ports will be in the default VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, effectively disabling those ports.&lt;br /&gt;
&lt;br /&gt;
The actual mapping of interfaces to bonds to networks will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Subnet&lt;br /&gt;
!Cable Colour&lt;br /&gt;
![[VLAN]] ID&lt;br /&gt;
!Link 1&lt;br /&gt;
!Link 2&lt;br /&gt;
!Bond&lt;br /&gt;
!IP&lt;br /&gt;
|-&lt;br /&gt;
|[[BCN]]&lt;br /&gt;
|White&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[SN]]&lt;br /&gt;
|Green&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[IFN]]&lt;br /&gt;
|Black&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== A Note on STP ===&lt;br /&gt;
&lt;br /&gt;
Scanning Tree Protocol, [[STP]], is a protocol used for detecting and protecting against switch loops. Without it, if both ends of the same cable plugged into the same switch or VLAN, or if two cables run between the same pair of switches, a [[broadcast storm]] could cause the switches to hang and traffic would stop routing.&lt;br /&gt;
&lt;br /&gt;
The problem with STP in HA clusters though is that the attempt to detect loops requires blocking all other traffic for a short time. Though this is short, it is usually long enough to cause corosync to think that the peer node has failed, triggering a fence action. &lt;br /&gt;
&lt;br /&gt;
For this reason, we need to disable STP, either globally or at least on the ports used by corosync and drbd. How you actually do this will depend on the make and model of switch you have.&lt;br /&gt;
&lt;br /&gt;
With STP disabled, at least partially, the onus does fall on you to ensure that no one causes a switch loop. Please be sure to inform anyone who might plug things into the cluster&#039;s switches about this issue. Ensure that people are careful about what they plug into the switches and that new connections will not trigger a loop.&lt;br /&gt;
&lt;br /&gt;
== Setting Up the Network ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The following steps can easily get confusing, given how many files we need to edit. Losing access to your server&#039;s network is a very real possibility! &#039;&#039;&#039;Do not continue without direct access to your servers!&#039;&#039;&#039; If you have out-of-band access via [[iKVM]], console redirection or similar, be sure to test that it is working before proceeding.}}&lt;br /&gt;
&lt;br /&gt;
=== Planning The Use of Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
In production clusters, I generally intentionally get three separate dual-port controllers (two on-board interfaces plus two separate dual-port PCIe cards). I then ensure that no bond uses two interfaces on the same physical board. Thus, should a card or its bus interface fail, none of the bonds will fail completely.&lt;br /&gt;
&lt;br /&gt;
Lets take a look at an example layout;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ____________________                            &lt;br /&gt;
| [ an-c05n01 ]      |                           &lt;br /&gt;
|         ___________|            _______              &lt;br /&gt;
|        |     ______|           | bond0 |             &lt;br /&gt;
|        | O  | eth0 =-----------=---.---=------{&lt;br /&gt;
|        | n  |_____||  /--------=--/    |             &lt;br /&gt;
|        | b         |  |        |_______|             &lt;br /&gt;
|        | o   ______|  |         _______        &lt;br /&gt;
|        | a  | eth1 =--|--\     | bond1 |      &lt;br /&gt;
|        | r  |_____||  |   \----=--.----=------{&lt;br /&gt;
|        | d         |  |  /-----=--/    |       &lt;br /&gt;
|        |___________|  |  |     |_______|       &lt;br /&gt;
|         ___________|  |  |      _______        &lt;br /&gt;
|        |     ______|  |  |     | bond2 |       &lt;br /&gt;
|        | P  | eth2 =--|--|-----=---.---=------{&lt;br /&gt;
|        | C  |_____||  |  |  /--=--/    |       &lt;br /&gt;
|        | I         |  |  |  |  |_______|       &lt;br /&gt;
|        | e   ______|  |  |  |                  &lt;br /&gt;
|        |    | eth3 =--/  |  |                  &lt;br /&gt;
|        | 1  |_____||     |  |                  &lt;br /&gt;
|        |___________|     |  |                  &lt;br /&gt;
|         ___________|     |  |                  &lt;br /&gt;
|        |     ______|     |  |                  &lt;br /&gt;
|        | P  | eth4 =-----/  |                  &lt;br /&gt;
|        | C  |_____||        |                  &lt;br /&gt;
|        | I         |        |                  &lt;br /&gt;
|        | e   ______|        |                  &lt;br /&gt;
|        |    | eth5 =--------/                  &lt;br /&gt;
|        | 2  |_____||                           &lt;br /&gt;
|        |___________|                           &lt;br /&gt;
|____________________|                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the possible failure scenarios:&lt;br /&gt;
&lt;br /&gt;
* The on-board controllers fail;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 1&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
* The PCIe #1 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
* The PCIe #2 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
&lt;br /&gt;
In all three failure scenarios, no network interruption occurs making for the most robust configuration possible.&lt;br /&gt;
&lt;br /&gt;
=== Connecting Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
As we will see soon, each node can be fenced either by calling its [[IPMI]] interface or by calling the [[PDU]] and cutting the node&#039;s power. Each of these methods are inherently single points of failure as each has only one network connection. To work around this concern, we will connect all IPMI interfaces to one switch and the PDUs to the secondary switch. This way, should a switch fail, only one of the two fence devices will fail and fencing in general will still be possible via the alternate fence device.&lt;br /&gt;
&lt;br /&gt;
By convention, we always connect the IPMI interfaces to the primary switch and the PDUs to the second switch.&lt;br /&gt;
&lt;br /&gt;
= Let&#039;s Build! =&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to need to install a bunch of programs, and one of those programs is needed before we can reconfigure the network. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge-utils&amp;lt;/span&amp;gt; has to be installed right away, so now is a good time to just install everything we need.&lt;br /&gt;
&lt;br /&gt;
== Why so Much Duplication of Commands? ==&lt;br /&gt;
&lt;br /&gt;
Most, but &#039;&#039;&#039;not&#039;&#039;&#039; all, commands will be issues equally on both nodes. At least up until we start configuring the cluster. To make it clear what to run on which node, all commands are defined either beside or under the node name on which to run the command.&lt;br /&gt;
&lt;br /&gt;
This does lead to a lot of duplication, but it&#039;s important to make sure it is clear when some command runs only on one node or the other. So please be careful, particularly later on, that you don&#039;t accidentally run a command on the wrong node.&lt;br /&gt;
&lt;br /&gt;
== Red Hat Enterprise Linux Specific Steps ==&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux is a commercial operating system that includes access to their repositories. This requires purchasing [http://www.redhat.com/products/enterprise-linux/server/ entitlements] and then [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/entitlements.html registering] machines with their [https://rhn.redhat.com Red Hat Network].&lt;br /&gt;
&lt;br /&gt;
This tutorial uses [[GFS2]], which is provided by their [http://www.redhat.com/products/enterprise-linux-add-ons/resilient-storage/ Resilient Storage Add-On]. The includes the [http://www.redhat.com/products/enterprise-linux-add-ons/high-availability/ High-Availability Add-On] which provides the rest of the HA cluster stack. &lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve finished your install, you can quickly register your node with RHN and add the resilient storage add-on with the following two commands.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You need to replace &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$user&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$pass&amp;lt;/span&amp;gt; with your RHN account details.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n01.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n02.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get any errors from the above commands, please contact your support representative. They will be able to help sort out any account or entitlement issues.&lt;br /&gt;
&lt;br /&gt;
== Update the OS ==&lt;br /&gt;
&lt;br /&gt;
Before we begin at all, let&#039;s update our OS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Required Programs ==&lt;br /&gt;
&lt;br /&gt;
This will install all the software needed to run the &#039;&#039;Anvil!&#039;&#039; and configure [[IPMI]] for use as a fence device. This won&#039;t cover [[DRBD]] or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; which will be covered in dedicated sections below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we go any further, we&#039;ll want to destroy the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge. We&#039;re going to be creating our own bridge that gives our servers direct access to the outside network.&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; does &#039;&#039;&#039;not&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you already see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; when you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;, the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge has already started. You can stop and disable it with the following commands;&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; &#039;&#039;&#039;does&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; should be gone now and it won&#039;t return.&lt;br /&gt;
&lt;br /&gt;
== Installing Programs Needed for Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Sep. 01, 2014; As of a recent update, the perl modules installed in this section no longer work. The most recent release of the monitoring and alert system has been changed to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;postfix&amp;lt;/span&amp;gt; running as a secured local relay to the desired mail server. This section of the tutorial will be rewritten as soon as possible to reflect the new mail system.}}&lt;br /&gt;
&lt;br /&gt;
The alert system will be using is written in perl. Some modules need to be installed from source, which requires the develop environment group and some development libraries to be installed. If you prefer to monitor your nodes another way, then you can skip this section.&lt;br /&gt;
&lt;br /&gt;
This installs a group of programs used for development environments.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need a few more packages still. This steps adds those packages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next stage installs some perl modules that are not available as RPM packages. Specifically, it tells perl to not prompt for input and just do the install. This saves a lot of questions and answers. If you need to do a non-standard [[CPAN]] install, skip the first line and you will run interactively.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The most recent version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YAML&amp;lt;/span&amp;gt; fails to install because it depends on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Module::Install::TestBase&amp;lt;/span&amp;gt;, which in turn depends on itself, and so fails to install. Please skip this part for now. If you need assistance, please feel free to [[Support|contact us]] and we will be happy to assist.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... No seriously, go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done! &lt;br /&gt;
&lt;br /&gt;
We&#039;ll setup the alert system a little later on. Now though, all the dependencies will have been met.&lt;br /&gt;
&lt;br /&gt;
== Switch Network Daemons ==&lt;br /&gt;
&lt;br /&gt;
The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; daemon is much more flexible and is perfect for machines like laptops which move around networks a lot. However, it does this by making a lot of decisions for you and changing the network as it sees fit. As good as this is for laptops and the like, it&#039;s not appropriate for servers. We will want to use the traditional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; to start with the system.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Altering Which Daemons Start on Boot ==&lt;br /&gt;
&lt;br /&gt;
Several of the applications we installed above include [[daemon]]s that either start on boot or stay off on boot. Likewise, some daemons remain stopped after they&#039;re installed, and we want to start them now.&lt;br /&gt;
&lt;br /&gt;
As we work on each component, we&#039;ll discuss in more detail why we want each to either start or stop on boot. For now, let&#039;s just make the changes.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt; command to make sure the daemons we want to start on boot do so.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next, we&#039;ll tell the system what daemons to leave off on boot.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now start the daemons we&#039;ve installed and want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, stop the daemons we don&#039;t want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can verify that the services you want to start will and the ones you don&#039;t want to won&#039;t using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you did a minimal OS install, or any install without a graphical interface, you will be booting into [https://en.wikipedia.org/wiki/Runlevel#Red_Hat_Linux_and_Fedora run-level] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;. If you did install a graphical interface, which is not wise, then your default run-level will either be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;. You can determine which by looking in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/inittab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once you know the run-level you&#039;re using, look for the daemon you are interested in and the see if it&#039;s set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:on&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:off&amp;lt;/span&amp;gt;. That will confirm that the associated daemon is set to start on boot or not, respectively.&lt;br /&gt;
&lt;br /&gt;
== Network Security ==&lt;br /&gt;
&lt;br /&gt;
The interfaces connected to the [[IFN]] are usually connected to an untrusted network, like the Internet. If you do not need access to the IFN from the nodes themselves, you can increase security by not assigning an IP address to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; interface which we will configure shortly. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge device will need to be up so that virtual machines can route through it to the outside world, of course.&lt;br /&gt;
&lt;br /&gt;
If you do decide to assign an IP to the nodes&#039; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;, you will want to restrict inbound access as much as possible. A good policy is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt; all traffic inbound from the hosted servers, unless you trust them specifically. &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to open ports for both Red Hat&#039;s high-availability add-on components and LinBit&#039;s DRBD software. You can find details here:&lt;br /&gt;
&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html#s1-iptables_firewall-CA RHEL 6 Cluster Configuration, Firewall Setup]&lt;br /&gt;
* [http://www.drbd.org/users-guide-8.3/s-prepare-network.html Linbit&#039;s DRBD, Firewall Configuration]&lt;br /&gt;
&lt;br /&gt;
Specifically, we&#039;ll be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ACCEPT&amp;lt;/span&amp;gt;ing the ports listed below on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Component&lt;br /&gt;
!Protocol&lt;br /&gt;
!Port&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[dlm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;21064&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[drbd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;+&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[luci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8084&amp;lt;/span&amp;gt;&lt;br /&gt;
|&#039;&#039;Optional&#039;&#039; web-based configuration tool, not used in this tutorial but documented for reference.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[modclusterd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16851&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ricci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11111&amp;lt;/span&amp;gt;&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7791&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[UDP]]/[[multicast]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5404&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5405&amp;lt;/span&amp;gt;&lt;br /&gt;
|Uses a multicast group for cluster communications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuring iptables ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; is an entire topic on its own. There are many good tutorials on the Internet discussing it, including an [[TLUG Talk: Netfilter|older introduction to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; tutorial]] hosted here. If you are unfamiliar with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt;, it is well worth taking a break from this tutorial and getting familiar with it, in concept if nothing else.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This opens up enough ports for 100 virtual servers. This is entirely arbitrary range, which you probably want to reduce (or possibly increase). This also allows incoming connections from both the [[BCN]] and [[IFN]], which you may want to change. Please look below for the &#039;remote desktop&#039; rules comment.}}&lt;br /&gt;
&lt;br /&gt;
The first thing we want to do is see what the current firewall policy is. We can do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt;, a tool designed to backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; but also very useful for seeing what configuration is currently in memory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:17 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [440:262242]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:17 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:51 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [336:129880]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:51 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This tutorial will create two DRBD resources. Each resource will use a different [[TCP]] port. By convention, they start at port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and increment up per resource. So we will be opening ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Open ports;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [52:8454]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [16:5452]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, the cluster stack should work, but we&#039;re not done yet. The changes we made above altered packet filtering in memory, but the configuration has not been saved to disk. This configuration is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/iptables&amp;lt;/span&amp;gt;. You could pipe the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt; to it, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; initialization script provides a facility to save the configuration, so we will use it instead.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; and check that the changes stuck.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:06:43 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41947:617170766]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:06:43 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:07:00 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41570:54856696]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:07:00 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to enable any other kind of access or otherwise modify the firewall on each node, please do so now. This way, as you proceed with building the &#039;&#039;Anvil!&#039;&#039;, you&#039;ll hit firewall problems as soon as they arise.&lt;br /&gt;
&lt;br /&gt;
== Mapping Physical Network Interfaces to ethX Device Names ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This process is a little lengthy and it would add a fair amount of length to document the process on both nodes. So for this section, only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will be shown. Please repeat this process for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:an-c05n01_crappy_back_pic_showing_NIC_names_01.jpg|thumb|500px|right|Awesome quality picture of labelled interfaces.]]&lt;br /&gt;
&lt;br /&gt;
Consistency is the mother of stability.&lt;br /&gt;
&lt;br /&gt;
When you install [[RHEL]], it somewhat randomly assigns an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ethX&amp;lt;/span&amp;gt; device to each physical network interfaces. Purely technically speaking, this is fine. So long as you know which interface has which device name, you can setup the node&#039;s networking.&lt;br /&gt;
&lt;br /&gt;
However!&lt;br /&gt;
&lt;br /&gt;
Consistently assigning the same device names to physical interfaces makes supporting and maintaining nodes a lot easier!&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got six physical network interfaces, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. As you recall from earlier, we want to make sure that each pair of interfaces for each network spans two physical network cards. &lt;br /&gt;
&lt;br /&gt;
Most servers have at least two on-board network cards labelled &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;quot;. These tend to correspond to lights on the front of the server, so we will start by naming these interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;, respectively. After that, you are largely free to assign names to interfaces however you see fit.&lt;br /&gt;
&lt;br /&gt;
What matters most of all is that, whatever order you choose, it&#039;s consistent across your &#039;&#039;Anvil!&#039;&#039; nodes.&lt;br /&gt;
&lt;br /&gt;
Before we touch anything, let&#039;s make a backup of what we have. This way, we have an easy out in case we &amp;quot;oops&amp;quot; a files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /root/backups/&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
created directory /root/backups&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
network-scripts/ifcfg-lo&lt;br /&gt;
network-scripts/ifdown -&amp;gt; ../../../sbin/ifdown&lt;br /&gt;
network-scripts/ifdown-bnep&lt;br /&gt;
network-scripts/ifdown-eth&lt;br /&gt;
network-scripts/ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-ipv6&lt;br /&gt;
network-scripts/ifdown-isdn -&amp;gt; ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-post&lt;br /&gt;
network-scripts/ifdown-ppp&lt;br /&gt;
network-scripts/ifdown-routes&lt;br /&gt;
network-scripts/ifdown-sit&lt;br /&gt;
network-scripts/ifdown-tunnel&lt;br /&gt;
network-scripts/ifup -&amp;gt; ../../../sbin/ifup&lt;br /&gt;
network-scripts/ifup-aliases&lt;br /&gt;
network-scripts/ifup-bnep&lt;br /&gt;
network-scripts/ifup-eth&lt;br /&gt;
network-scripts/ifup-ippp&lt;br /&gt;
network-scripts/ifup-ipv6&lt;br /&gt;
network-scripts/ifup-isdn -&amp;gt; ifup-ippp&lt;br /&gt;
network-scripts/ifup-plip&lt;br /&gt;
network-scripts/ifup-plusb&lt;br /&gt;
network-scripts/ifup-post&lt;br /&gt;
network-scripts/ifup-ppp&lt;br /&gt;
network-scripts/ifup-routes&lt;br /&gt;
network-scripts/ifup-sit&lt;br /&gt;
network-scripts/ifup-tunnel&lt;br /&gt;
network-scripts/ifup-wireless&lt;br /&gt;
network-scripts/init.ipv6-global&lt;br /&gt;
network-scripts/net.hotplug&lt;br /&gt;
network-scripts/network-functions&lt;br /&gt;
network-scripts/network-functions-ipv6&lt;br /&gt;
&lt;br /&gt;
sent 134870 bytes  received 655 bytes  271050.00 bytes/sec&lt;br /&gt;
total size is 132706  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Making Sure All Network Interfaces are Started ===&lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;, unplug each cable and see which interface shows a lost link. This will tell us what &#039;&#039;current&#039;&#039; name is given to a particular physical interface. We&#039;ll write the current name down beside the name of the interface we want. Once we&#039;ve done this to all interfaces, we&#039;ll now how we have to move names around.&lt;br /&gt;
&lt;br /&gt;
Before we can pull cables though, we have to tell the system to start all of the interfaces. By default, all but one or two interfaces will be disabled on boot.&lt;br /&gt;
&lt;br /&gt;
Run this to see which interfaces are up;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:303118 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:152952 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:344900765 (328.9 MiB)  TX bytes:14424290 (13.7 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, only the interface currently named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; was started. We&#039;ll need to edit the other interface configuration files to tell them to start when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; starts. To do this, we edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-ethX&amp;lt;/span&amp;gt; files and change &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT&amp;lt;/span&amp;gt; variable to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT=&amp;quot;yes&amp;quot;&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
By default, most interfaces will be set to try and acquire an IP address from a [[DHCP on an RPM-based OS|DHCP]] server, We can see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; already has an IP address, so to save time, we&#039;re going to tell the other interfaces to start without an IP address at all. If we didn&#039;t do this, restarting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; would take a long time waiting for DHCP requests to time out.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We skip &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth4&amp;lt;/span&amp;gt; in the next step because it&#039;s already up.}}&lt;br /&gt;
&lt;br /&gt;
Now we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the files. This is a lot faster and easier than editing each file by hand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Change eth0 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&lt;br /&gt;
# Change eth1 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&lt;br /&gt;
# Change eth2 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&lt;br /&gt;
# Change eth3 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&lt;br /&gt;
# Change eth5 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see how the file was changed by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to compare the backed up version against the edited one. Let&#039;s look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt; to see this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-28 17:20:38.978458128 -0400&lt;br /&gt;
@@ -2 +2 @@&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -5 +5 @@&lt;br /&gt;
-ONBOOT=&amp;quot;no&amp;quot;&lt;br /&gt;
+ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent. You can check the other files as well to confirm that they were edited as well, if you wish. Once you are happy with the changes, restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; initialization script.&lt;br /&gt;
&lt;br /&gt;
{{note|1= You may see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[FAILED]&amp;lt;/span&amp;gt; while stopping some interfaces, this is not a concern.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Determining IP information for eth4... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, we&#039;ll see all six interfaces have been started!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2433 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:150042 (146.5 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:35  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c335/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2416 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:148176 (144.7 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:04  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e004/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:36 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1026 (1.0 KiB)  TX bytes:5976 (5.8 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:05  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e005/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:1606 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:98242 (95.9 KiB)  TX bytes:2102 (2.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:308572 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153402 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345254511 (329.2 MiB)  TX bytes:14520378 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:2052 (2.0 KiB)  TX bytes:3114 (3.0 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can start creating the list of what physical interfaces have what current names.&lt;br /&gt;
&lt;br /&gt;
=== Finding Current Names for Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Once you know how you want your interfaces, create a little table like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we want to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; to watch the system log file &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; and print to screen messages as they&#039;re written to the log. To do this, run;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run this, the cursor will just sit there and nothing will be printed to screen at first. This is fine, this tells us that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; is waiting for new records. We&#039;re now going to methodically unplug each network cable, wait a moment and then plug it back in. Each time we do this, we&#039;ll write down the interface name that was reported as going down and then coming back up. &lt;br /&gt;
&lt;br /&gt;
The first cable we&#039;re going to unplug is the one in the physical interface we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:36:06 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 17:36:19 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see that the physical interface that we &#039;&#039;want&#039;&#039; to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; is currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;. So we&#039;ll add that to our chart.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll unplug the cable we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:38:01 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 17:38:04 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;, so we&#039;ll write that in beside the &amp;quot;Want&amp;quot; column&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep doing this for the other four cables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:39:28 an-c05n01 kernel: e1000e: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:30 an-c05n01 kernel: e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:35 an-c05n01 kernel: e1000e: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:37 an-c05n01 kernel: e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:40 an-c05n01 kernel: igb: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:43 an-c05n01 kernel: igb: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 17:39:47 an-c05n01 kernel: igb: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:51 an-c05n01 kernel: igb: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The finished table is this;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we know how we want to move the names around!&lt;br /&gt;
&lt;br /&gt;
=== Building the MAC Address List ===&lt;br /&gt;
&lt;br /&gt;
Every network interface has a unique [[MAC]] address assigned to it when it is built. Think of this sort of like a globally unique serial number. Because it&#039;s guaranteed to be unique, it&#039;s a convenient way for the [[operating system]] to create a persistent map between real interfaces and names. If we didn&#039;t use these, then each time you rebooted your node, it would possibly mean that the names get juggled. Not very good.&lt;br /&gt;
&lt;br /&gt;
[[RHEL]] uses two files for creating this map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-eth*&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt; can be rebuilt by running a command, so we&#039;re not going to worry about it. We&#039;ll just delete in a little bit and then recreate it.&lt;br /&gt;
&lt;br /&gt;
The files we care about are the six &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files. Inside each of these is a variable named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt;. The value set here will tell the OS what physical network interface the given file is configuring. We know from the list we created how we want to move the files around. &lt;br /&gt;
&lt;br /&gt;
To recap:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So lets create a new table. This one we will use to write down the MAC addresses we want to set for each device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we know that the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is the one we want to move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; to show the information for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; interface only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:315979 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153610 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345711965 (329.6 MiB)  TX bytes:14555290 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We want the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; value, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;. This will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, so lets write that down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; to be the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, but this time we&#039;ll do a little [[bash]]-fu to reduce the output to just the MAC address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth5 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:19:99:9C:9B:9F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This simply reduced the output to just the line with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; line in it, then it split the line on spaces and printed just the fifth value, which is the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. We&#039;ll write this down beside &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;. So lets get the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; MAC address and add it to the list as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth0 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:34&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth1 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:35&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second to last one is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;, which will move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth2 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:04&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; moves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth3 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:05&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our complete list of new MAC address is;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:34&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:04&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
=== Changing the Interface Device Names ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step is best done when you have direct access to the node. The reason is that the following changes require the network to be totally stopped in order to work without a reboot. If you can&#039;t get physical access, then when we get to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start_udev&amp;lt;/span&amp;gt; step, reboot the node instead.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re about to change which physical interfaces have which device names. If we don&#039;t stop the network first, we won&#039;t be able to restart them later. If we waited until later, the kernel would see a conflict between what it thinks the MAC-to-name mapping should be compared to what it sees in the configuration. The only way around this is a reboot, which is kind of a waste. So by stopping the network now, we clear the kernel&#039;s view of the network and avoid the problem entirely.&lt;br /&gt;
&lt;br /&gt;
So, stop the network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm that it&#039;s stopped by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;. It should return nothing at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;No output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Next, delete the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt; file. We&#039;ll regenerate it after we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/udev/rules.d/70-persistent-net.rules &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
rm: remove regular file `/etc/udev/rules.d/70-persistent-net.rules&#039;? y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to edit each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files and change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; value to the new addresses we wrote down in our list. Let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the new value from our list;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the file and then move on to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&amp;lt;/span&amp;gt; entry to the new MAC address;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Continue editing the other four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth{2..5}&amp;lt;/span&amp;gt; files in the same manner.&lt;br /&gt;
&lt;br /&gt;
Once all the files have been edited, we will regenerate the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
start_udev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting udev:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Test the New Network Name Mapping ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start networking again and see if the remapping worked!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Bringing up interface eth4:&lt;br /&gt;
Determining IP information for eth4...PING 10.255.255.254 (10.255.255.254) from 10.255.0.33 eth4: 56(84) bytes of data.&lt;br /&gt;
&lt;br /&gt;
--- 10.255.255.254 ping statistics ---&lt;br /&gt;
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3000ms&lt;br /&gt;
pipe 3&lt;br /&gt;
 failed.&lt;br /&gt;
                                                           [FAILED]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What happened!?&lt;br /&gt;
&lt;br /&gt;
If you recall, the old &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; device was the interface we moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is not plugged into a network with access to our DHCP server, so it failed to get an IP address. To fix this, we&#039;ll disable DHCP on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; and enable it on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; (which used to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;dhcp&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll restart the network and this time we should be good.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:&lt;br /&gt;
Determining IP information for eth0... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last step is to again &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system log and then unplug and plug-in the cables. If everything went well, they should be in the right order now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 18:44:24 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:27 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:31 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:34 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:35 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:38 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:39 an-c05n01 kernel: e1000e: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:42 an-c05n01 kernel: e1000e: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:45 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:49 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:50 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:54 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo! Done!&lt;br /&gt;
&lt;br /&gt;
At this point, I like to refresh the backup. We&#039;re going to be making more changes later at it would be nice to not have to redo this step again, should something go wrong.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
&lt;br /&gt;
sent 1955 bytes  received 130 bytes  4170.00 bytes/sec&lt;br /&gt;
total size is 132711  speedup is 63.65&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Repeat this process for the other node. Once both nodes have the matching physical interface to device names, we&#039;ll be ready to move on to the next step!&lt;br /&gt;
&lt;br /&gt;
== Configuring our Bridge, Bonds and Interfaces ==&lt;br /&gt;
&lt;br /&gt;
To setup our network, we will need to edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-bondX&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; scripts.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; device is a bridge, like a virtual network switch, which will be used to route network connections between the virtual machines and the outside world, via the [[IFN]]. If you look in the [[#Network|network map]], you will see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; virtual interface connects to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, which links to the outside world, and it connects to all servers. Just like a normal switch does. You will also note that the bridge will have the [[IP]] addresses, not the bonded interface &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;. It will instead be slaved to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; virtual devices work a lot like the network version of [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] arrays. They take two real links and turn them into one redundant link. In our case, each link in the bond will go to a different switch, protecting our links for interface, cable, port or entire switch failures. Should any of these fail, the bond will switch to the backup link so quickly that the applications on the nodes will not notice anything happened.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Bridge configuration files &#039;&#039;&#039;must&#039;&#039;&#039; have a file name which will sort &#039;&#039;&#039;after&#039;&#039;&#039; the interface and bridge files. The actual device name can be whatever you want though. If the system tries to start a bridge before its slaved interface is up, it will fail. I personally like to use the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbrX&amp;lt;/span&amp;gt; for &amp;quot;&#039;&#039;&#039;v&#039;&#039;&#039;irtual machine &#039;&#039;&#039;br&#039;&#039;&#039;idge&amp;quot;. You can use whatever makes sense to you, with the above concern in mind.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to be editing a lot of files. It&#039;s best to lay out what we&#039;ll be doing in a chart. So our setup will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Node&lt;br /&gt;
!BCN IP and Device&lt;br /&gt;
!SN IP and Device&lt;br /&gt;
!IFN IP and Device&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating New Network Configuration Files ===&lt;br /&gt;
&lt;br /&gt;
The new bond and bridge devices we want to create do not exist at all yet. So we will start by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt;ing the configuration files we will need.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Bridge ===&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start in reverse order, crafting the bridge&#039;s script first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you have a Red Hat account, you can read up on what the [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html option above] mean, and specifics of [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html bridge] devices. In case you don&#039;t though, here is a summary:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the actual name given to this device. Generally is matches the file name. In this case, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; and the file name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt;. This matching of file name to device name is by convention and not strictly required.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Ethernet&amp;lt;/span&amp;gt;, the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bridge&amp;lt;/span&amp;gt;, as we use here. Note that these values are &#039;&#039;&#039;case-sensitive&#039;&#039;&#039;! By setting this here, we&#039;re telling the [[OS]] that we&#039;re creating a bridge device.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NM_CONTROLLED&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, which is the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;, as we set here. This tells [[Network Manager]] that it is not allowed to manage this device. We&#039;ve removed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; package, so this is not strictly needed, but we&#039;ll add it just in case it gets installed in the future.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BOOTPROTO&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;, which we&#039;re using here, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dhcp&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bootp&amp;lt;/span&amp;gt; if you want the interface to get an IP from a DHCP or BOOTP server, respectively. We&#039;re setting it to static, so we want this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPADDR&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the [[dotted-decimal]] IP address we&#039;re assigning to this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NETMASK&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the dotted-decimal [[subnet mask]] for this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GATEWAY&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address the node will contact when we it needs to send traffic to other networks, like the Internet.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS1&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the primary domain name server to use when the node needs to translate a host or domain name into an IP address which wasn&#039;t found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the backup domain name server, should the primary DNS server specified above fail.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, as we&#039;ve set it here, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;. If two or more interfaces has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt; set, the interface with this variable set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating the Bonded Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;ll can create the three bonding configuration files. This is where two physical network interfaces are tied together to work like a single, highly available network interface. You can think of a bonded interface as being akin to [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]]; A new virtual device is created out of two real devices.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to see a long line called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html BONDING_OPTS]&amp;lt;/span&amp;gt;&amp;quot;. Let&#039;s look at the meaning of these options before we look at the configuration; &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the Linux kernel what kind of bond we&#039;re creating here. There are [https://www.kernel.org/doc/Documentation/networking/bonding.txt seven modes] available, each with a numeric value representing them. We&#039;re going use the &amp;quot;Active/Passive&amp;quot; mode, known as mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active-backup&amp;lt;/span&amp;gt;). As of [[RHEL]] 6.4, modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-rr&amp;lt;/span&amp;gt;) and mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-xor&amp;lt;/span&amp;gt;) are supported for use with [[corosync]]. Given the proven reliability of surviving numerous tested failure and recovery tests though, AN! still strongly recommends mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;miimon&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the kernel how often, in milliseconds, to check for unreported link failures. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt; which tells the bonding driver to check if the network cable has been unplugged or plugged in every 100 milliseconds. Most modern drivers will report link state via their driver, so this option is not strictly required, but it is recommended for extra safety.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;use_carrier&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; tells the driver to use the driver to maintain the link state. Some drivers don&#039;t support that. If you run into trouble where the link shows as up when it&#039;s actually down, get a new network card or try changing this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120000&amp;lt;/span&amp;gt; tells the driver to delay switching back to the primary interface for 120,000 milliseconds (120 seconds / 2 minutes). This is designed to give the switch connected to the primary interface time to finish booting. Setting this too low may cause the bonding driver to switch back before the network switch is ready to actually move data. Some switches will not provide a link until it is fully booted, so please experiment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;downdelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; tells the driver not to wait before changing the state of an interface when the link goes down. That is, when the driver detects a fault, it will switch to the backup interface immediately. This is the default behaviour, but setting this here insures that it is reset when the interface is reset, should the delay be somehow set elsewhere.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first bond we&#039;ll configure is for the Back-Channel Network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up is the bond for the Storage Network;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, we setup the bond for the Internet-Facing Network.&lt;br /&gt;
&lt;br /&gt;
Here we see a new option:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BRIDGE=&amp;quot;vbr2&amp;quot;&amp;lt;/span&amp;gt;; This tells the system that this bond is to be connected to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge when it is started.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with the bonds!&lt;br /&gt;
&lt;br /&gt;
=== Alter the Interface Configurations ===&lt;br /&gt;
&lt;br /&gt;
With the bridge and bonds in place, we can now alter the interface configurations.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve already edited these back when we were remapping the physical interface to device names. This time, we&#039;re going to clean them up, add a comment and slave them to their parent bonds. Note that the only difference between each node&#039;s given config file will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; variable&#039;s value. &lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 1;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6C&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6D&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EA&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EB&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:04&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:05&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2F&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the variables is not really important, from a technical perspective. However, we&#039;ve found that having the order consistent as possible between configs and nodes goes a long way to simplifying support and problem solving. It certainly helps reduce human error as well.&lt;br /&gt;
&lt;br /&gt;
If we compare the newly updated configs with one of the backups, we&#039;ll see a couple interesting things;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 18:39:59.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-29 13:25:03.443343494 -0400&lt;br /&gt;
@@ -1,2 +1 @@&lt;br /&gt;
-DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+# Back-Channel Network - Link 1&lt;br /&gt;
@@ -4 +3,3 @@&lt;br /&gt;
-NM_CONTROLLED=&amp;quot;yes&amp;quot;&lt;br /&gt;
+DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
+NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -6,2 +7,2 @@&lt;br /&gt;
-TYPE=&amp;quot;Ethernet&amp;quot;&lt;br /&gt;
-UUID=&amp;quot;ea03dc97-019c-4acc-b4d6-bc42d30d9e36&amp;quot;&lt;br /&gt;
+MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
+SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The notable part is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID&amp;lt;/span&amp;gt; where removed. These are not required, so we generally remove them. If you prefer to keep them, that is fine, too.&lt;br /&gt;
&lt;br /&gt;
== Loading the New Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you&#039;re connected to the nodes over the network and if the current IP was assigned by DHCP (or is otherwise different from the IP set in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;), your network connection will break. You will need to reconnect with the IP address you set.}}&lt;br /&gt;
&lt;br /&gt;
Simply restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth1:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth2:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth3:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth4:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth5:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface bond0:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond1:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond2:                               [  OK  ]&lt;br /&gt;
Bringing up interface vbr2:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These errors are normal. They&#039;re caused because we changed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; configuration files to reference bonded interfaces that, at the time we restarted the network, did not yet exist. If you restart the network again, you will see that the errors no longer appear.&lt;br /&gt;
&lt;br /&gt;
=== Verifying the New Network Config ===&lt;br /&gt;
&lt;br /&gt;
The first check to make sure everything works is to simply run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; and make sure everything we expect to be there is, in fact, there.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.20.50.1  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:821080 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160713 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:392278922 (374.1 MiB)  TX bytes:15344030 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet addr:10.10.50.1  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:6030 (5.8 KiB)  TX bytes:13752 (13.4 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:512206 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:222 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:34650974 (33.0 MiB)  TX bytes:25375 (24.7 KiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:570073 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160669 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:377010981 (359.5 MiB)  TX bytes:15339986 (14.6 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:4644 (4.5 KiB)  TX bytes:4602 (4.4 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:262105 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:19438941 (18.5 MiB)  TX bytes:22295 (21.7 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:251007 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15267941 (14.5 MiB)  TX bytes:4044 (3.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1386 (1.3 KiB)  TX bytes:9150 (8.9 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:250101 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:34 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15212033 (14.5 MiB)  TX bytes:3080 (3.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3543 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3543 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652772 (2.5 MiB)  TX bytes:2652772 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet addr:10.255.50.1  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4425 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:127 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:225580 (220.2 KiB)  TX bytes:17449 (17.0 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          inet addr:10.20.50.2  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06c/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:485064 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:29542689 (28.1 MiB)  TX bytes:3060 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          inet addr:10.10.50.2  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06d/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:420 (420.0 b)  TX bytes:3018 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING PROMISC MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:884093 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161539 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:414267432 (395.0 MiB)  TX bytes:15355495 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242549 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14772701 (14.0 MiB)  TX bytes:2082 (2.0 KiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:180 (180.0 b)  TX bytes:2040 (1.9 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:641600 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161526 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:399497547 (380.9 MiB)  TX bytes:15354517 (14.6 MiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242515 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769988 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:240 (240.0 b)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242493 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769885 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3545 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3545 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2658626 (2.5 MiB)  TX bytes:2658626 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet addr:10.255.50.2  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:16091 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:777873 (759.6 KiB)  TX bytes:20304 (19.8 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, everything is there!&lt;br /&gt;
&lt;br /&gt;
Next up is to verify the bonds. To do this, we can examine special files in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; virtual file system. These expose the kernel&#039;s view of things as if they were tradition files. So by reading these files, we can see how the bonded interfaces are operating in real time.&lt;br /&gt;
&lt;br /&gt;
There are three, one for each bond. Let&#039;s start by looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt; &amp;quot;file&amp;quot;, then we&#039;ll look at the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6c&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:eb&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the variables and values we see for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above:&lt;br /&gt;
&lt;br /&gt;
* Bond variables;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bonding Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which bonding mode is currently active. Here we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fault-tolerance (active-backup)&amp;lt;/span&amp;gt;, which is exactly what we wanted when we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt; in the bond&#039;s configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; if it is available. Recall that we set a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary&amp;lt;/span&amp;gt; interface to ensure that, when everything is working properly, all network traffic goes through the same switch to avoid congestion on the stack/uplink cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Currently Active Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which interface is being used at this time. If this shows the secondary interface, then either the primary has failed, or the primary has recovered by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer hasn&#039;t yet expired.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the effective link state of the bond. If either one of the slaved interfaces is active, this will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Polling Interval (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|If you recall, this was set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;ms, which tells the bond driver to verify the link state of the slaved interfaces.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Up Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us how long the bond driver will wait before switching to the secondary interface. We want immediate fail-over, so we have this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Down Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will wait for two minutes after a slaved interface comes up before it will consider it ready for use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Slaved interface variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave Interface&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name of the slaved device. The values below this reflect that named interface&#039;s state.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the current link state of the interface. Values you will see are: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt;. The first two are obvious. The third is the link state between when the link comes up and before the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer expires.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Speed&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you the link speed that the current interface is operating at. If it&#039;s ever lower than you expect, look in the switch configuration for statically set speeds. If that&#039;s not it, try another network cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Duplex&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you whether the given interface can send and receive network traffic at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;, or not, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;. All modern devices should support full duplex, so if you see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;, examine your switch and cables.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Link Failure Count&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|When the bond driver starts, this is set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Each time the link &amp;quot;fails&amp;quot;, which includes an intentional unplugging of the cable, this counter increments. There is no hard in this increasing if the &amp;quot;errors&amp;quot; where intentional or known. It can be useful in detecting flaky connections though, should you find this number to be higher than expected.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Permanent HW addr&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9c:9b:9e&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1b:21:81:c3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the real MAC address of the slaved interface. Those who are particularly observant will have noticed that, in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; output above, both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; showed the same MAC address. This is partly how active-passive bonding is able to fail over so extremely quickly. The MAC address of which ever interface is active will appear in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; address of both bond members.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave queue ID&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|In other bonding modes, this can be used to help direct certain traffic down certain slaved interface links. We won&#039;t use this so it should always be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:04&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6d&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last bond is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:34&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:05&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:ea&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That covers the bonds! The last thing to look at are the bridges. We can check them using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;brctl&amp;lt;/span&amp;gt; (bridge control) tool;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name	bridge id		STP enabled	interfaces&lt;br /&gt;
vbr2		8000.001b2181c334	no		bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name     bridge id               STP enabled     interfaces&lt;br /&gt;
vbr2            8000.001b2181c2ea       no              bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are four variables; Let&#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge name&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the device name we set when we created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge id&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c334&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c2ea&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is an automatically create unique ID for the given bridge.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;STP enabled&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us where [https://en.wikipedia.org/wiki/Spanning_Tree_Protocol spanning tree protocol] is enabled or not. Default is to be disabled, which is fine. If you enable it, it will help protect against loops that can cause broadcast storms and flood your network. Given how difficult it is to accidentally &amp;quot;plug both ends of a cable into the same switch&amp;quot;, it&#039;s generally safe to leave off.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;interfaces&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which network interfaces are &amp;quot;plugged into&amp;quot; the bridge. We don&#039;t have any servers yet, so only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is plugged in, which is the link that provides a route out to the real world. Later, when we create our servers, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; file will be created for each server&#039;s interface. These are the virtual &amp;quot;network cables&amp;quot; providing a link between the servers and the bridge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
== Adding Everything to /etc/hosts ==&lt;br /&gt;
&lt;br /&gt;
If you recall from the [[AN!Cluster Tutorial 2#Network]] section, we&#039;ve got two nodes, each with three networks and an IPMI interface, two network switches, two switched PDUs and two UPSes. We&#039;re also going to create two dashboard servers, each of which will have a connection to the [[BCN]] and the [[IFN]]. &lt;br /&gt;
&lt;br /&gt;
All of these have IP addresses. We want to be able to address them by names, which we can do by adding them to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file. If you prefer to have this centralized, you can always use internal DNS servers instead, but that is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
The format of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ip_addres&amp;gt;	&amp;lt;name&amp;gt;[ &amp;lt;name2&amp;gt; &amp;lt;name...&amp;gt; &amp;lt;nameN&amp;gt;]&amp;lt;/span&amp;gt;. We want the short domain and full domain name to resolve to the [[BCN]] IP address on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network. For this, we&#039;ll have multiple names on the BCN entry and then a single name for the [[SN]] and [[IFN]] entries.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save this to both nodes and then you can test that the names resolve properly using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gethostip -d $name&amp;lt;/span&amp;gt;. Lets look at the names we gave to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and verify they resolve to the desired IP addresses.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Test resolution of the foundation pack devices and the monitor packs as well. If they all resolve properly, we&#039;re ready to move on.&lt;br /&gt;
&lt;br /&gt;
== What is IPMI ==&lt;br /&gt;
&lt;br /&gt;
[[IPMI]], short for &amp;quot;Intelligent Platform Management Interface&amp;quot;, is a standardized network-attched device built in to many servers. It is a stand-alone device which allows external people and devices the ability to log in and check the state of the host server. It can read the various sensor values, press the power and reset switches, report whether the host node is powered on or not and so forth.&lt;br /&gt;
&lt;br /&gt;
Many companies build on the basic IPMI standard by adding advanced features like remote console access over the network, ability to monitor devices plugged into the server like the RAID controller and its hard drives and so on. Each vendor generally has a name for their implementation of IPMI;&lt;br /&gt;
&lt;br /&gt;
* Fujitsu calls theirs [http://globalsp.ts.fujitsu.com/dmsp/Publications/public/ds-iRMC-S3.pdf iRMC]&lt;br /&gt;
* HP calls theirs [https://en.wikipedia.org/wiki/HP_Integrated_Lights-Out iLO]&lt;br /&gt;
* Dell calls theirs [https://en.wikipedia.org/wiki/Dell_DRAC DRAC]&lt;br /&gt;
* IBM calls their [https://en.wikipedia.org/wiki/Remote_Supervisor_Adapter RSA]&lt;br /&gt;
&lt;br /&gt;
Various other vendors will have different names as well. In most cases though, they will all support the generic IPMI interface and Linux tools. We&#039;re going to use these tools to configure each node&#039;s IPMI &amp;quot;BMC&amp;quot;, Baseboard Management Controller, for use as a fence device.&lt;br /&gt;
&lt;br /&gt;
The idea here is this;&lt;br /&gt;
&lt;br /&gt;
If a node stops responding, the remaining surviving node can&#039;t simply assume the peer is off. We&#039;ll go into the details of &amp;quot;why not?&amp;quot; later in the fencing section. The remaining node will log into the peer&#039;s IPMI BMC and ask it to power off the host. Once off, the surviving node will verify that the power is off, confirming that the peer is certainly no longer alive and offering clustered services. With this known, recovery can safely begin.&lt;br /&gt;
&lt;br /&gt;
We need to assign an IP address to each IPMI BMC and then configure the user name and password to use later when connecting.&lt;br /&gt;
&lt;br /&gt;
We will also use the sensor values reported by the IPMI BMC in our monitoring and alert system. If, for example, a temperate climbs too high or too fast, the alert system will be able to see this and fire off an alert. &lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section walks through configuring IPMI on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. Please repeat for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We installed the needed IPMI tools earlier and we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; to start on boot. Verify that it&#039;s running now;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ipmi status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ipmi_msghandler module loaded.&lt;br /&gt;
ipmi_si module loaded.&lt;br /&gt;
ipmi_devintf module loaded.&lt;br /&gt;
/dev/ipmi0 exists.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; daemon is running and it was able to talk to the BMC. If this failed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/ipmi0&amp;lt;/span&amp;gt; would not exist. If this is the case for you, please find what make and model of IPMI BMC is used in your server and look for known issues with that chip.&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;ll check is that we can query IPMI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chassis&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool chassis status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
System Power         : on&lt;br /&gt;
Power Overload       : false&lt;br /&gt;
Power Interlock      : inactive&lt;br /&gt;
Main Power Fault     : false&lt;br /&gt;
Power Control Fault  : false&lt;br /&gt;
Power Restore Policy : previous&lt;br /&gt;
Last Power Event     : &lt;br /&gt;
Chassis Intrusion    : inactive&lt;br /&gt;
Front-Panel Lockout  : inactive&lt;br /&gt;
Drive Fault          : false&lt;br /&gt;
Cooling/Fan Fault    : false&lt;br /&gt;
Sleep Button Disable : not allowed&lt;br /&gt;
Diag Button Disable  : allowed&lt;br /&gt;
Reset Button Disable : allowed&lt;br /&gt;
Power Button Disable : allowed&lt;br /&gt;
Sleep Button Disabled: false&lt;br /&gt;
Diag Button Disabled : false&lt;br /&gt;
Reset Button Disabled: false&lt;br /&gt;
Power Button Disabled: false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! If you get something like this, you&#039;re past 90% of the potential problems.&lt;br /&gt;
&lt;br /&gt;
We can check more information on the hosts using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mc&amp;lt;/span&amp;gt; to query the management controller.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool mc info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device ID                 : 2&lt;br /&gt;
Device Revision           : 2&lt;br /&gt;
Firmware Revision         : 1.1&lt;br /&gt;
IPMI Version              : 2.0&lt;br /&gt;
Manufacturer ID           : 10368&lt;br /&gt;
Manufacturer Name         : Fujitsu Siemens&lt;br /&gt;
Product ID                : 611 (0x0263)&lt;br /&gt;
Product Name              : Unknown (0x263)&lt;br /&gt;
Device Available          : yes&lt;br /&gt;
Provides Device SDRs      : no&lt;br /&gt;
Additional Device Support :&lt;br /&gt;
    Sensor Device&lt;br /&gt;
    SDR Repository Device&lt;br /&gt;
    SEL Device&lt;br /&gt;
    FRU Inventory Device&lt;br /&gt;
    IPMB Event Receiver&lt;br /&gt;
    Bridge&lt;br /&gt;
    Chassis Device&lt;br /&gt;
Aux Firmware Rev Info     : &lt;br /&gt;
    0x05&lt;br /&gt;
    0x08&lt;br /&gt;
    0x00&lt;br /&gt;
    0x41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some servers will report the details of &amp;quot;field replaceable units&amp;quot;; components than can be swapped out as needed. Every server will report different data here, but you can see what our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://manuals.ts.fujitsu.com/file/10963/rx300s6-ba-en.pdf RX300 S6]&amp;lt;/span&amp;gt; returns below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool fru print&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
FRU Device Description : Builtin FRU Device (ID 0)&lt;br /&gt;
 Device not present (Requested sensor, data, or record not found)&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : Chassis (ID 2)&lt;br /&gt;
 Chassis Type			 : Rack Mount Chassis&lt;br /&gt;
 Chassis Extra			 : RX300S6R1&lt;br /&gt;
 Product Manufacturer  : FUJITSU&lt;br /&gt;
 Product Name          : PRIMERGY RX300 S6&lt;br /&gt;
 Product Part Number   : ABN:K1344-V101-2204&lt;br /&gt;
 Product Version       : GS01&lt;br /&gt;
 Product Serial        : xxxxxxxxxx&lt;br /&gt;
 Product Asset Tag     : 15&lt;br /&gt;
 Product Extra         : 25a978&lt;br /&gt;
 Product Extra         : 0263&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : MainBoard (ID 3)&lt;br /&gt;
 Board Mfg Date        : Wed Dec 22 07:36:00 2010&lt;br /&gt;
 Board Mfg             : FUJITSU&lt;br /&gt;
 Board Product         : D2619&lt;br /&gt;
 Board Serial          : xxxxxxxx&lt;br /&gt;
 Board Part Number     : S26361-D2619-N15&lt;br /&gt;
 Board Extra           : WGS10 GS02&lt;br /&gt;
 Board Extra           : 02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU1 (ID 7)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU2 (ID 8)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can check all the sensor value using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; as well. This is actually what the cluster monitor we&#039;ll install later does.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool sdr list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ambient          | 27.50 degrees C   | ok&lt;br /&gt;
Systemboard      | 43 degrees C      | ok&lt;br /&gt;
CPU1             | 34 degrees C      | ok&lt;br /&gt;
CPU2             | 37 degrees C      | ok&lt;br /&gt;
DIMM-1A          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2A          | disabled          | ns&lt;br /&gt;
DIMM-3A          | disabled          | ns&lt;br /&gt;
DIMM-1B          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2B          | disabled          | ns&lt;br /&gt;
DIMM-3B          | disabled          | ns&lt;br /&gt;
DIMM-1C          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2C          | disabled          | ns&lt;br /&gt;
DIMM-3C          | disabled          | ns&lt;br /&gt;
DIMM-1D          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2D          | disabled          | ns&lt;br /&gt;
DIMM-3D          | disabled          | ns&lt;br /&gt;
DIMM-1E          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2E          | disabled          | ns&lt;br /&gt;
DIMM-3E          | disabled          | ns&lt;br /&gt;
DIMM-1F          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2F          | disabled          | ns&lt;br /&gt;
DIMM-3F          | disabled          | ns&lt;br /&gt;
BATT 3.0V        | 3.13 Volts        | ok&lt;br /&gt;
STBY 3.3V        | 3.35 Volts        | ok&lt;br /&gt;
iRMC 1.2V STBY   | 1.19 Volts        | ok&lt;br /&gt;
iRMC 1.8V STBY   | 1.80 Volts        | ok&lt;br /&gt;
LAN 1.0V STBY    | 1.01 Volts        | ok&lt;br /&gt;
LAN 1.8V STBY    | 1.81 Volts        | ok&lt;br /&gt;
MAIN 12V         | 12 Volts          | ok&lt;br /&gt;
MAIN 5.15V       | 5.18 Volts        | ok&lt;br /&gt;
MAIN 3.3V        | 3.37 Volts        | ok&lt;br /&gt;
IOH 1.1V         | 1.10 Volts        | ok&lt;br /&gt;
IOH 1.8V         | 1.80 Volts        | ok&lt;br /&gt;
ICH 1.5V         | 1.50 Volts        | ok&lt;br /&gt;
IOH 1.1V AUX     | 1.09 Volts        | ok&lt;br /&gt;
CPU1 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
CPU2 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
Total Power      | 190 Watts         | ok&lt;br /&gt;
PSU1 Power       | 100 Watts         | ok&lt;br /&gt;
PSU2 Power       | 80 Watts          | ok&lt;br /&gt;
CPU1 Power       | 5.50 Watts        | ok&lt;br /&gt;
CPU2 Power       | 4.40 Watts        | ok&lt;br /&gt;
Fan Power        | 15.84 Watts       | ok&lt;br /&gt;
Memory Power     | 8 Watts           | ok&lt;br /&gt;
HDD Power        | 45 Watts          | ok&lt;br /&gt;
FAN1 SYS         | 5340 RPM          | ok&lt;br /&gt;
FAN2 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN3 SYS         | 4920 RPM          | ok&lt;br /&gt;
FAN4 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN5 SYS         | 5100 RPM          | ok&lt;br /&gt;
FAN1 PSU1        | 6360 RPM          | ok&lt;br /&gt;
FAN2 PSU1        | 6480 RPM          | ok&lt;br /&gt;
FAN1 PSU2        | 6480 RPM          | ok&lt;br /&gt;
FAN2 PSU2        | 6240 RPM          | ok&lt;br /&gt;
I2C1 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C2 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C3 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C4 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C5 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C6 error ratio | 0 unspecified     | ok&lt;br /&gt;
SEL Level        | 0 unspecified     | ok&lt;br /&gt;
Ambient          | 0x02              | ok&lt;br /&gt;
CPU1             | 0x80              | ok&lt;br /&gt;
CPU2             | 0x80              | ok&lt;br /&gt;
Power Unit       | 0x01              | ok&lt;br /&gt;
PSU              | Not Readable      | ns&lt;br /&gt;
PSU1             | 0x02              | ok&lt;br /&gt;
PSU2             | 0x02              | ok&lt;br /&gt;
Fanboard Row 2   | 0x00              | ok&lt;br /&gt;
FAN1 SYS         | 0x01              | ok&lt;br /&gt;
FAN2 SYS         | 0x01              | ok&lt;br /&gt;
FAN3 SYS         | 0x01              | ok&lt;br /&gt;
FAN4 SYS         | 0x01              | ok&lt;br /&gt;
FAN5 SYS         | 0x01              | ok&lt;br /&gt;
FAN1 PSU1        | 0x01              | ok&lt;br /&gt;
FAN2 PSU1        | 0x01              | ok&lt;br /&gt;
FAN1 PSU2        | 0x01              | ok&lt;br /&gt;
FAN2 PSU2        | 0x01              | ok&lt;br /&gt;
FanBoard         | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-1B          | 0x02              | ok&lt;br /&gt;
DIMM-1B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-1C          | 0x02              | ok&lt;br /&gt;
DIMM-1C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-1D          | 0x02              | ok&lt;br /&gt;
DIMM-1D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-1E          | 0x02              | ok&lt;br /&gt;
DIMM-1E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-1F          | 0x02              | ok&lt;br /&gt;
DIMM-1F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
Watchdog         | 0x00              | ok&lt;br /&gt;
iRMC request     | 0x00              | ok&lt;br /&gt;
I2C1             | 0x02              | ok&lt;br /&gt;
I2C2             | 0x02              | ok&lt;br /&gt;
I2C3             | 0x02              | ok&lt;br /&gt;
I2C4             | 0x02              | ok&lt;br /&gt;
I2C5             | 0x02              | ok&lt;br /&gt;
I2C6             | 0x02              | ok&lt;br /&gt;
Config backup    | 0x00              | ok&lt;br /&gt;
Total Power      | 0x01              | ok&lt;br /&gt;
PSU1 Power       | 0x01              | ok&lt;br /&gt;
PSU2 Power       | 0x01              | ok&lt;br /&gt;
CPU1 Power       | 0x01              | ok&lt;br /&gt;
CPU2 Power       | 0x01              | ok&lt;br /&gt;
Memory Power     | 0x01              | ok&lt;br /&gt;
Fan Power        | 0x01              | ok&lt;br /&gt;
HDD Power        | 0x01              | ok&lt;br /&gt;
Power Level      | 0x01              | ok&lt;br /&gt;
Power Level      | 0x08              | ok&lt;br /&gt;
CPU detection    | 0x00              | ok&lt;br /&gt;
System Mgmt SW   | Not Readable      | ns&lt;br /&gt;
NMI              | 0x00              | ok&lt;br /&gt;
Local Monitor    | 0x02              | ok&lt;br /&gt;
Pwr Btn override | 0x00              | ok&lt;br /&gt;
System BIOS      | Not Readable      | ns&lt;br /&gt;
iRMC             | Not Readable      | ns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can narrow that call down to just see temperature, power consumption and what not. That&#039;s beyond the scope of this tutorial though. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; is great for seeing all the neat stuff you can do.&lt;br /&gt;
&lt;br /&gt;
=== Finding our IPMI LAN Channel ===&lt;br /&gt;
&lt;br /&gt;
Before we can configure it though, we need to find our &amp;quot;LAN channel&amp;quot;. Different manufacturers will use different channels, so we need to be able to find the one we&#039;re using.&lt;br /&gt;
&lt;br /&gt;
To find it, simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool lan print X&amp;lt;/span&amp;gt;. Increment &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, until you get a response.&lt;br /&gt;
&lt;br /&gt;
So first, let&#039;s query LAN channel 1.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Channel 1 is not a LAN channel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
No luck; Let&#039;s try channel 2.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Found it! So we know that this server uses LAN channel 2. We&#039;ll need to use this for the next steps.&lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
Now that we can read our IPMI data, it&#039;s time to set some values.&lt;br /&gt;
&lt;br /&gt;
We know that we want to set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI interface to have the IP &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.1/16&amp;lt;/span&amp;gt;. We also need to setup a user on the IPMI BMC so that we can log in from other nodes.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s set the IP address. Remember to use the LAN channel you found on your server. We don&#039;t actually have a gateway on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network, but some devices insist on a default gateway being set. For this reason, we&#039;ll always set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.255.254&amp;lt;/span&amp;gt; as the gateway server. You will want to adjust this (or not use it at all) for your network.&lt;br /&gt;
&lt;br /&gt;
This requires four calls;&lt;br /&gt;
&lt;br /&gt;
# Tell the interface to use a static IP address.&lt;br /&gt;
# Set the IP address&lt;br /&gt;
# Set the subnet mask&lt;br /&gt;
# (optional) Set the default gateway&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 ipsrc static&lt;br /&gt;
ipmitool lan set 2 ipaddr 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN IP Address to 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 netmask 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Subnet Mask to 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 defgw ipaddr 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Default Gateway IP to 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll again print the LAN channel information and we should see that the IP address has been set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Find the IPMI User ID ===&lt;br /&gt;
&lt;br /&gt;
Next up is to find the IPMI administrative user name and user ID. We&#039;ll record the name for later use in the cluster setup. We&#039;ll use the ID to update the user&#039;s password.&lt;br /&gt;
&lt;br /&gt;
To see the list of users, run the following.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user list 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ID  Name	     Callin  Link Auth	IPMI Msg   Channel Priv Limit&lt;br /&gt;
1                    true    true       true       Unknown (0x00)&lt;br /&gt;
2   admin            true    true       true       OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you see an error like &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Get User Access command failed (channel 2, user 3): Unknown (0x32)&amp;lt;/span&amp;gt;&amp;quot;, it is safe to ignore.}}&lt;br /&gt;
&lt;br /&gt;
Normally you should see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ADMINISTRATOR&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Channel Priv Limit&amp;lt;/span&amp;gt; column. Above we see that the user named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; with ID &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt;, so that is the user we will use.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; in the next argument corresponds to the user ID, not the LAN channel!}}&lt;br /&gt;
&lt;br /&gt;
To set the password to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt;, run the following command and then enter the word &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt; twice.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user set password 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password for user 2: &lt;br /&gt;
Password for user 2: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Testing the IPMI Connection From the Peer ===&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;ve set each node&#039;s IPMI BMC network address and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; user&#039;s password. Now it&#039;s time to make sure it works.&lt;br /&gt;
&lt;br /&gt;
In the example above, we walked through setting up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI BMC. So here, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and try to connect to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ipmi&amp;lt;/span&amp;gt; to make sure everything works.&lt;br /&gt;
&lt;br /&gt;
* From &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n01.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now let&#039;s test from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; connecting to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ipmi&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n02.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo!&lt;br /&gt;
&lt;br /&gt;
== Setting up SSH ==&lt;br /&gt;
&lt;br /&gt;
Setting up [[SSH]] shared keys will allow your nodes to pass files between one another and execute commands remotely without needing to enter a password. This will be needed later when we want to enable applications like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and its tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SSH is, on its own, a very big topic. If you are not familiar with SSH, please take some time to learn about it before proceeding. A great first step is the [http://en.wikipedia.org/wiki/Secure_Shell Wikipedia] entry on SSH, as well as the SSH [[man]] page; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man ssh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[SSH]] can be a bit confusing keeping connections straight in you head. When you connect to a remote machine, you start the connection on your machine as the user you are logged in as. This is the source user. When you call the remote machine, you tell the machine what user you want to log in as. This is the remote user.&lt;br /&gt;
&lt;br /&gt;
=== Create the RSA Keys ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section covers setting up [[SSH]] for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please be sure to follow these steps for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
You will need to create an SSH key for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on each node. Once created, we will need to copy the &amp;quot;public key&amp;quot; into a special file on both nodes to enable connecting to either node without a password.&lt;br /&gt;
&lt;br /&gt;
Lets start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The &#039;4095&#039; is just to screw with brute-forces a bit. :)&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 root@an-c05n01.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|     .E.         |&lt;br /&gt;
|     .o.         |&lt;br /&gt;
|      .o. .      |&lt;br /&gt;
|      ...*       |&lt;br /&gt;
|     .. S o      |&lt;br /&gt;
|    .  = o       |&lt;br /&gt;
|   . ...+ .      |&lt;br /&gt;
|    o ++ +       |&lt;br /&gt;
|     ++.+        |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will create two files: the private key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa&amp;lt;/span&amp;gt; and the public key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa.pub&amp;lt;/span&amp;gt;. The private &#039;&#039;&#039;&#039;&#039;must never&#039;&#039;&#039;&#039;&#039; be group or world readable! That is, it should be set to mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0600&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you look closely when you created the ssh key, the node&#039;s fingerprint is show (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40&amp;lt;/span&amp;gt; for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above). Make a note of the fingerprint for each machine, and then compare it to the one presented to you when you ssh to a machine for the first time. If you are presented with a fingerprint that doesn&#039;t match, you could be facing a &amp;quot;man in the middle&amp;quot; attack. &lt;br /&gt;
&lt;br /&gt;
To look up a fingerprint in the future, you can run the following;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -l -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
4095 1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 /root/.ssh/id_rsa.pub (RSA)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two newly generated files should look like;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Private key&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
MIIJIwIBAAKCAgBk3o54tw1f0BJ0UOp/OWpLa5VaKDIKKmwe7Um6kcmDVBO8Itbg&lt;br /&gt;
7FxXHxX6Xi/CqoqjPEwvpjSgBVSGF5IkSAcAdyKEmqJ0pM3A4Hg+g1JehQLx3k2v&lt;br /&gt;
DPfIcTvsIGEkS63XZiOs6t1sPubgjKw9encpYHq4s2Z26Ux/w85FbIMCR3oNroG2&lt;br /&gt;
scU4OJnICosoibsEXheaDzUl8fIpEkIHGVK4iOy2Y2CoxEKw5bE1yBv0KlRKrN9i&lt;br /&gt;
jFvoq2eAUG+NtjOxaG9DK3IgITQVd1PDgoBqEvEJK/kdfckGQu47cKGJS8bzgWLD&lt;br /&gt;
vXprg9OsXBu/MZSVK1AjvL3pfZEOT/k1B6gWu2ww7hGWVZj2IXnFcRv4TMs+DXg2&lt;br /&gt;
xZm7pWTkPLNxFzqtAZH60jXZmbPAFNDNS7M3Qs6oBCFlvUL00vFNu3uoM2NARG0V&lt;br /&gt;
bvLT0zb8dhQDpV2KoGsKUFGsDo773rH7AtBBPEzODgxjTk7rH+0Rt38JLN8T5XeO&lt;br /&gt;
RUitX9MS5abjis6DZ5agm8Swd3cpAK7g5yeKdxmUA774i+BlkkH1VdsdBT9RImvc&lt;br /&gt;
/OfVly208jpNRisCQgP4FTlEFG9YOeQ416euJ6xX5oP+I6z9f0rMzQEprh0WgT5r&lt;br /&gt;
/oIKfjwF3v109rquUZLxrLYb8qkomwWnxPD4VL7GPUU0hzgr+h+xRWI0nQIBIwKC&lt;br /&gt;
AgBfGvtb38rIDVM6eC2N5a1dDaoTLTZ+nQbbVMHby0j4KrOFf+8r14pDg7Wi6xcW&lt;br /&gt;
oMvbvIJYz+h5nqAmqIJ5+sTF7KuEV0i3HwsjkdB1dIDcxo2/edQ3VV6nC62G3LNc&lt;br /&gt;
vGIUO7s8ou4G+XqZNC1eiWkJwV3EFtzzxgZMlAugiuHsNMOJPiKHru0mYUCJaQbd&lt;br /&gt;
FCVb46/aZhwrF1IJd51XJoExpav8bFPSUqVHs/7a79/XlZ/uov6BfQYzJURUaRi4&lt;br /&gt;
0Fyf9MCtC7S/NT+8d9KiZRn9nNSiP2c5EDKQ4AUwuqbvKjCccq2T+8syK9Y0y9+l&lt;br /&gt;
o8abRhhcNZ0d+gxslIvhiuBOtTTV7Fy6zYyhSkAOzF33kl+jDDm2nNvxjxFU3Lo1&lt;br /&gt;
qSP7n2yedz5QKOvwykmwN/uzn5FWSmKc5GdL/t+yu94zf0eR9pDhkg0u9dXFkim0&lt;br /&gt;
Hq8RsW1vH4aD0BBMiBn34EbnaQaotX7lAUxfTjG0iZ9z8T48NIqPf/66evqUk3bx&lt;br /&gt;
VoFS79GkW8yWrXQX6B3oUAtm10aeP9Htz+AQIPdatO9pREIzE6UbEnc2kSrzFcJh&lt;br /&gt;
4hmarrQgJq7qzFjgRLBgjiOsdEo5SGLTFh17UIh5k/deeTxLsGSFuBbpz5+jr4tt&lt;br /&gt;
0s4wcmamTR8ruURGh+4i/Px6F9QsechnIMKGNthWVxhEawKCAQEA2kCH/FL/A7Ib&lt;br /&gt;
fCt0PFvCKWeF1V+PhdzEdkIRvS3OusWP9Z+py6agh3kAFWjOZT16WgYPeftMKYaE&lt;br /&gt;
3Wiixfx+99ta0eQiKqozYgB3pg5UWdxsXv30jrTyRuhhEBId2lGV6/eHgGYs48s1&lt;br /&gt;
oCCrljsVmWd+p4uSAplIBewCv7YPsxl3DZJTV6DFRD9mnuqjrqozSM+UsoMPRTPZ&lt;br /&gt;
7AyaDxeb63LiWTq6T/gLHptmu8K0SLvDkzA5LeBWKUNFcMHpWODpzjPj5J4Mtulr&lt;br /&gt;
R8oLtEy/2ZyWi7n8JuOt+swTsZDN0Qzcpzw9MU1RWs0sqGvTO91bMjc+FYew7wuZ&lt;br /&gt;
CEZxX4VxSQKCAQB2ULaKc4Oersq7Z3fQXIynLNT8lZ/AKQaAH/SdLL7IGKWRZ9eA&lt;br /&gt;
VOQNnZnThnKMDbDS8GPOpjzfjPDP8L7Y6NOVgc6ETGEdvoXomZv+sqpwx3BWszNK&lt;br /&gt;
18FfV0HhLv0MFHAPfMIqPqhhYUDnDAt/yWFViujIIrllmXjH9JGZDdPgzsupPToZ&lt;br /&gt;
FKC5UAYeAZwpaX2AROrfACscn99kNsTE7F8HtMQ//iT+M0rHVTzhVBnm1/e3eY1J&lt;br /&gt;
9L6WUbCPzBeiNFNC+y9+0nZk0tkgJk+qUPYdnaQL44TtlZMT1iWKg3C6dgrjbbaG&lt;br /&gt;
tFZmwh2/hf0Aovycpn/Fm2PKwxved64FnDy1AoIBABK1Evhe4qiLm/SzRHozwC9v&lt;br /&gt;
RfxYpebnCYZ6sRA3IFkm4HQjoNbxBnIDDqK/1y0/yKihbwp0oCDRBBL6VxhI167Y&lt;br /&gt;
SZz2TBJJGljbd/hKXwBjWb7/0yIsxE84fVkmH9Dia++ngKSbCyl30WV/JKZ6F8tS&lt;br /&gt;
A4q0MRYqZUJWDt07fbBEAuPn+IPalJDSO/7+K0l8TYnl6CyO5A0+9WwBFITzZSLP&lt;br /&gt;
VTrZJemY6wKfmxdoddpZPKY3VVu0JKRzevsJToP2BWlyKXn+6yWe+pEf8l/pUkXa&lt;br /&gt;
OMol4mm7vnSVJkJrf1sPuyRG/e5IdLAC9TMB7YjJ1J3nelmd6pglkMYx7HXm3dMC&lt;br /&gt;
ggEAUSFnOl3WmLJfIWuFW60tP28y9lf4g8RcOpmRytzal9Zi510mDtsgCVYgVogU&lt;br /&gt;
CEPm9ws9H/z2iqnJsyi9YYm1qFkCo9yaXYn1bEwTMk6gwlzfUWTv+M51+DvVZzYp&lt;br /&gt;
3GXJLzD6K5it+aHGGsZuSP8eLAd7DOScYuzlG2XgLm/hvrmwOYkR5U/5Lp1GBfJ5&lt;br /&gt;
tf8xfIcHdFfjDFBeqx49yNyY71dh//66R+ioTivR+ZjBTdXrsQLkinvwZxNxwbCF&lt;br /&gt;
PAaffmMZQQVYf6aGQe5ig2q3ZMPeNAm6PIPSkUJi4qNF/DOvseTU7qeLtC1WOi/9&lt;br /&gt;
8c7ZGvXT9TdaXya0BkNwA9jZKwKCAQBUDqjJ7Q/nlxLifyOInW1RbwbUFzh7mdfC&lt;br /&gt;
w6362II2gIz0JRg7HQHMwfbY5t+ELi9Rsdn90wlPQ08cK42goKW46Nt30g+AoQ/N&lt;br /&gt;
0maLzbrn5BffAtI7XM0a4i3dZ/yjS0/NW39km0YnTe49W6CBBf91fChIfm+jvYna&lt;br /&gt;
ihA9x/SgyuBUvQ1bCrMzMM024TxhCkvvKI2MDmJNJHOeqovYFAXiHFGPmftunu1K&lt;br /&gt;
oDRUPb6j5gTBhxAV1ZPHKCee7EIFwi/jJ/31oMLEJp5RnAdrW+FitPjQ7hcoRStm&lt;br /&gt;
VZAoapBJb37xa1kq/7hHYf2bPVdrcO8AeStpjEh6GbtYmy2pWlFy&lt;br /&gt;
-----END RSA PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is line-wrapped to make it easier to read. Real keys should be a single line.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public key&#039;&#039;&#039; (single line, but wrapped here to make it more readable):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa.pub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgBKYiBxI06RGiar5rt121+tO1crpa9MwL+K5qtlx0IrL7QUDxi+hvdXg3sTS6+R/mnLDE8eS&lt;br /&gt;
ulgRX4fHweNbM96wnl2N9mOnODLJftWPbPUHFpTc/0bDRcXq4rB+V+NvXG1i74W1si8Fp/R5wnPmF7yo/ZjN2zXLhwesOVY3Cnmur+O19&lt;br /&gt;
80O4lT7Zl5Q0mALNkriouhD+FzQZnMky8X2MM4dmnYqctCI54jbgD0vN09uUu8KyGycV9BFW7ScfGBEvow4/+8YW+my4bG0SBjJki7eOK&lt;br /&gt;
W3fvr58cybXO+UBqLFO7yMe5jf0fClyz6MFn+PRPR37QQy4GIC+4MCaYaiCx2P/K+K/ZxH621Q8nBE9TdNCw6iVqlt5Si3x2UzxOlrYLZ&lt;br /&gt;
nvB1BfzY92Rd/RNP5bz17PapaOMLjkx6iIAEDbp2lL5vzGp+1S30SX956sX/4CYWVTg+MAwok9mUcyj60VU+ldlPDuN7UYUi8Wmoa6Jsu&lt;br /&gt;
ozstUNBCsUcKzt5FEBy4vOwOMtyu3cD4rQrn3eGXfZ1a4QpLnR2H9y7EnM4nfGdQ/OVjMecAtHUxx3FDltHgiSkQDEF9R4s3z6NLZ2mda&lt;br /&gt;
TU9A5zm+1rMW1ZLhGkfna/h2KV9o8ZNx79WyKMheajL4lgi495D7c6fF4GBgX7u7qrdZyCj2cXgrgT4nGwM2Z81Q== root@an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now do the same thing on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to generate its key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
68:71:fb:87:88:e3:c2:89:49:ad:d0:55:7d:1c:05:b6 root@an-c05n02.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|       . .++.    |&lt;br /&gt;
|      . ..o.     |&lt;br /&gt;
|     .. ..E      |&lt;br /&gt;
|    .  + .       |&lt;br /&gt;
| . o  o S        |&lt;br /&gt;
|. o .. . o .     |&lt;br /&gt;
| o = .o . o .    |&lt;br /&gt;
|  + +. .   .     |&lt;br /&gt;
|     ..          |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Populate known_hosts ===&lt;br /&gt;
&lt;br /&gt;
Normally, the first time you try to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; into a computer, you will be asked to verify that the fingerprint reported by the target server is valid. We just created our nodes, so we can trust that we&#039;re connecting to the actual target machine we think we are.&lt;br /&gt;
&lt;br /&gt;
Seeing as we&#039;re comfortable with this, we can use a nifty program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh-keyscan&amp;lt;/span&amp;gt; to read the fingerprint of the target machine and copy the resulting key to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file. We&#039;ll need to do this for all variations of the host names for each node. This alone means that we need to add ten fingerprints, five for the five names of each node.&lt;br /&gt;
&lt;br /&gt;
This is somewhat tedious, so we&#039;ll do this once on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy the populated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; later.&lt;br /&gt;
&lt;br /&gt;
If you recall from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; section, we&#039;ve got five possible host names per node. We&#039;ll call all of them now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with [[bash]] redirections, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt; ~/.ssh/known_hosts&amp;lt;/span&amp;gt; file tells the OS, &amp;quot;Take the returned text that would have been printed to screen and instead append it to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt;&amp;quot;. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; didn&#039;t exist yet, so it was created.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll repeat this, once for each host name for either node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all the host names for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Now we&#039;ll repeat the steps for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now we won&#039;t get asked to verify the target machine&#039;s RSA fingerprint when we try to connect later. More importantly, if the fingerprint ever changes, it will generate a very noisy alert telling us that something nasty, like a fake target having replaced our peer, might have happened.&lt;br /&gt;
&lt;br /&gt;
The last step is to copy this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, saving us the hassle of running all those commands a second time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/known_hosts root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: Permanently added the RSA host key for IP address &#039;10.20.50.2&#039; to the list of known hosts.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that warning, it&#039;s a one time thing. Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
known_hosts&lt;br /&gt;
&lt;br /&gt;
sent 4817 bytes  received 31 bytes  1077.33 bytes/sec&lt;br /&gt;
total size is 4738  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Copy Public Keys to Enable SSH Without a Password ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This only disabled the need for passwords when connecting from one node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; use to the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user. It does not remove the need for passwords from any other machines or users!}}&lt;br /&gt;
&lt;br /&gt;
In order to enable password-less login, we need to create a file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; and put both nodes&#039; public key in it. We will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll copy the local &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; file. This will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file and add the local public RSA in one step.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; to print the contents of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s public key to screen, but redirect the key to the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02 &amp;quot;cat /root/.ssh/id_rsa.pub&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done. Now we can verify that both keys have been added to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I&#039;m truncating the output below to make it more readable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n01.alteeve.ca&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and, with luck, enter the password one last time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/authorized_keys root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
authorized_keys&lt;br /&gt;
&lt;br /&gt;
sent 1577 bytes  received 31 bytes  643.20 bytes/sec&lt;br /&gt;
total size is 1494  speedup is 0.93&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to test connecting from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should not get any prompt at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Last login: Tue Oct 29 14:02:19 2013 from ...cable.user.start.ca&lt;br /&gt;
[root@an-c05n02 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice! Just type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exit&amp;lt;/span&amp;gt; to return to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
logout&lt;br /&gt;
Connection to an-c05n02 closed.&lt;br /&gt;
[root@an-c05n01 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; from either node to connect to the other node using any of the host names we set! Note that the physical network you use for the connection will depend on the host name you use. When you used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; above, you connect using the [[BCN]]. Had you instead used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;, we would have connected over the [[SN]].&lt;br /&gt;
&lt;br /&gt;
== Setting Up UPS Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that you are using [http://www.apc.com/site/apc/index.cfm?ISOCountryCode=ca APC] brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] network management cards. If you use another make or model, please be sure that it uses a network connection, not USB or serial, and that it is supported by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://www.apcupsd.com/ apcupsd]&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We always recommend that you have two network-managed [[UPS]]es backing either switched [[PDU]]. This protects your &#039;&#039;Anvil!&#039;&#039; against power outages, of course, but they can also protect against distorted input power, under and over voltage events and other power anomalies. &lt;br /&gt;
&lt;br /&gt;
The reason we recommend network managed UPSes, instead of passive UPSes, is that it allows for monitoring incoming power and alerting on notable events. We have found that power events are the most common issues in production. Being alerted to power events can allow you to deal with issues that might otherwise effect other equipment in your facility that isn&#039;t or can&#039;t be protected by UPSes.&lt;br /&gt;
&lt;br /&gt;
=== Installing apcupsd ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; program is not available in the normal [[RHEL]] or [[CentOS]] repositories. So you can either [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Build_From_Source|build it yourself]] or install a version pre-built by us. In production, it certainly makes sense to build your own as it&#039;s most secure. If you wish, you could also [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Installing_on_CentOS|install from ELRepo]].&lt;br /&gt;
&lt;br /&gt;
For the purpose of this tutorial, we&#039;ll download the version from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; servers as it&#039;s the simplest option.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring Apcupsd For Two UPSes ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Much of the credit for this section belongs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s [http://www.apcupsd.org/manual/manual.html#controlling-multiple-upses-on-one-machine project documentation] on the topic. It&#039;s been edited somewhat to better suit our needs.}}&lt;br /&gt;
&lt;br /&gt;
By default, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; only supports one UPS. The practical side effect of this is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will initiate a shut down as soon as the first UPS is low on batteries. This makes no sense if the second UPS is still full or running on AC.&lt;br /&gt;
&lt;br /&gt;
So we&#039;re going to make two main changes here;&lt;br /&gt;
&lt;br /&gt;
# Disable the ability for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down of the node.&lt;br /&gt;
# Configure &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to support two (or more) UPSes.&lt;br /&gt;
&lt;br /&gt;
Before we begin, we will make a backup of the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.conf&amp;lt;/span&amp;gt; file. Then we&#039;re going to rename it and configure it for the first UPS. Once it&#039;s configured, we will copy it for the second UPS and change just the variable values that differ.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once it&#039;s configured and working, we&#039;ll copy our new configuration to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
We [[#Foundation_Pack_Host_Names|decided earlier]] to name our UPSes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;. We&#039;re going to use these names in the configuration and log file names used for each UPS. So let&#039;s backup the original configuration file and then rename it to match our first UPS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.conf.anvil&lt;br /&gt;
mv /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
ls -lah /etc/apcupsd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 108K&lt;br /&gt;
drwxr-xr-x.  3 root root 4.0K Nov 26 17:34 .&lt;br /&gt;
drwxr-xr-x. 90 root root  12K Nov 25 17:28 ..&lt;br /&gt;
-rwxr--r--.  1 root root 3.9K Mar  4  2013 apccontrol&lt;br /&gt;
-rw-r--r--.  1 root root  13K Mar  4  2013 apcupsd.an-u01.conf&lt;br /&gt;
-rw-r--r--.  1 root root  13K Nov 26 15:49 apcupsd.conf.anvil&lt;br /&gt;
-rw-r--r--.  1 root root  607 Mar  4  2013 apcupsd.css&lt;br /&gt;
-rwxr--r--.  1 root root  460 Mar  4  2013 changeme&lt;br /&gt;
-rwxr--r--.  1 root root  487 Mar  4  2013 commfailure&lt;br /&gt;
-rwxr--r--.  1 root root  488 Mar  4  2013 commok&lt;br /&gt;
-rwxr-xr-x.  1 root root  17K Mar  4  2013 hid-ups&lt;br /&gt;
-rw-r--r--.  1 root root  662 Mar  4  2013 hosts.conf&lt;br /&gt;
-rwxr-xr-x.  1 root root  626 May 28  2002 make-hiddev&lt;br /&gt;
-rw-r--r--.  1 root root 2.3K Mar  4  2013 multimon.conf&lt;br /&gt;
-rwxr--r--.  1 root root  455 Mar  4  2013 offbattery&lt;br /&gt;
-rwxr--r--.  1 root root  420 Mar  4  2013 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;re going to create a new directory called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;. We&#039;ll copy some of the existing scripts into it and then create a new script that will disabled automatic shut down of the node. We&#039;re doing this so that future updates to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; won&#039;t replace our scripts. We&#039;ll see how we use this shortly.&lt;br /&gt;
&lt;br /&gt;
Once the directory is created, we&#039;ll copy the scripts we want. Next, we&#039;ll create a new script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;doshutdown&amp;lt;/span&amp;gt; which will do nothing expect exit with return code &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;99&amp;lt;/span&amp;gt;. This return code tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that the shut down action has been disabled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /etc/apcupsd/null&lt;br /&gt;
cp /etc/apcupsd/apccontrol /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/c* /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/o* /etc/apcupsd/null/&lt;br /&gt;
echo &amp;quot;exit 99&amp;quot; &amp;gt; /etc/apcupsd/null/doshutdown&lt;br /&gt;
chown root:root /etc/apcupsd/null/doshutdown&lt;br /&gt;
chmod 744 /etc/apcupsd/null/doshutdown&lt;br /&gt;
cat /etc/apcupsd/null/doshutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
exit 99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /etc/apcupsd/null/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 36K&lt;br /&gt;
drwxr-xr-x. 2 root root 4.0K Nov 26 17:39 .&lt;br /&gt;
drwxr-xr-x. 3 root root 4.0K Nov 26 17:34 ..&lt;br /&gt;
-rwxr--r--. 1 root root 3.9K Nov 26 17:35 apccontrol&lt;br /&gt;
-rwxr--r--. 1 root root  460 Nov 26 17:36 changeme&lt;br /&gt;
-rwxr--r--. 1 root root  487 Nov 26 17:36 commfailure&lt;br /&gt;
-rwxr--r--. 1 root root  488 Nov 26 17:36 commok&lt;br /&gt;
-rwxr--r--. 1 root root    8 Nov 26 17:39 doshutdown&lt;br /&gt;
-rwxr--r--. 1 root root  455 Nov 26 17:36 offbattery&lt;br /&gt;
-rwxr--r--. 1 root root  420 Nov 26 17:36 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now it&#039;s time to change the variables in the configuration file. Before we do though, lets look at the variables we&#039;re going to edit, what value we will set them to for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and what they do. We&#039;ll look at the specific variables we need to change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&#039;s configuration file later.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name to use for this UPS when writing log entries or reporting status information. It should be less than eight characters long. We&#039;re going to use the short host name for the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSTYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;snmp&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that we will communicate with this UPS using [[SNMP]] to talk to the network management card in the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the connection string needed for establishing the SNMP connection to the UPS. It&#039;s separated into four sections, each section separated by colons. The first value is the host name or IP address of the UPS. The second section is the [[TCP]] port to connect to, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;161&amp;lt;/span&amp;gt; on APC brand UPSes. The third and fourth sections are the vendor name and SNMP community, respectively. We&#039;re using the vendor name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;APC_NOTRAP&amp;lt;/span&amp;gt; in order to disable SNMP traps. The community should usually be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;private&amp;lt;/span&amp;gt;, unless you changed it in the network management card itself.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;POLLTIME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; how often, in seconds, to query the UPS status. The default is once per minute, but we will want twice per minute in order to match the scan frequency of the monitoring and alter system we will use later.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;SCRIPTDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to use the scripts in our new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory instead of the default ones.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PWRFAILDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|Some UPSes need to be powered off themselves when the power is about to run out of the batteries. This is controlled by a file written to this directory which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s shut down script looks for. We&#039;ve disabled shut down, but to be safe and thorough, we will disable this as well by pointing it at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BATTERYLEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this percentage left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MINUTES&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this many minutes of run time left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3551&amp;lt;/span&amp;gt;&lt;br /&gt;
|The default value here is fine for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, but it is important to highlight here. We will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; to query &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s data over the network, even though it&#039;s on the same machine. Each UPS we monitor will have an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon running and listening on a dedicated [[TCP]] port. The first UPS, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, will listen on the default port. Which port we specify when using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; later will determine which UPS status information is returned.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ANNOY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will start &amp;quot;annoying&amp;quot; the users of the system to save their work and log out five minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt; seconds) before calling the shut down of the server. We&#039;re disabling automatic shut down, so this needs to be disabled.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is where events related to this UPS are recorded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this in mind, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the file. If you are more comfortable with a text editor, please use that instead. You can refer to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; at the end of this section to see exactly what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the name of the UPS and domain once.&lt;br /&gt;
ups=&amp;quot;an-u01&amp;quot;&lt;br /&gt;
domain=&amp;quot;alteeve.ca&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS name. Note the odd syntax; There are two &#039;UPSNAME&#039; entries&lt;br /&gt;
# in the config and we only want to change the first instance.&lt;br /&gt;
sed -i &amp;quot;0,/#UPSNAME/s/^#UPSNAME/UPSNAME/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS access&lt;br /&gt;
sed -i &amp;quot;s/^UPSTYPE.*/UPSTYPE snmp/&amp;quot;                                  /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the poll time.&lt;br /&gt;
sed -i &amp;quot;s/^#POLLTIME/POLLTIME/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^POLLTIME.*/POLLTIME 30/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Update the script directories&lt;br /&gt;
sed -i &amp;quot;s/^SCRIPTDIR.*/SCRIPTDIR \/etc\/apcupsd\/null/&amp;quot;   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^PWRFAILDIR.*/PWRFAILDIR \/etc\/apcupsd\/null/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the shut down thresholds and disable the shut down annoy message&lt;br /&gt;
sed -i &amp;quot;s/^BATTERYLEVEL .*/BATTERYLEVEL 0/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^MINUTES .*/MINUTES 0/&amp;quot;           /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^ANNOY .*/ANNOY 0/&amp;quot;               /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# The NIS port isn&#039;t changing, but this makes sure it really is what we want.&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3551/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Finally, update the event log file name.&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# End with a &#039;diff&#039; of the updated configuration against the backup we made.&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.conf.anvil /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.conf.anvil	2013-11-26 15:49:47.852153374 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 19:58:17.810278390 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-#UPSNAME&lt;br /&gt;
+UPSNAME an-u01&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -76,8 +76,8 @@&lt;br /&gt;
 #                            3052. If this parameter is empty or missing, the &lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
-UPSTYPE apcsmart&lt;br /&gt;
-DEVICE /dev/ttyS0&lt;br /&gt;
+UPSTYPE snmp&lt;br /&gt;
+DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -86,7 +86,7 @@&lt;br /&gt;
 #   will improve apcupsd&#039;s responsiveness to certain events at the cost of&lt;br /&gt;
 #   higher CPU utilization. The default of 60 is appropriate for most&lt;br /&gt;
 #   situations.&lt;br /&gt;
-#POLLTIME 60&lt;br /&gt;
+POLLTIME 30&lt;br /&gt;
 &lt;br /&gt;
 # LOCKFILE &amp;lt;path to lockfile&amp;gt;&lt;br /&gt;
 #   Path for device lock file. Not used on Win32.&lt;br /&gt;
@@ -94,14 +94,14 @@&lt;br /&gt;
 &lt;br /&gt;
 # SCRIPTDIR &amp;lt;path to script directory&amp;gt;&lt;br /&gt;
 #   Directory in which apccontrol and event scripts are located.&lt;br /&gt;
-SCRIPTDIR /etc/apcupsd&lt;br /&gt;
+SCRIPTDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # PWRFAILDIR &amp;lt;path to powerfail directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the powerfail flag file. This file&lt;br /&gt;
 #   is created when apcupsd initiates a system shutdown and is&lt;br /&gt;
 #   checked in the OS halt scripts to determine if a killpower&lt;br /&gt;
 #   (turning off UPS output power) is required.&lt;br /&gt;
-PWRFAILDIR /etc/apcupsd&lt;br /&gt;
+PWRFAILDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # NOLOGINDIR &amp;lt;path to nologin directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the nologin file. The existence&lt;br /&gt;
@@ -132,12 +132,12 @@&lt;br /&gt;
 # If during a power failure, the remaining battery percentage&lt;br /&gt;
 # (as reported by the UPS) is below or equal to BATTERYLEVEL, &lt;br /&gt;
 # apcupsd will initiate a system shutdown.&lt;br /&gt;
-BATTERYLEVEL 5&lt;br /&gt;
+BATTERYLEVEL 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the remaining runtime in minutes &lt;br /&gt;
 # (as calculated internally by the UPS) is below or equal to MINUTES,&lt;br /&gt;
 # apcupsd, will initiate a system shutdown.&lt;br /&gt;
-MINUTES 3&lt;br /&gt;
+MINUTES 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the UPS has run on batteries for TIMEOUT&lt;br /&gt;
 # many seconds or longer, apcupsd will initiate a system shutdown.&lt;br /&gt;
@@ -155,7 +155,7 @@&lt;br /&gt;
 &lt;br /&gt;
 #  Time in seconds between annoying users to signoff prior to&lt;br /&gt;
 #  system shutdown. 0 disables.&lt;br /&gt;
-ANNOY 300&lt;br /&gt;
+ANNOY 0&lt;br /&gt;
 &lt;br /&gt;
 # Initial delay after power failure before warning users to get&lt;br /&gt;
 # off the system.&lt;br /&gt;
@@ -203,7 +203,7 @@&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; config file over to the one we&#039;ll use for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to change the following variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Changed value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to copy the configuration file and then use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; again to make these changes. We&#039;ll finish with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; showing the differences between the two configuration files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make a copy of the configuration file.&lt;br /&gt;
cp /etc/apcupsd/apcupsd.an-u01.conf /etc/apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
&lt;br /&gt;
# Set the name of this UPS. The &#039;domain&#039; variable should still be set.&lt;br /&gt;
ups=&amp;quot;an-u02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change the variables &lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;                                   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot;    /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3552/&amp;quot;                                     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.an-u02.conf /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.an-u02.conf	2013-11-26 20:09:18.884783551 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 20:13:20.273346652 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-UPSNAME an-u01&lt;br /&gt;
+UPSNAME an-u02&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -77,7 +77,7 @@&lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
 UPSTYPE snmp&lt;br /&gt;
-DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
+DEVICE an-u02.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -199,11 +199,11 @@&lt;br /&gt;
 #  It is not used unless NETSERVER is on. If you change this port,&lt;br /&gt;
 #  you will need to change the corresponding value in the cgi directory&lt;br /&gt;
 #  and rebuild the cgi programs.&lt;br /&gt;
-NISPORT 3551&lt;br /&gt;
+NISPORT 3552&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u02.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last change that is needed is to update the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; initialization script. We&#039;re going to copy a pre-edited one from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; server and then look at the differences. We could edit the file, but it would be a little more complex. So instead, lets look at the differences and then talk about what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv /etc/init.d/apcupsd /root/apcupsd.init.d.anvil&lt;br /&gt;
wget https://alteeve.ca/files/apcupsd/apcupsd -O /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-26 20:59:42--  https://alteeve.ca/files/apcupsd/apcupsd&lt;br /&gt;
Resolving alteeve.ca... 65.39.153.64&lt;br /&gt;
Connecting to alteeve.ca|65.39.153.64|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 1759 (1.7K) [text/plain]&lt;br /&gt;
Saving to: `/etc/init.d/apcupsd&#039;&lt;br /&gt;
&lt;br /&gt;
100%[=========================================================================&amp;gt;] 1,759       --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-26 20:59:42 (5.10 MB/s) - `/etc/init.d/apcupsd&#039; saved [1759/1759]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 /etc/init.d/apcupsd &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 1.8K Aug 19  2012 /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -u /root/apcupsd.init.d.anvil /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/apcupsd.init.d.anvil	2013-03-04 23:32:43.000000000 -0500&lt;br /&gt;
+++ /etc/init.d/apcupsd	2012-08-19 18:36:33.000000000 -0400&lt;br /&gt;
@@ -1,7 +1,7 @@&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # apcupsd      This shell script takes care of starting and stopping&lt;br /&gt;
-#	       the apcupsd UPS monitoring daemon.&lt;br /&gt;
+#	       the apcupsd UPS monitoring daemon. Multi-UPS version.&lt;br /&gt;
 #&lt;br /&gt;
 # chkconfig: 2345 60 99&lt;br /&gt;
 # description: apcupsd monitors power and takes action if necessary&lt;br /&gt;
@@ -15,18 +15,24 @@&lt;br /&gt;
     start)&lt;br /&gt;
        rm -f /etc/apcupsd/powerfail&lt;br /&gt;
        rm -f /etc/nologin&lt;br /&gt;
-       echo -n &amp;quot;Starting UPS monitoring:&amp;quot; &lt;br /&gt;
-       daemon /sbin/apcupsd -f /etc/apcupsd/apcupsd.conf&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       echo&lt;br /&gt;
-       [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Starting UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          daemon /sbin/apcupsd -f $conf -P /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          echo&lt;br /&gt;
+          [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     stop)&lt;br /&gt;
-       echo -n &amp;quot;Shutting down UPS monitoring:&amp;quot;&lt;br /&gt;
-       killproc apcupsd&lt;br /&gt;
-       echo&lt;br /&gt;
-       rm -f $APCPID&lt;br /&gt;
-       rm -f /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Shutting down UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          killproc -p /var/run/apcupsd-$inst.pid apcupsd&lt;br /&gt;
+          echo&lt;br /&gt;
+          rm -f /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          rm -f /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     restart|force-reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
@@ -38,14 +44,16 @@&lt;br /&gt;
        exit 3&lt;br /&gt;
        ;;&lt;br /&gt;
     status)&lt;br /&gt;
-       status apcupsd&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       if [ $RETVAL -eq 0 ]&lt;br /&gt;
-       then&lt;br /&gt;
-          /sbin/apcaccess status&lt;br /&gt;
-       else&lt;br /&gt;
-          exit $RETVAL&lt;br /&gt;
-       fi&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          status -p /var/run/apcupsd-$inst.pid apcupsd-$inst&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          if [ $RETVAL -eq 0 ]&lt;br /&gt;
+          then&lt;br /&gt;
+             NISPORT=`grep ^NISPORT &amp;lt; $conf | sed -e &amp;quot;s/NISPORT *\([0-9]\)/\1/&amp;quot;`&lt;br /&gt;
+             /sbin/apcaccess status localhost:$NISPORT | egrep &amp;quot;(STATUS)|(UPSNAME)&amp;quot;&lt;br /&gt;
+          fi&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|status}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The main change here is that, for each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt; calls, we tell the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; script to loop one for each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.*.conf&amp;lt;/span&amp;gt; file it finds. The original script expected just one configuration file but was otherwise perfect for what we needed. So we shifted the existing calls into our loop. &lt;br /&gt;
&lt;br /&gt;
So all this new script does is repeat what the original did already, once for each configuration file.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s copy all of this over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; now!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/init.d/apcupsd root@an-c05n02:/etc/init.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd&lt;br /&gt;
&lt;br /&gt;
sent 1834 bytes  received 43 bytes  3754.00 bytes/sec&lt;br /&gt;
total size is 1759  speedup is 0.94&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/apcupsd root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd/&lt;br /&gt;
apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
apcupsd/apcupsd.conf.anvil&lt;br /&gt;
apcupsd/null/&lt;br /&gt;
apcupsd/null/apccontrol&lt;br /&gt;
apcupsd/null/changeme&lt;br /&gt;
apcupsd/null/commfailure&lt;br /&gt;
apcupsd/null/commok&lt;br /&gt;
apcupsd/null/doshutdown&lt;br /&gt;
apcupsd/null/offbattery&lt;br /&gt;
apcupsd/null/onbattery&lt;br /&gt;
&lt;br /&gt;
sent 44729 bytes  received 210 bytes  29959.33 bytes/sec&lt;br /&gt;
total size is 70943  speedup is 1.58&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /root/apcupsd.init.d.anvil root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd.init.d.anvil&lt;br /&gt;
&lt;br /&gt;
sent 1276 bytes  received 31 bytes  871.33 bytes/sec&lt;br /&gt;
total size is 1188  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SELinux and apcupsd ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section needs some clean-up.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got two [[SELinux]] issues to address:&lt;br /&gt;
&lt;br /&gt;
* Allow the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon to use [[TCP]] and [[UDP]] ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Allow both daemons to write to the non-standard log files.&lt;br /&gt;
&lt;br /&gt;
You can see what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;selinux&amp;lt;/span&amp;gt; allows various applications to use with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage port -l&amp;lt;/span&amp;gt;. This generates a lot of data, so we&#039;re interested just in seeing what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; is already allowed to use. So we&#039;ll pipe it through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;grep&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_port_t&amp;lt;/span&amp;gt; context is used for both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tcp&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;udp&amp;lt;/span&amp;gt;. With this, we can simply add port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=These commands can take a while to run. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, enabling the context for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt; log files.&lt;br /&gt;
&lt;br /&gt;
These files don&#039;t exist until the daemon starts for the first time. We&#039;ve not started it yet, so the first task is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt; to create these log files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have the default log file to check to see what context to use for our log files, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://mgrepl.fedorapeople.org/man_selinux/Fedora18/apcupsd.html apcupsd_selinux]&amp;lt;/span&amp;gt; manual tells us that we need to set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_log_t &amp;lt;/span&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, ready to test!&lt;br /&gt;
&lt;br /&gt;
=== Testing the Multi-UPS apcupds ===&lt;br /&gt;
&lt;br /&gt;
If our edits above worked properly, we should now be able to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon and query out UPSes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That looks good. Now the real test; Query the status of each UPS! &lt;br /&gt;
&lt;br /&gt;
This generates a fair bit of output, so lets just look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 21:21:20 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 121.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 21:21:29 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 21:21:48 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 31817744.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 31817744.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 31817744&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 21:21:57 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you notice the serial numbers, we see that they differ and match the ones we have on record. This confirms that we&#039;re talking to both UPSes!&lt;br /&gt;
&lt;br /&gt;
Before we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the keen observer will have noted that some of the sensor values are slightly unrealistic. Some UPSes optionally support environmental sensors and, without them, their values are not realistic at all. Those can be safely ignored and are not used by the monitoring and alert system.&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s confirm that the same calls from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; result in the same values!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 22:14:12 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 122.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 22:14:22 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 22:14:11 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 19898384.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 19898384.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 19898384&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 22:14:38 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Later, when we setup the monitoring and alert system, we&#039;ll take a closer look at some of the variables and their possible values.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Storage ==&lt;br /&gt;
&lt;br /&gt;
At this time, this section covers monitoring LSI-based [[RAID]] controllers. If you have a different RAID controller and wish to contribute, we&#039;d [[Contct us|love to hear from you]].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring LSI-Based RAID Controllers with MegaCli ===&lt;br /&gt;
&lt;br /&gt;
Many tier-1 hardware vendors as well as many mid-tier and in-house brand servers use controllers built by or based on [http://www.lsi.com LSI] [[RAID]] controller cards.&lt;br /&gt;
&lt;br /&gt;
==== Installing MegaCli ====&lt;br /&gt;
&lt;br /&gt;
In this section, we&#039;ll install LSI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; command-line tool for monitoring our storage. This is a commercial tool, so you must download it directly from LSI&#039;s website and agree to their license agreement.&lt;br /&gt;
&lt;br /&gt;
At the time of writing, you can download it [http://www.lsi.com/support/Pages/download-results.aspx?keyword=latest%20megacli%20for%20linux using this link]. Click on the orange &amp;quot;+&amp;quot; to the right of &amp;quot;&#039;&#039;Management Software and Tools&#039;&#039;&amp;quot; in the search results page.  Click on the &amp;quot;Download&amp;quot; icon and save the file to disk. Extract the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli_Linux.zip&amp;lt;/span&amp;gt; file and switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/MegaCli_Linux&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The version of the file name shown below may have changed.}}&lt;br /&gt;
&lt;br /&gt;
Copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli-8.07.08-1.noarch.rpm&amp;lt;/span&amp;gt; file to your nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n01:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can install the program on our nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By default, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; binary is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/opt/MegaRAID/MegaCli/MegaCli64&amp;lt;/span&amp;gt;. This isn&#039;t in [[RHEL]]&#039;s default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PATH&amp;lt;/span&amp;gt;, so we will want to make a symlink to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/sbin&amp;lt;/span&amp;gt;. This way, we can simply type &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;&#039; instead of the full path.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent.&lt;br /&gt;
&lt;br /&gt;
==== Checking Storage Health with MegaCli64 ====&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This tutorial was written using a development server and, as such, has only four drives in each array. All production servers should have a &#039;&#039;&#039;minimum&#039;&#039;&#039; of six drives to help ensure good storage response time under highly random reads and writes seen in virtualized environments.}}&lt;br /&gt;
&lt;br /&gt;
LSI RAID controllers are designed to work alone or in conjunction with other LSI controllers at the same time. For this reason, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; supports multiple controllers, virtual disks, physical disks and so on. We&#039;re going to be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;aAll&amp;lt;/span&amp;gt; a lot. This simply tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; to show whatever we&#039;re asking for from all found adapters.&lt;br /&gt;
&lt;br /&gt;
The program itself is extremely powerful. Trying to cover all the ways that it can be used would require a long tutorial in and of itself. So we&#039;re going to just look at some core tasks that we&#039;re interested in. If you want to experiment, there is a great [http://mycusthelp.info/LSI/_cs/AnswerDetail.aspx?sSessionID=1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB&amp;amp;inc=8040&amp;amp;caller=~%2fFindAnswers.aspx%3ftxtCriteria%3dmegacli%26sSessionid%3d1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB cheat-sheet here].&lt;br /&gt;
&lt;br /&gt;
Lets start by looking at the logical drive.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can see that the virtual disk has four real disks in RAID level 5, it is 836.625 [[GB]] in size and it&#039;s in [[WriteBack]] caching mode. This is pretty typical, save for the number of disks.&lt;br /&gt;
&lt;br /&gt;
Lets look now at the health of the RAID controller&#039;s battery.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4083 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 28 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 74 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Absolute State of charge: 74 %&lt;br /&gt;
  Remaining Capacity: 902 mAh&lt;br /&gt;
  Full Charge Capacity: 906 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 35&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/22, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 15686&lt;br /&gt;
  Pack Stat Configuration: 0x6490&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Wed Dec 18 16:47:41 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4048 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 27 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 68 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Absolute State of charge: 68 %&lt;br /&gt;
  Remaining Capacity: 821 mAh&lt;br /&gt;
  Full Charge Capacity: 841 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 31&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/23, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 18704&lt;br /&gt;
  Pack Stat Configuration: 0x64b0&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Mon Dec 23 05:29:33 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now this gives us quite a bit of data.&lt;br /&gt;
&lt;br /&gt;
The battery&#039;s principal job is to protect the data in the data stored in the [[RAM]] module used to buffer writes (and a certain amount of reads) that have not yet been flushed to the physical disks. This is critical because, if this data was lost, the contents of the disk could be corrupted. &lt;br /&gt;
&lt;br /&gt;
This battery is generally used when the node loses power. Depending on whether your node has battery-backed write-cache (BBU) or flash-backed write-cache (FBWC), the battery will be used to store the data in the RAM until power is restored (BBU) or just long enough to copy the data in the cache module to persistent solid-state storage build into the battery or RAID controller.&lt;br /&gt;
&lt;br /&gt;
If your server uses a BBU, then watching the &amp;quot;hold up time&amp;quot;. The controller above doesn&#039;t provide this because it is a flash-backed controller. If yours in a battery-backed controller, you will see a variable like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Battery backup charge time : 48 hours +&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells you that the node can protect the contents of the cache for greater than 48 hours. This means that, so long as power is restored to the server within two days, your data will be protected. Generally, if the hold up time falls below 24 hours, the BBU should be replaced. This happens because, as batteries age, they lose capacity. This is simple chemistry.&lt;br /&gt;
&lt;br /&gt;
Note that periodically, usually once per month, the controller intentionally drains and recharges the controller. This is called a &amp;quot;relearn cycle&amp;quot; (or simply a &amp;quot;learn cycle&amp;quot;). This is a way for the controller to verify the health of the battery. Should a battery fail to recharge, it will be declared dead and need to be replaced.&lt;br /&gt;
&lt;br /&gt;
Note that it is normal for the cache policy to switch from &amp;quot;write-back&amp;quot; to &amp;quot;write-through&amp;quot; once the battery is sufficiently drained. The controller should return to &amp;quot;write-back&amp;quot; mode once the learn cycle completes and the battery charges enough. During this time, the write speed will be reduced because all writes have to read the physical disks instead of just cache, which is slower.&lt;br /&gt;
&lt;br /&gt;
Lastly, lets look at the individual drives.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 7&lt;br /&gt;
WWN: 5000C50043EE29E0&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043ee29e1&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3T7X6    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 6&lt;br /&gt;
WWN: 5000C5004310F4B4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004310f4b5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CMMC    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :42C (107.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000C500430189E4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c500430189e5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CD2Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 11&lt;br /&gt;
WWN: 5000CCA00FAEC0BF&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00faec0bd&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVY33ARM            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 10&lt;br /&gt;
WWN: 5000C50043112280&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043112281&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DE9Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 9&lt;br /&gt;
WWN: 5000C5004312760C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004312760d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DNG7    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :40C (104.00 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 8&lt;br /&gt;
WWN: 5000C50043126B4C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043126b4d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3E01G    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000CCA00F5CA29F&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00f5ca29d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVWMYA6L            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows us two bits of information about each hard drive in the array. The main pieces to watch are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is normal for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Other Error Count&amp;lt;/span&amp;gt; to increment by 1 periodically. If it jumps by more than 1, or if it jumps multiple times within a few days, consult your system provider and inquire about replacing the drive.}}&lt;br /&gt;
&lt;br /&gt;
These values show us the overall health of the drive. For most hard drives, the temperature should stay below 55C at all times. Any temperature over 45C should be investigated. All other failure counts should stay at 0, save for the exception mentioned in the note above.&lt;br /&gt;
&lt;br /&gt;
As mentioned, there are many, many other ways to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;. If a drive ever fails, you can use it to prepare the drive for removal while the system is running. You can use it to adjust when the learn cycle runs, adjust cache policy and do many other things. It is well worth learning in more depth. However, that is outside the scope of this section.&lt;br /&gt;
&lt;br /&gt;
==== Managing MegaSAS.log ====&lt;br /&gt;
&lt;br /&gt;
Each time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; runs, it writes to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/MegaSAS.log&amp;lt;/span&amp;gt; file. Later, we&#039;re going to setup a monitoring and alert system that checks the health of each node every 30 seconds. This program calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; three times per pass, so the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file can grow to a decent size.&lt;br /&gt;
&lt;br /&gt;
To prevent this log file from getting too big, AN!CDB ships with a tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://github.com/digimer/an-cdb/blob/master/tools/archive_an-cm.log.sh archive_an-cm.log.sh]&amp;lt;/span&amp;gt;. This is a very simple bash script that is designed to run once per month to archive and compress the log file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:42:19--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:42:19 (7.86 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:42 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:47:53--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:47:54 (58.9 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:47 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll add it to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table. We&#039;ll set it to run at midnight on the first of each month.&lt;br /&gt;
&lt;br /&gt;
On both nodes;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirm the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
= Configuring The Cluster Foundation =&lt;br /&gt;
&lt;br /&gt;
We need to configure the cluster in two stages. This is because we have something of a chicken-and-egg problem:&lt;br /&gt;
&lt;br /&gt;
* We need clustered storage for our virtual machines.&lt;br /&gt;
* Our clustered storage needs the cluster for fencing.&lt;br /&gt;
&lt;br /&gt;
Conveniently, clustering has two logical parts:&lt;br /&gt;
&lt;br /&gt;
* Cluster communication and membership.&lt;br /&gt;
* Cluster resource management.&lt;br /&gt;
&lt;br /&gt;
The first, communication and membership, covers which nodes are part of the cluster and it is responsible for ejecting faulty nodes from the cluster, among other tasks. This is managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. The second part, resource management, is provided by a second tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It&#039;s this second part that we will set aside for later. In short though, it makes sure clustered services, storage and the virtual servers, are always running whenever possible.&lt;br /&gt;
&lt;br /&gt;
== Keeping Time in Sync ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is &#039;&#039;&#039;only relevant&#039;&#039;&#039; to networks that block access to external time sources, called &amp;quot;NTP servers&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
It is very important that time on both nodes be kept in sync. The way to do this is to setup [[[NTP]], the network time protocol. &lt;br /&gt;
&lt;br /&gt;
Earlier on, we setup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; to start on boot. For most people, that is enough and you can skip to the next section.&lt;br /&gt;
&lt;br /&gt;
However, some particularly restrictive networks will block access to external time servers. If you&#039;re on one of these networks, ask your admin (if you don&#039;t know already) what name or IP to use as a time source. Once you have this, you can enter the following command to add it to the name server configuration. We&#039;ll use the example time source &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntp.example.ca&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, add the time server to the NTP configuration file by appending the following lines to the end of it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon and your nodes should shortly update their times.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;date&amp;lt;/span&amp;gt; command on both nodes to ensure the times match. If they don&#039;t, give it a few minutes. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon sync every few minutes.&lt;br /&gt;
&lt;br /&gt;
== Alternate Configuration Methods ==&lt;br /&gt;
&lt;br /&gt;
In [[Red Hat]] Cluster Services, the heart of the cluster is found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|/etc/cluster/cluster.conf]]&amp;lt;/span&amp;gt; [[XML]] configuration file.&lt;br /&gt;
&lt;br /&gt;
There are three main ways of editing this file. Two are already well documented, so I won&#039;t bother discussing them, beyond introducing them. The third way is by directly hand-crafting the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. We&#039;ve found that directly editing configuration files is the best way to learn clustering at a deep level. For this reason, it is the method we&#039;ll use here.&lt;br /&gt;
&lt;br /&gt;
The two graphical tools are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-scc-CA.html system-config-cluster]&amp;lt;/span&amp;gt;, older GUI tool run directly from one of the cluster nodes.&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-conga-CA.html Conga], comprised of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; node-side client and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;luci&amp;lt;/span&amp;gt; web-based server (can be run on machines outside the cluster).&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve gotten comfortable with HA clustering, you may want to go back and play with these tools. They can certainly be time-savers.&lt;br /&gt;
&lt;br /&gt;
== The First cluster.conf Foundation Configuration ==&lt;br /&gt;
&lt;br /&gt;
The very first stage of building the cluster is to create a configuration file that is as minimal as possible. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and, when we&#039;re done, copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Name the Cluster and Set the Configuration Version ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cluster.3B_The_Parent_Tag|cluster]]&amp;lt;/span&amp;gt; tag is the parent tag for the entire cluster configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/cluster/cluster.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster&amp;lt;/span&amp;gt; element has two attributes that we need to set:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;config_version=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#name|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute defines the name of the cluster. It must be unique amongst the clusters on your network. It should be descriptive, but you will not want to make it too long, either. You will see this name in the various cluster tools and you will enter in, for example, when creating a [[GFS2]] partition later on. This tutorial uses the cluster name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#config_version|config_version]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute is an integer indicating the version of the configuration file. Whenever you make a change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, you will need to increment. If you don&#039;t increment this number, then the cluster tools will not know that the file needs to be reloaded. As this is the first version of this configuration file, it will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Note that this tutorial will increment the version after every change, regardless of whether it is explicitly pushed out to the other nodes and reloaded. The reason is to help get into the habit of always increasing this value.&lt;br /&gt;
&lt;br /&gt;
=== Configuring cman Options ===&lt;br /&gt;
&lt;br /&gt;
We are setting up a special kind of cluster, called a 2-Node cluster.&lt;br /&gt;
&lt;br /&gt;
This is a special case because traditional [[quorum]] will not be useful. With only two nodes, each having a vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the total votes is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. Quorum needs &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt;, which means that a single node failure would shut down the cluster, as the remaining node&#039;s vote is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; exactly. That kind of defeats the purpose to having a cluster at all.&lt;br /&gt;
&lt;br /&gt;
So to account for this special case, there is a special attribute called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt;. This tells the cluster manager to continue operating with only one vote. This option requires that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#expected_votes|expected_votes]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is set automatically to the total sum of the defined cluster nodes&#039; votes (which itself is a default of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;). This is the other half of the &amp;quot;trick&amp;quot;, as a single node&#039;s vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; now always provides quorum (that is, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; meets the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt; requirement).&lt;br /&gt;
&lt;br /&gt;
In short; this disables quorum.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the self-closing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;... /&amp;gt;&amp;lt;/span&amp;gt; tag. This is an [[XML]] syntax that tells the parser not to look for any child or a closing tags.&lt;br /&gt;
&lt;br /&gt;
=== Defining Cluster Nodes ===&lt;br /&gt;
&lt;br /&gt;
This example is a little artificial, please don&#039;t load it into your cluster as we will need to add a few child tags, but one thing at a time.&lt;br /&gt;
&lt;br /&gt;
This introduces two tags, the later a child tag of the former:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternodes&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first is the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternodes.3B_Defining_Cluster_Nodes|clusternodes]]&amp;lt;/span&amp;gt; tag, which takes no attributes of its own. Its sole purpose is to contain the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; child tags, of which there will be one per node. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; tag defines each cluster node. There are many attributes available, but we will look at just the two required ones. &lt;br /&gt;
&lt;br /&gt;
The first is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute. The value &#039;&#039;&#039;should&#039;&#039;&#039; match the fully qualified domain name, which you can check by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;uname -n&amp;lt;/span&amp;gt; on each node. This isn&#039;t strictly required, mind you, but for simplicity&#039;s sake, this is the name we will use.&lt;br /&gt;
&lt;br /&gt;
The cluster decides which network to use for cluster communication by resolving the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; value. It will take the returned [[IP]] address and try to match it to one of the IPs on the system. Once it finds a match, that becomes the network the cluster will use. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; resolves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt;, which is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syslinux&amp;lt;/span&amp;gt; with a little [[bash]] magic to verify which interface is going to be used for the cluster communication;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig |grep -B 1 $(gethostip -d $(uname -n)) | grep HWaddr | awk &#039;{ print $1 }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#name_3|name]]&amp;lt;/span&amp;gt; attribute document for details on how name to interface mapping is resolved.&lt;br /&gt;
&lt;br /&gt;
The second attribute is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_nodeid_attribute|nodeid]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;. This must be a unique integer amongst the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode ...&amp;gt;&amp;lt;/span&amp;gt; elements in the cluster. It is what the cluster itself uses to identify the node.&lt;br /&gt;
&lt;br /&gt;
=== Defining Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
[[2-Node_Red_Hat_KVM_Cluster_Tutorial#Concept.3B_Fencing|Fencing]] devices are used to forcible eject a node from a cluster if it stops responding. Said another way, fence devices put a node into a known state. &lt;br /&gt;
&lt;br /&gt;
There are many, many devices out there that can be used for fencing. We&#039;re going to be using two specific devices:&lt;br /&gt;
&lt;br /&gt;
* IPMI to press and hold the node&#039;s power button until the server powers down.&lt;br /&gt;
* Switched PDUs to cut the power feeding the node, if the IPMI device fails or can not be contacted.&lt;br /&gt;
&lt;br /&gt;
In the end, any device that can power off or isolate a lost node will do fine for fencing. The setup we will be using here uses very common components and it provides full redundancy, ensuring the ability to fence regardless of what might fail.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, our nodes support [[IPMI]], which we will use as the primary fence device. We also have an [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP7900 APC] brand switched PDU which will act as a backup fence device.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Not all brands of switched PDUs are supported as fence devices. Before you purchase a fence device, confirm that it is supported.}}&lt;br /&gt;
&lt;br /&gt;
All fence devices are contained within the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevices.3B_Defining_Fence_Devices|fencedevices]]&amp;lt;/span&amp;gt; tag, which has no attributes of its own. Within this parent tag are one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; child tags.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In our cluster, each fence device used will have its own &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; tag. If you are using [[IPMI]], this means you will have a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; entry for each node, as each physical IPMI [[BMC]] is a unique fence device. &lt;br /&gt;
&lt;br /&gt;
Our nodes have two power supplies each. Each power supply is plugged into a different switched PDU, which in turn in plugged into a dedicated UPS. So we have two physical PDUs, requiring two more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;fencedevice... /&amp;gt;&amp;lt;/span&amp;gt; entries.&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; tags share two basic attributes; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_agent_attribute|agent]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; attribute must be unique among all the fence devices in your cluster. As we will see in the next step, this name will be used within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode...&amp;gt;&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; tag tells the cluster which [[fence agent]] to use when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[fenced]]&amp;lt;/span&amp;gt; daemon needs to communicate with the physical fence device. A fence agent is simple a shell script that acts as a go-between layer between the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon and the fence hardware. This agent takes the arguments from the daemon, like what port to act on and what action to take, and performs the requested action against the target node. The agent is responsible for ensuring that the execution succeeded and returning an appropriate success or failure exit code. &lt;br /&gt;
&lt;br /&gt;
For those curious, the full details are described in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://fedorahosted.org/cluster/wiki/FenceAgentAPI FenceAgentAPI]&amp;lt;/span&amp;gt;. If you have two or more of the same fence device, like IPMI, then you will use the same fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; value a corresponding number of times.&lt;br /&gt;
&lt;br /&gt;
Beyond these two attributes, each fence agent will have its own subset of attributes. The scope of which is outside this tutorial, though we will see examples for IPMI and a switched PDU. All fence agents have a corresponding man page that will show you what attributes it accepts and how they are used. The two fence agents we will see here have their attributes defines in the following &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[man]]&amp;lt;/span&amp;gt; pages:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_ipmilan&amp;lt;/span&amp;gt; - IPMI fence agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_apc_snmp&amp;lt;/span&amp;gt; - APC-brand switched PDU using [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
The example above is what this tutorial will use.&lt;br /&gt;
&lt;br /&gt;
=== Using the Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
Now we have nodes and fence devices defined, we will go back and tie them together. This is done by:&lt;br /&gt;
&lt;br /&gt;
* Defining a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag containing all fence methods and devices.&lt;br /&gt;
** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; tag(s) containing the device call(s) needed for each fence attempt.&lt;br /&gt;
*** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tag(s) containing attributes describing how to call the fence device to kill this node.&lt;br /&gt;
&lt;br /&gt;
Here is how we implement [[IPMI]] as the primary fence device with the dual APC switched PDUs as the backup method.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First, notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag has no attributes. It&#039;s merely a parent for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]](s)&amp;lt;/span&amp;gt; child elements.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This next few paragraphs are very important! Please read it carefully!}}&lt;br /&gt;
&lt;br /&gt;
The second thing you will notice is that one method, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; method has a device with an extra argument. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; is needed because this is a 2-node cluster so quorum is not available. What this means is that, if the network breaks and both nodes are alive, both nodes will try to fence the other at nearly the same time. IPMI devices, being unique per node, can conceivable mean both nodes initiate a power down before either dies. This condition is called a &amp;quot;dual-fence&amp;quot; and leaves your cluster entirely powered down.&lt;br /&gt;
&lt;br /&gt;
There are two ways of dealing with this. The first is to make sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is turned off. When the power button is pressed when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is running, the system will begin a graceful shutdown. The IPMI BMC will continue to hold down the power button and after four seconds, the node should power off. However, this is four seconds where the fence daemon can initiate a fence against the peer. By disabling the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; daemon, the system will nearly instantly power off when the power button is pressed, drastically reducing the time between a node&#039;s power button being pressed and when the node actually shuts off.&lt;br /&gt;
&lt;br /&gt;
The second way to deal with this is to give one of the nodes a head start. That is what the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; does. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; goes to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05b02&amp;lt;/span&amp;gt;, it will not see a delay and it will initiate the fence action immediately. Meanwhile, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will gather up the information on fencing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, see the 15 second delay and wait. After 15 seconds, it will proceed with the fence action as it normally would.&lt;br /&gt;
&lt;br /&gt;
The idea here is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will have a 15 second head start in fencing its peer. These configuration changes should help ensure that one node always survives a fence call.&lt;br /&gt;
&lt;br /&gt;
Back to the main fence config!&lt;br /&gt;
&lt;br /&gt;
There are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; elements per node, one for each fence device, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. These names are merely descriptive and can be whatever you feel is most appropriate. &lt;br /&gt;
&lt;br /&gt;
Within each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; element is one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tags. For a given method to succeed, all defined &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; elements must themselves succeed. This is very useful for grouping calls to separate PDUs when dealing with nodes having redundant power supplies, as we have here.&lt;br /&gt;
&lt;br /&gt;
The actual fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; configuration is the final piece of the puzzle. It is here that you specify per-node configuration options and link these attributes to a given &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt;. Here, we see the link to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#device.27s_name_attribute|name]]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n01&amp;lt;/span&amp;gt; in this example.&lt;br /&gt;
&lt;br /&gt;
Note that the PDU definitions needs a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute where the IPMI fence devices do not. These are the sorts of differences you will find, varying depending on how the fence device agent works. IPMI devices only work on their host, so when you ask an IPMI device to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;&amp;quot;, it&#039;s obvious what the target is. With devices like PDUs, SAN switches and other multi-port devices, this is not the case. Our PDUs have eight ports each, so we need to tell the fence agent which ports we want acted on. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s power supplies are plugged into port #1 on both PDUs. For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, they&#039;re plugged into each PDU&#039;s port #2.&lt;br /&gt;
&lt;br /&gt;
When a fence call is needed, the fence devices will be called in the order they are found here. If both devices fail, the cluster will go back to the start and try again, looping indefinitely until one device succeeds.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s important to understand why we use IPMI as the primary fence device. The FenceAgentAPI specification suggests, but does not require, that a fence device confirm that the node is off. IPMI can do this, the switched PDU can not. Thus, IPMI won&#039;t return a success unless the node is truly off. The PDU, however, will return a success once the power is cut to the requested port. The risk is that a misconfigured node with redundant PSUs may in fact still be running if one of their cords was moved to a different port and the configuration wasn&#039;t updated, leading to disastrous consequences.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s step through an example fence call to help show how the per-cluster and fence device attributes are combined during a fence call:&lt;br /&gt;
&lt;br /&gt;
* The cluster manager decides that a node needs to be fenced. Let&#039;s say that the victim is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The first &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; section under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is consulted. Within it there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; entries, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. The IPMI method&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has one attribute while the PDU&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has two attributes;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;; only found in the PDU &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt;, this tells the cluster that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is connected to switched PDU&#039;s outlet number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;action&amp;lt;/span&amp;gt;; Found on both devices, this tells the cluster that the fence action to take is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;. How this action is actually interpreted depends on the fence device in use, though the name certainly implies that the node will be forced off and then restarted.&lt;br /&gt;
* The cluster searches in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevices&amp;lt;/span&amp;gt; for a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; matching the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n02&amp;lt;/span&amp;gt;. This fence device has four attributes; &lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt;; This tells the cluster to call the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent script, as we discussed earlier.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipaddr&amp;lt;/span&amp;gt;; This tells the fence agent where on the network to find this particular IPMI BMC. This is how multiple fence devices of the same type can be used in the cluster.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt;; This is the login user name to use when authenticating against the fence device.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passwd&amp;lt;/span&amp;gt;; This is the password to supply along with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt; name when authenticating against the fence device.&lt;br /&gt;
* Should the IPMI fence call fail for some reason, the cluster will move on to the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt; method, repeating the steps above but using the PDU values.&lt;br /&gt;
&lt;br /&gt;
When the cluster calls the fence agent, it does so by initially calling the fence agent script with no arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_ipmilan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-c05n02.ipmi&lt;br /&gt;
login=admin&lt;br /&gt;
passwd=secret&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see then, the first three arguments are from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; attributes and the last one is from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
If this method fails, then the PDU will be called in a very similar way, but with an extra argument from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_apc_snmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-p02.alteeve.ca&lt;br /&gt;
port=2&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should this fail, the cluster will go back and try the IPMI interface again. It will loop through the fence device methods forever until one of the methods succeeds.&lt;br /&gt;
Below are snippets from other clusters using different fence device configurations which might help you build your cluster.&lt;br /&gt;
&lt;br /&gt;
=== Giving Nodes More Time to Start and Avoiding &amp;quot;Fence Loops&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section also explains why we don&#039;t allow &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to start on boot. If we did, we&#039;d risk a &amp;quot;fence loop&amp;quot;, where a fenced node boots, tries to contact its peer, times out and fences it. The peer boot, starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, times out waiting and fenced the other peer. Not good.}}&lt;br /&gt;
&lt;br /&gt;
Clusters with more than three nodes will have to gain quorum before they can fence other nodes. As we discussed earlier though, this is not the case when using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cman.3B_The_Cluster_Manager|cman]]&amp;lt;/span&amp;gt; element. What this means in practice is that if you start the cluster on one node and then wait too long to start the cluster on the second node, the first will fence the second.&lt;br /&gt;
&lt;br /&gt;
The logic behind this is; When the cluster starts, it will try to talk to its fellow node and then fail. With the special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;two_node=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute set, the cluster knows that it is allowed to start clustered services, but it has no way to say for sure what state the other node is in. It could well be online and hosting services for all it knows. So it has to proceed on the assumption that the other node is alive and using shared resources. Given that, and given that it can not talk to the other node, its only safe option is to fence the other node. Only then can it be confident that it is safe to start providing clustered services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The new tag is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fence_daemon.3B_Fencing|fence_daemon]]&amp;lt;/span&amp;gt;, seen near the bottom if the file above. The change is made using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#post_join_delay|post_join_delay]]=&amp;quot;30&amp;quot;&amp;lt;/span&amp;gt; attribute. By default, the cluster will declare the other node dead after just &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; seconds. The reason is that the larger this value, the slower the start-up of the cluster services will be. During testing and development though, I find this value to be far too short and frequently led to unnecessary fencing. Once your cluster is setup and working, it&#039;s not a bad idea to reduce this value to the lowest value with which you are comfortable.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Totem ===&lt;br /&gt;
&lt;br /&gt;
There are many attributes for the [[totem]] element. For now though, we&#039;re only going to set two of them. We know that cluster communication will be travelling over our private, secured [[BCN]] network, so for the sake of simplicity, we&#039;re going to disable encryption. We are also offering network redundancy using the bonding drivers, so we&#039;re also going to disable totem&#039;s [[redundant ring protocol]].&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Corosync uses a concept called &amp;quot;token rings&amp;quot; for cluster communication. This is not to be confused with the old token ring network protocol, but the basic concept is the same. A token is passed from node to node, around and around the ring. A node can&#039;t send new messages or acknowledge old messages except when it has the token. By default, corosync uses a single &amp;quot;ring&amp;quot;. This means that, without network-level fault-tolerance, this ring becomes a single point of failure.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got bonded network connections backing our cluster communications, so we inherently have fault-tolerance built in to our network.&lt;br /&gt;
&lt;br /&gt;
For some though, bonded interfaces is not feasible, so starting in RHEL 6.3, &amp;quot;[[RRP|Redundant Ring Protocol]]&amp;quot; was made available as a supported option. This allows you to setup a second network to use as a backup in case the primary ring fails. We don&#039;t need this, so we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp_mode=&amp;quot;none&amp;quot;&amp;lt;/span&amp;gt;. If you want to use it, you can now though, but it&#039;s outside the scope of this tutorial. &lt;br /&gt;
&lt;br /&gt;
If you wish to explore it further, please take a look at the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt; element tag called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;[[RHCS_v3_cluster.conf#Tag.3B_altname|altname]]...&amp;gt;&amp;lt;/span&amp;gt;. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;altname&amp;lt;/span&amp;gt; is used though, then the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#rrp_mode|rrp_mode]]&amp;lt;/span&amp;gt; attribute will need to be changed to either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passive&amp;lt;/span&amp;gt; (the details of which are outside the scope of this tutorial).&lt;br /&gt;
&lt;br /&gt;
The second option we&#039;re looking at here is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#secauth|secauth]]=&amp;quot;off&amp;quot;&amp;lt;/span&amp;gt; attribute. This controls whether the cluster communications are encrypted or not. We can safely disable this because we&#039;re working on a known-private network, which yields two benefits; It&#039;s simpler to setup and it&#039;s a lot faster. If you must encrypt the cluster communications, then you can do so here. The details of which are also outside the scope of this tutorial though.&lt;br /&gt;
&lt;br /&gt;
=== Validating and Pushing the /etc/cluster/cluster.conf File ===&lt;br /&gt;
&lt;br /&gt;
One of the most noticeable changes in [[RHCS]] cluster stable 3 is that we no longer have to make a long, cryptic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xmllint&amp;lt;/span&amp;gt; call to validate our cluster configuration. Now we can simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ccs_config_validate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If there was a problem, you need to go back and fix it. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; proceed until your configuration validates. Once it does, we&#039;re ready to move on!&lt;br /&gt;
&lt;br /&gt;
With it validated, we need to push it to the other node. As the cluster is not running yet, we will push it out using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/cluster/cluster.conf root@an-c05n02:/etc/cluster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
cluster.conf&lt;br /&gt;
&lt;br /&gt;
sent 1393 bytes  received 43 bytes  2872.00 bytes/sec&lt;br /&gt;
total size is 1313  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the first and only time that we&#039;ll need to push the configuration file over manually.&lt;br /&gt;
&lt;br /&gt;
=== Setting up ricci ===&lt;br /&gt;
&lt;br /&gt;
Once the cluster is running, we can take advantage of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;modclusterd&amp;lt;/span&amp;gt; daemons to push all future updates out automatically. This is why we enabled these two daemons to start on boot earlier on.&lt;br /&gt;
&lt;br /&gt;
This requires setting a password for each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user first. Setting the password is exactly the same as setting the password on any other system user.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Later, when we make the next change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, we&#039;ll push the changes out using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; program. The first time this is used on each node, you will need to enter the local and the peer&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password. Once entered though, we&#039;ll not need to enter the password again.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The [[AN!CDB|dashboard]] we will install later expects the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password to be the same on both nodes. If you plan to use the dashboard, be sure to set the same password and then make note of it for later!}}&lt;br /&gt;
&lt;br /&gt;
=== Starting the Cluster for the First Time ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to open a second terminal on either node and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; [[syslog]] file. All cluster messages will be recorded here and it will help to debug problems if you can watch the logs. To do this, in the new terminal windows run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will clear the screen and start watching for new lines to be written to syslog. When you are done watching syslog, press the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; key combination.&lt;br /&gt;
&lt;br /&gt;
How you lay out your terminal windows is, obviously, up to your own preferences. Below is a configuration I have found very useful.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node-rhcs3_terminal-window-layout_01.png|thumb|center|700px|Terminal window layout for watching 2 nodes. Left windows are used for entering commands and the left windows are used for tailing syslog.]]&lt;br /&gt;
&lt;br /&gt;
With the terminals setup, lets start the cluster!&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you don&#039;t start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; on both nodes within 30 seconds, the slower node will be fenced.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is what you should see in syslog (this taken from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 kernel: DLM (built Sep 14 2013 05:33:35) installed&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync Cluster Engine (&#039;1.4.1&#039;): started and ready to provide service.&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync built-in features: nss dbus rdma snmp&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully read config from /etc/cluster/cluster.conf&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully parsed cman config&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transport (UDP/IP Multicast).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] The network interface [10.20.50.1] is now up.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] CMAN 3.0.12.1 (built Aug 29 2013 07:27:01) started&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync CMAN membership service 2.90&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: openais checkpoint service B.01.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync extended virtual synchrony service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync configuration service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster closed process group service v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster config database access v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync profile loading service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Compatibility mode set to whitetank.  Using V1 and V2 of the synchronization engine.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] quorum regained, resuming activity&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] This node is within the primary component and will provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:0 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:1 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 fenced[2902]: fenced 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 dlm_controld[2927]: dlm_controld 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:13 an-c05n01 gfs_controld[2977]: gfs_controld 3.0.12.1 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to confirm that the cluster is operating properly, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Version: 6.2.0&lt;br /&gt;
Config Version: 7&lt;br /&gt;
Cluster Name: an-cluster-05&lt;br /&gt;
Cluster Id: 42881&lt;br /&gt;
Cluster Member: Yes&lt;br /&gt;
Cluster Generation: 20&lt;br /&gt;
Membership state: Cluster-Member&lt;br /&gt;
Nodes: 2&lt;br /&gt;
Expected votes: 1&lt;br /&gt;
Total votes: 2&lt;br /&gt;
Node votes: 1&lt;br /&gt;
Quorum: 1  &lt;br /&gt;
Active subsystems: 7&lt;br /&gt;
Flags: 2node &lt;br /&gt;
Ports Bound: 0  &lt;br /&gt;
Node name: an-c05n01.alteeve.ca&lt;br /&gt;
Node ID: 1&lt;br /&gt;
Multicast addresses: 239.192.167.41 &lt;br /&gt;
Node addresses: 10.20.50.1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the both nodes are talking because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you have a managed switch that needs persistent multicast groups set, log into your switches now. We can see above that this cluster is using the multicast group &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;239.192.167.41&amp;lt;/span&amp;gt;, so find it in your switch config and ensure it&#039;s persistent.}}&lt;br /&gt;
&lt;br /&gt;
If you ever want to see the nitty-gritty configuration, you can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync-objctl&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
corosync-objctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cluster.name=an-cluster-05&lt;br /&gt;
cluster.config_version=7&lt;br /&gt;
cluster.cman.expected_votes=1&lt;br /&gt;
cluster.cman.two_node=1&lt;br /&gt;
cluster.cman.nodename=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.cman.cluster_id=42881&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n01&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.delay=15&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n02.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n02&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n01&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n01.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n02&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n02.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p01.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu1&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p02.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu2&lt;br /&gt;
cluster.fence_daemon.post_join_delay=30&lt;br /&gt;
cluster.totem.rrp_mode=none&lt;br /&gt;
cluster.totem.secauth=off&lt;br /&gt;
totem.rrp_mode=none&lt;br /&gt;
totem.secauth=off&lt;br /&gt;
totem.transport=udp&lt;br /&gt;
totem.version=2&lt;br /&gt;
totem.nodeid=1&lt;br /&gt;
totem.vsftype=none&lt;br /&gt;
totem.token=10000&lt;br /&gt;
totem.join=60&lt;br /&gt;
totem.fail_recv_const=2500&lt;br /&gt;
totem.consensus=2000&lt;br /&gt;
totem.key=an-cluster-05&lt;br /&gt;
totem.interface.ringnumber=0&lt;br /&gt;
totem.interface.bindnetaddr=10.20.50.1&lt;br /&gt;
totem.interface.mcastaddr=239.192.167.41&lt;br /&gt;
totem.interface.mcastport=5405&lt;br /&gt;
libccs.next_handle=7&lt;br /&gt;
libccs.connection.ccs_handle=3&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=4&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=5&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
logging.timestamp=on&lt;br /&gt;
logging.to_logfile=yes&lt;br /&gt;
logging.logfile=/var/log/cluster/corosync.log&lt;br /&gt;
logging.logfile_priority=info&lt;br /&gt;
logging.to_syslog=yes&lt;br /&gt;
logging.syslog_facility=local4&lt;br /&gt;
logging.syslog_priority=info&lt;br /&gt;
aisexec.user=ais&lt;br /&gt;
aisexec.group=ais&lt;br /&gt;
service.name=corosync_quorum&lt;br /&gt;
service.ver=0&lt;br /&gt;
service.name=corosync_cman&lt;br /&gt;
service.ver=0&lt;br /&gt;
quorum.provider=quorum_cman&lt;br /&gt;
service.name=openais_ckpt&lt;br /&gt;
service.ver=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.services.cman.service_id=9&lt;br /&gt;
runtime.services.ckpt.service_id=3&lt;br /&gt;
runtime.services.ckpt.0.tx=0&lt;br /&gt;
runtime.services.ckpt.0.rx=0&lt;br /&gt;
runtime.services.ckpt.1.tx=0&lt;br /&gt;
runtime.services.ckpt.1.rx=0&lt;br /&gt;
runtime.services.ckpt.2.tx=0&lt;br /&gt;
runtime.services.ckpt.2.rx=0&lt;br /&gt;
runtime.services.ckpt.3.tx=0&lt;br /&gt;
runtime.services.ckpt.3.rx=0&lt;br /&gt;
runtime.services.ckpt.4.tx=0&lt;br /&gt;
runtime.services.ckpt.4.rx=0&lt;br /&gt;
runtime.services.ckpt.5.tx=0&lt;br /&gt;
runtime.services.ckpt.5.rx=0&lt;br /&gt;
runtime.services.ckpt.6.tx=0&lt;br /&gt;
runtime.services.ckpt.6.rx=0&lt;br /&gt;
runtime.services.ckpt.7.tx=0&lt;br /&gt;
runtime.services.ckpt.7.rx=0&lt;br /&gt;
runtime.services.ckpt.8.tx=0&lt;br /&gt;
runtime.services.ckpt.8.rx=0&lt;br /&gt;
runtime.services.ckpt.9.tx=0&lt;br /&gt;
runtime.services.ckpt.9.rx=0&lt;br /&gt;
runtime.services.ckpt.10.tx=0&lt;br /&gt;
runtime.services.ckpt.10.rx=0&lt;br /&gt;
runtime.services.ckpt.11.tx=2&lt;br /&gt;
runtime.services.ckpt.11.rx=3&lt;br /&gt;
runtime.services.ckpt.12.tx=0&lt;br /&gt;
runtime.services.ckpt.12.rx=0&lt;br /&gt;
runtime.services.ckpt.13.tx=0&lt;br /&gt;
runtime.services.ckpt.13.rx=0&lt;br /&gt;
runtime.services.evs.service_id=0&lt;br /&gt;
runtime.services.evs.0.tx=0&lt;br /&gt;
runtime.services.evs.0.rx=0&lt;br /&gt;
runtime.services.cfg.service_id=7&lt;br /&gt;
runtime.services.cfg.0.tx=0&lt;br /&gt;
runtime.services.cfg.0.rx=0&lt;br /&gt;
runtime.services.cfg.1.tx=0&lt;br /&gt;
runtime.services.cfg.1.rx=0&lt;br /&gt;
runtime.services.cfg.2.tx=0&lt;br /&gt;
runtime.services.cfg.2.rx=0&lt;br /&gt;
runtime.services.cfg.3.tx=0&lt;br /&gt;
runtime.services.cfg.3.rx=0&lt;br /&gt;
runtime.services.cpg.service_id=8&lt;br /&gt;
runtime.services.cpg.0.tx=4&lt;br /&gt;
runtime.services.cpg.0.rx=8&lt;br /&gt;
runtime.services.cpg.1.tx=0&lt;br /&gt;
runtime.services.cpg.1.rx=0&lt;br /&gt;
runtime.services.cpg.2.tx=0&lt;br /&gt;
runtime.services.cpg.2.rx=0&lt;br /&gt;
runtime.services.cpg.3.tx=16&lt;br /&gt;
runtime.services.cpg.3.rx=23&lt;br /&gt;
runtime.services.cpg.4.tx=0&lt;br /&gt;
runtime.services.cpg.4.rx=0&lt;br /&gt;
runtime.services.cpg.5.tx=2&lt;br /&gt;
runtime.services.cpg.5.rx=3&lt;br /&gt;
runtime.services.confdb.service_id=11&lt;br /&gt;
runtime.services.pload.service_id=13&lt;br /&gt;
runtime.services.pload.0.tx=0&lt;br /&gt;
runtime.services.pload.0.rx=0&lt;br /&gt;
runtime.services.pload.1.tx=0&lt;br /&gt;
runtime.services.pload.1.rx=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.connections.active=6&lt;br /&gt;
runtime.connections.closed=111&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.dispatched=9&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.service_id=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.responses=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.dispatched=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.requests=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.service_id=3&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.responses=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.dispatched=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.requests=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.overload=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.service_id=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.client_pid=2977&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.responses=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.dispatched=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.requests=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.sem_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.send_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.recv_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.queue_size=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.invalid_request=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.overload=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.dispatched=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.overload=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.service_id=11&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.client_pid=3083&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.responses=463&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.dispatched=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.requests=466&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.sem_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.send_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.recv_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.queue_size=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.invalid_request=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.overload=0&lt;br /&gt;
runtime.totem.pg.msg_reserved=1&lt;br /&gt;
runtime.totem.pg.msg_queue_avail=761&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_tx=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_rx=437&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_tx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_rx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_tx=3&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_rx=5&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_tx=46&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_retx=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_rx=57&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_rx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_rx=8&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.consensus_timeouts=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mtt_rx_token=835&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_token_workload=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_backlog_calc=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.rx_msg_dropped=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_gather=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_sendmsg_failures=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.firewall_enabled_or_nic_failure=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.ip=r(0) ip(10.20.50.1) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.status=joined&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.ip=r(0) ip(10.20.50.2) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.status=joined&lt;br /&gt;
runtime.blackbox.dump_flight_data=no&lt;br /&gt;
runtime.blackbox.dump_state=no&lt;br /&gt;
cman_private.COROSYNC_DEFAULT_CONFIG_IFACE=xmlconfig:cmanpreconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want to check what [[DLM]] lockspaces, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; to list lock spaces. Given that we&#039;re not running and resources or clustered filesystems though, there won&#039;t be any at this time. We&#039;ll look at this again later.&lt;br /&gt;
&lt;br /&gt;
== Testing Fencing ==&lt;br /&gt;
&lt;br /&gt;
We need to thoroughly test our fence configuration and devices before we proceed. Should the cluster call a fence, and if the fence call fails, the cluster will hang until the fence finally succeeds. This effectively hangs the cluster, by design. The rationale is that, as bad as a hung cluster might be, it&#039;s better than risking data corruption. &lt;br /&gt;
&lt;br /&gt;
So if we have problems, we need to find them now.&lt;br /&gt;
&lt;br /&gt;
We need to run two tests from each node against the other node for a total of four tests.&lt;br /&gt;
&lt;br /&gt;
# The first test will verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; is working. To do this, we will hang the victim node by sending &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to the kernel&#039;s &amp;quot;[https://en.wikipedia.org/wiki/Magic_SysRq_key magic SysRq]&amp;quot; key. We do this by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt; which immediately and completely hangs the kernel. This does not effect the IPMI BMC, so if we&#039;ve configured everything properly, the surviving node should be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; to reboot the crashed node.&lt;br /&gt;
# Secondly, we will pull the power on the target node. This removes all power from the node, causing the IPMI BMC to also fail. You should see the other node try to fence the target using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;, see it fail and then try again using the second method, the switched PDUs via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt;. If you watch and listen to the PDUs, you should see the power indicator LED light up and hear the mechanical relays close the circuit when the fence completes.&lt;br /&gt;
&lt;br /&gt;
For the second test, you could just physically unplug the cables from the PDUs. We&#039;re going to cheat though and use the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence handler to manually turn off the target ports. This will help show that the fence agents are really just shell scripts. Used on their own, they do not talk to the cluster in any way. So despite using them to cut the power, the cluster will not know what state the lost node is in, requiring a fence call still.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Test&lt;br /&gt;
!Victim&lt;br /&gt;
!Pass?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=After the target node powers back up after each test, be sure to restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
=== Using Fence_check to Verify our Fencing Config ===&lt;br /&gt;
&lt;br /&gt;
In RHEL 6.4, a new tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; was added to the cluster toolbox. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, we can call it and it will gather up the data from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; and then call each defined fence device with the action &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;&amp;quot;. If everything is configured properly, all fence devices should exit with a return code of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt;) or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
If any fence device&#039;s agent exits with any other code, something has gone wrong and we need to fix it before proceeding.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to run this tool from both node. So let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:56:07 EDT 2013 pid: 3236&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is very promising! Now lets run it again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We want to do this because, for example, if the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file on the second node was bad, a fence may work on the first node but not this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:57:27 EDT 2013 pid: 28127&lt;br /&gt;
Unable to perform fence_check: node is not fence master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Well then, that&#039;s not what we expected.&lt;br /&gt;
&lt;br /&gt;
Actually, it is. When a cluster starts, one of the nodes in the cluster will be chosen to be the node which performs actual fence calls. This node (the one with the lowest node ID) is the only one that, by default, can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page, we see that we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-f&amp;lt;/span&amp;gt; switch to override this behaviour, but there is an important note:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man fence_check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       -f     Override checks and force execution. DO NOT USE ON PRODUCTION CLUSTERS!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason for this is that, while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; is running, should a node fail, it will not be able to fence until the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; finishes. In production, this can cause recovery post-failure to take a bit longer than it otherwise would.&lt;br /&gt;
&lt;br /&gt;
Good thing we&#039;re testing now, before the cluster is in production!&lt;br /&gt;
&lt;br /&gt;
So lets try again, this time forcing the issue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 11:02:35 EDT 2013 pid: 28222&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 for the First Time ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step will totally crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;! If fencing fails for some reason, you may need physical access to the node to recover it.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 11:05:46 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 11:06:21 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! The IPMI-based fencing worked! &lt;br /&gt;
&lt;br /&gt;
But why did it take 33 seconds?&lt;br /&gt;
&lt;br /&gt;
The current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; version works this way for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt; actions;&lt;br /&gt;
&lt;br /&gt;
# Check status&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks status again until the status shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power on&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks the status again&lt;br /&gt;
&lt;br /&gt;
If you tried doing these steps directly, you would find that it takes roughly 18 seconds to run. Add this to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; we set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; when using the IPMI fence device and you have the 33 seconds we see here.&lt;br /&gt;
&lt;br /&gt;
If you are watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s display, you should now see it starting to boot back up.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
As was discussed earlier, IPMI and other out-of-band management interfaces have a fatal flaw as a fence device. Their [[BMC]] draws its power from the same power supply as the node itself. Thus, when the power supply itself fails (for example, if an internal wire shorted against the chassis), fencing via IPMI will fail as well. This makes the power supply a single point of failure, which is what the PDU protects us against.&lt;br /&gt;
&lt;br /&gt;
In case you&#039;re wondering how likely failing a redundant PSU is...&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[image:lisa_seely-cable_fail-2.jpeg|thumb|300px|Cable short 1]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-3.jpeg|thumb|300px|Cable short 2]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-4.jpeg|thumb|300px|Cable short 3]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|Thanks to my very talented fellow admin, [https://twitter.com/thedoh Lisa Seelye], for this object lesson.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So to simulate a failed power supply, we&#039;re going to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to turn off the power to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Given that the node has two power supplies, one plugged in to each PDU, we&#039;ll need to make two calls to cut the power. &lt;br /&gt;
&lt;br /&gt;
Alternatively, you could also just unplug the power cables from the PDUs and the fence would still succeed. Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; confirms that the requested ports have no power, the fence action succeeds. Whether the nodes restart after the fence is not at all a factor.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the following two chained calls;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
Back on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:31:49 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoozah!&lt;br /&gt;
&lt;br /&gt;
Notice that there is an error from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;? This is exactly what we expected because of the IPMI&#039;s BMC lost power and couldn&#039;t respond. You will also notice the large delay, despite there not being a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; set for the PDU fence devices for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This was from the initial delay when trying to fence using IPMI. This is why we don&#039;t need to specify &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; on the PDUs as well. &lt;br /&gt;
&lt;br /&gt;
So now we know that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; can be fenced successfully from both fence devices. Now we need to run the same tests against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
=== Hanging an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=&#039;&#039;&#039;DO NOT ASSUME THAT &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; WILL FENCE PROPERLY JUST BECAUSE &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; PASSED!&#039;&#039;&#039;. There are many ways that a fence could fail; Bad password, misconfigured device, plugged into the wrong port on the PDU and so on. Always test all nodes using all methods!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;ing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
{{note|1=This command will not return and you will lose all ability to talk to this node until it is rebooted.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:40:29 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:40:48 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect!&lt;br /&gt;
&lt;br /&gt;
Notice this time that the fence action took 17 seconds, much less that it took to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c01n01&amp;lt;/span&amp;gt;. This is because, as you probably guessed, there is no &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; went to fence it, it proceeded immediately. This tells us that if both nodes try to fence each other at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should be left the winner.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Last fence test! Time to yank the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and make sure its power fencing works.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; with the following call;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:44:41 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:44:47 an-c05n01 ntpd[2298]: synchronized to 66.96.30.35, stratum 2&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woot!&lt;br /&gt;
&lt;br /&gt;
Only now can we safely say that our fencing is setup and working properly.&lt;br /&gt;
&lt;br /&gt;
= Installing DRBD =&lt;br /&gt;
&lt;br /&gt;
DRBD is an open-source application for real-time, block-level disk replication created and maintained by [http://linbit.com Linbit]. We will use this to keep the data on our cluster consistent between the two nodes.&lt;br /&gt;
&lt;br /&gt;
To install it, we have three choices;&lt;br /&gt;
# Purchase a Red Hat blessed, fully supported copy from [http://linbit.com Linbit].&lt;br /&gt;
# Install from the freely available, community maintained [http://elrepo.org/tiki/tiki-index.php ELRepo] repository.&lt;br /&gt;
# Install from source files.&lt;br /&gt;
&lt;br /&gt;
We will be using the 8.3.x version of DRBD. This tracts the Red Hat and Linbit supported versions, providing the most tested combination and providing a painless path to move to a fully supported version, should you decide to do so down the road.&lt;br /&gt;
&lt;br /&gt;
== Option 1 - Fully Supported by Red Hat and Linbit ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This shows how to install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please do this again for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat decided to no longer directly support [[DRBD]] in [[EL6]] to narrow down what applications they shipped and focus on improving those components. Given the popularity of DRBD, however, Red Hat struck a deal with [[Linbit]], the authors and maintainers of DRBD. You have the option of purchasing a fully supported version of DRBD that is blessed by Red Hat for use under Red Hat Enterprise Linux 6.&lt;br /&gt;
&lt;br /&gt;
If you are building a fully supported cluster, please [http://www.linbit.com/en/products-services/drbd/drbd-for-high-availability/ contact Linbit] to purchase DRBD. Once done, you will get an email with you login information and, most importantly here, the [[URL]] hash needed to access the official repositories.&lt;br /&gt;
&lt;br /&gt;
First you will need to add an entry in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/yum.repo.d/&amp;lt;/span&amp;gt; for DRBD, but this needs to be hand-crafted as you must specify the URL hash given to you in the email as part of the repo configuration.&lt;br /&gt;
&lt;br /&gt;
* Log into the [https://my.linbit.com Linbit portal].&lt;br /&gt;
* Click on &#039;&#039;Account&#039;&#039;.&lt;br /&gt;
* Under &#039;&#039;Your account details&#039;&#039;, click on the hash string to the right of &#039;&#039;URL hash:&#039;&#039;.&lt;br /&gt;
* Click on &#039;&#039;RHEL 6&#039;&#039; (even if you are using CentOS or another [[EL6]] distro.&lt;br /&gt;
&lt;br /&gt;
This will take you to a new page called &#039;&#039;Instructions for using the DRBD package repository&#039;&#039;. The details installation instruction are found here.&lt;br /&gt;
&lt;br /&gt;
Lets use the imaginative URL hash of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;abcdefghijklmnopqrstuvwxyz0123456789ABCD&amp;lt;/span&amp;gt; and we&#039;re are in fact using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x86_64&amp;lt;/span&amp;gt; architecture. Given this, we would create the following repository configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/yum.repos.d/linbit.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[drbd-8]&lt;br /&gt;
name=DRBD 8&lt;br /&gt;
baseurl=http://packages.linbit.com/abcdefghijklmnopqrstuvwxyz0123456789ABCD/rhel6/x86_64&lt;br /&gt;
gpgcheck=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once this is saved, you can install DRBD using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yum&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd kmod-drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 2 - Install From ELRepo ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is the method used for this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
[http://elrepo.org ELRepo] is a community-maintained repository of packages for &#039;&#039;&#039;E&#039;&#039;&#039;nterprise &#039;&#039;&#039;L&#039;&#039;&#039;inux; Red Hat Enterprise Linux and its derivatives like CentOS. This is the easiest option for a freely available DRBD package.&lt;br /&gt;
&lt;br /&gt;
The main concern with this option is that you are seceding control of DRBD to a community-controlled project. This is a trusted repo, but there are still undeniable security concerns. &lt;br /&gt;
&lt;br /&gt;
Check for the latest installation RPM and information:&lt;br /&gt;
&lt;br /&gt;
* [http://elrepo.org ELRepo Installation Page]&lt;br /&gt;
&lt;br /&gt;
Install the ELRepo GPG key, add the repo and install DRBD.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can install the DRBD 8.3 RPMs. &lt;br /&gt;
&lt;br /&gt;
Be warned; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kmod-drbd83&amp;lt;/span&amp;gt; can take some time to install. Please be patient!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 3 - Install From Source ==&lt;br /&gt;
&lt;br /&gt;
If you do not wish to pay for access to the official DRBD repository and do not feel comfortable adding a public repository, your last option is to install from Linbit&#039;s source code. The benefit of this is that you can vet the source before installing it, making it a more secure option. The downside is that you will need to manually install updates and security fixes as they are made available.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Both&#039;&#039;&#039; nodes run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output, it&#039;s really quite impressive&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hooking DRBD into the Cluster&#039;s Fencing ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=In older DRBD 8.3 releases, prior to 8.3.16, we needed to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt; from [https://raw.github.com/digimer/rhcs_fence/master/rhcs_fence github] as the shipped version had a bug. With the release of 8.3.16, this is no longer the case.}}&lt;br /&gt;
&lt;br /&gt;
DRBD is, effectively, a stand-alone application. You can use it on its own without any other software. For this reason, DRBD has its own fencing mechanism to avoid split-brains if the DRBD nodes lose contact with each other. &lt;br /&gt;
&lt;br /&gt;
It would be a replication of effort to setup actual fencing devices in DRBD, so instead we will use a &amp;quot;hook&amp;quot; script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. When DRBD loses contact with its peer, it will block and then call this script. In turn, this script calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and asks it to fence the peer. It then waits for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to respond with a success or failure.&lt;br /&gt;
&lt;br /&gt;
If the fence succeed, DRBD will resume normal operation, confident that the peer is not doing the same.&lt;br /&gt;
&lt;br /&gt;
If the fence fails, DRBD will continue to block and continue to try and fence the peer indefinitely. Thus, if a fence call fails, DRBD will remain blocked and all disk reads and writes will hang. This is by design as it is better to hang than to risk a split-brain, which can lead to data loss and corruption.&lt;br /&gt;
&lt;br /&gt;
By using this script, if the fence configuration ever changes, you only need to update the configuration in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, not also in DRBD as well.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;quot;Why&amp;quot; of our Layout - More Safety! ===&lt;br /&gt;
&lt;br /&gt;
We will be creating two separate DRBD resources. The reason for this is to minimize the chance of data loss in a [[split-brain]] event. We&#039;ve got to fairly great lengths to insure that a split-brain never occurs, but it is still possible. So we want a &amp;quot;last line of defence&amp;quot;, just in case.&lt;br /&gt;
&lt;br /&gt;
Consider this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a two-node cluster running two VMs. One is a mirror for a project and the other is an accounting application. Node 1 hosts the mirror, Node 2 hosts the accounting application.&lt;br /&gt;
* A partition occurs and both nodes try to fence the other.&lt;br /&gt;
* Network access is lost, so both nodes fall back to fencing using PDUs.&lt;br /&gt;
* Both nodes have redundant power supplies, and at some point in time, the power cables on the second PDU got reversed.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; agent succeeds, because the requested outlets were shut off. However, do to the cabling mistake, neither node actually shut down.&lt;br /&gt;
* Both nodes proceed to run independently, thinking they are the only node left.&lt;br /&gt;
* During this split-brain, the mirror VM downloads over a [[gigabyte]] of updates. Meanwhile, an hour earlier, the accountant updates the books, totalling less than one [[megabyte]] of changes.&lt;br /&gt;
&lt;br /&gt;
At this point, you will need to discard the changed on one of the nodes. So now you have to choose:&lt;br /&gt;
&lt;br /&gt;
* Is the node with the most changes more valid?&lt;br /&gt;
* Is the node with the most recent changes more valid?&lt;br /&gt;
&lt;br /&gt;
Neither of these are true, as the node with the older data and smallest amount of changed data is the accounting data which is significantly more valuable.&lt;br /&gt;
&lt;br /&gt;
Now imagine that both VMs have equally valuable data. What then? Which side do you discard?&lt;br /&gt;
&lt;br /&gt;
The approach we will use is to create two separate DRBD resources. Then we will assign our servers into two groups;&lt;br /&gt;
&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;quot;pools&amp;quot; of servers will have a dedicate DRBD resource behind it. These pools will be managed by clustered LVM, as that provides a very powerful ability to manage DRBD&#039;s raw space.&lt;br /&gt;
&lt;br /&gt;
Now imagine the above scenario, except this time imagine that the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; are on one DRBD resource and the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; are on a different resource. Now we can recover from the split brain safely! &lt;br /&gt;
&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This ability to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;invalidate&amp;lt;/span&amp;gt; on both direction allows us to recover without risking data loss, &#039;&#039;provided&#039;&#039; all the servers were actually running on the same node at the time of the split-brain event.&lt;br /&gt;
&lt;br /&gt;
To summarize, we&#039;re going to create the following three resources:&lt;br /&gt;
&lt;br /&gt;
* We&#039;ll create a resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* We&#039;ll create a second resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating The Partitions For DRBD ==&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[LVM]] on the hosts, and simply create [[LV]]s to back our DRBD resources. However, this causes confusion as LVM will see the [[PV]] signatures on both the DRBD backing devices and the DRBD device itself. Getting around this requires editing LVM&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter&amp;lt;/span&amp;gt; option, which is somewhat complicated and is outside the scope of this tutorial. We&#039;re going to use raw partitions and we recommend you do the same.&lt;br /&gt;
&lt;br /&gt;
On our nodes, we created three primary disk partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda1&amp;lt;/span&amp;gt;; The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/boot&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda2&amp;lt;/span&amp;gt;; The swap partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda3&amp;lt;/span&amp;gt;; The root &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
&lt;br /&gt;
We will create a new extended partition. Then within it we will create two new partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; clustered file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Block Alignment ===&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; instead of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;, we would have to manually ensure that our partitions fell on 64 [[KiB]] boundaries. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt;, we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-a opt&amp;lt;/span&amp;gt; to tell it to use optimal alignment, saving us a lot of work. This is important for decent performance performance in our servers. This is true for both traditional platter and modern solid-state drives.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, we want to ensure that the file systems created within a VM matches the block alignment of the underlying storage stack, clear down to the base partitions on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda&amp;lt;/span&amp;gt; (or what ever your lowest-level block device is).&lt;br /&gt;
&lt;br /&gt;
For those who are curious though, this is why falling on 64 KiB boundaries are important.&lt;br /&gt;
&lt;br /&gt;
Imagine this misaligned scenario;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
                |~~~~~|==========================================================&lt;br /&gt;
DRBD Partition  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, when the guest wants to write one block worth of data, it actually causes two blocks to be written, causing avoidable disk I/O. That effectively doubles the number of [[IOPS]] needed, a huge waste of disk resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
                |~~~~~~~|========================================================&lt;br /&gt;
DRBD Partition  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By changing the start cylinder of our partitions to always start on 64 [[KiB]] boundaries, we&#039;re sure to keep the guest OS&#039;s file system in-line with the DRBD backing device&#039;s blocks. Thus, all reads and writes in the guest OS effect a matching number of real blocks, maximizing disk I/O efficiency.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You will want to do this with [[SSD]] drives, too. It&#039;s true that the performance will remain about the same, but SSD drives have a limited number of write cycles, and aligning the blocks will minimize block writes.}}&lt;br /&gt;
&lt;br /&gt;
Special thanks to [http://xen.org/community/spotlight/pasi.html Pasi Kärkkäinen] for his patience in explaining to me the importance of disk alignment. He created two images which I used as templates for the [[ASCII]] art images above:&lt;br /&gt;
&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-not-aligned.jpg Virtual Disk Partitions, Not aligned.]&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-aligned.jpg Virtual Disk Partitions, aligned.]&lt;br /&gt;
&lt;br /&gt;
=== Determining Storage Pool Sizes ===&lt;br /&gt;
&lt;br /&gt;
Before we can create the DRBD partitions, we first need to know how much space we want to allocate to each node&#039;s storage pool.&lt;br /&gt;
&lt;br /&gt;
Before we start though, we need to know how much available storage space we have to play with. Both nodes should have identical storage, but we&#039;ll double check now. If they differ, we&#039;ll be limited to the size of the smaller one.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Both nodes show the same amount of free space, 851 [[GB]] (note, not [[GiB]]). &lt;br /&gt;
&lt;br /&gt;
We need to carve this up into three chunks of space:&lt;br /&gt;
&lt;br /&gt;
# Space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. Install ISOs, server definition files and the like will be kept here.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to install 8 different operating systems. That means we&#039;ll need enough space for at least eight different install [[ISO]] images. We&#039;ll allocate 40 [[GB]] for this. That leaves 811 GB left for servers.&lt;br /&gt;
&lt;br /&gt;
Choose which node will host what servers is largely a question of distributing CPU load. Of course, each node has to be capable of running all of our servers at the same time. With a little planning though, we can split up servers with expected high CPU load and, when both nodes are up, gain a little performance.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s create a table showing the servers we plan to build. We&#039;ll put them into two columns, one for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the others designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We&#039;ll note how much disk space each server will need. Remember, we&#039;re trying to split up our servers with the highest expected CPU loads. This, being a tutorial, is going to be a fairly artificial division. You will need to decide for yourself how you want to split up your servers and how much space each needs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|Total: 500 GB&lt;br /&gt;
|Total: 300 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason we put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on the same DRBD resource (and thus, the same storage pool) as the one that will host &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers is that it changes relatively rarely. So in the already unlikely event that there is a split-brain event, the chances of something important changing in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; before the split-brain is resolved is extremely low. So low that the overhead of a third resource is not justified.&lt;br /&gt;
&lt;br /&gt;
So then:&lt;br /&gt;
&lt;br /&gt;
* The first DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, will need to have 540 GB of space.&lt;br /&gt;
* The second DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, will need to have 300 GB of space.&lt;br /&gt;
&lt;br /&gt;
This is a total of 840 GB, leaving about 11 GB unused. What you do with the remaining free space is entirely up to you. You can assign it to one of the servers, leave it as free space in one (or partially on both) storage pools, etc.&lt;br /&gt;
&lt;br /&gt;
It&#039;s actually a very common setup to build &#039;&#039;Anvil!&#039;&#039; systems with more storage than is needed. This free space can then be used later for new servers, growing or adding space to existing servers and so on. In our case, we&#039;ll give the left over space to the second storage pool and leave it there unassigned.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to create the partitions on each node that will back our DRBD resources!&lt;br /&gt;
&lt;br /&gt;
=== Creating the DRBD Partitions ===&lt;br /&gt;
&lt;br /&gt;
Here I will show you the values I entered to create the three partitions I needed on my nodes. &lt;br /&gt;
&lt;br /&gt;
{{note|1=All of the following commands need to be run on both nodes. It&#039;s very important that both nodes have identical partitions when you finish!}}&lt;br /&gt;
&lt;br /&gt;
On both nodes, start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shell.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; console. Before we start, let&#039;s take another look at the current disk configuration along with the amount of free space available.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we can create the three DRBD partition, we first need to create an [[extended partition|extended]] partition wherein which we will create the two [[logical partition|logical]] partitions. From the output above, we can see that the free space starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8GB&amp;lt;/span&amp;gt;, and that the drive ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;898GB&amp;lt;/span&amp;gt;. Knowing this, we can now create the extended partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that message, we will reboot when we finish.&lt;br /&gt;
&lt;br /&gt;
So now we can confirm that the new extended partition was create by again printing the partition table and the free space.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. So now we&#039;re going to create our two logical partitions. We&#039;re going to use the same start position as last time, but the end position will be 540 [[GB]] further in, rounded up to an even ten gigabytes. You can be more precise, if you wish, but we&#039;ve got a little wiggle room.&lt;br /&gt;
&lt;br /&gt;
If you recall from the section above, this is how much space we determined we would need for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition and the five servers that will live on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This means that we&#039;re going to create a new logical partition that starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8G&amp;lt;/span&amp;gt; and ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;590G&amp;lt;/span&amp;gt;, for a partition that is roughly 540 GB in size.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda&lt;br /&gt;
(Device or resource busy).  As a result, it may not reflect all of your changes&lt;br /&gt;
until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll check again to see the new partition layout.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect. Now we have a total of 308 [[GB]] left free. We need 300 GB, so this is enough, as expected. Lets allocate it all to our final partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, lets look at the new partition table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Just as we asked for!&lt;br /&gt;
&lt;br /&gt;
Before we finish though, let&#039;s be extra careful and do a manual check of our new partitions to ensure that they are, in fact, aligned optimally. There will be no output from the following commands if the partitions are aligned.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, we&#039;re done!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to reboot to make the kernel see the new partition table. If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, stop it &#039;&#039;&#039;before&#039;&#039;&#039; rebooting.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once the nodes are back online, remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
== Configuring DRBD ==&lt;br /&gt;
&lt;br /&gt;
DRBD is configured in two parts:&lt;br /&gt;
&lt;br /&gt;
* Global and common configuration options&lt;br /&gt;
* Resource configurations&lt;br /&gt;
&lt;br /&gt;
We will be creating three separate DRBD resources, so we will create three separate resource configuration files. More on that in a moment.&lt;br /&gt;
&lt;br /&gt;
=== Configuring DRBD Global and Common Options ===&lt;br /&gt;
&lt;br /&gt;
As always, we&#039;re going to start by making backups. Then we&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. After we finish, we&#039;ll copy everything over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can begin.&lt;br /&gt;
&lt;br /&gt;
The first file to edit is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/global_common.conf&amp;lt;/span&amp;gt;. In this file, we will set global configuration options and set default resource configuration options.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll talk about the values we&#039;re setting here as well as put the explanation of each option in the configuration file itself, as it will be useful to have them should you need to alter the files sometime in the future.&lt;br /&gt;
&lt;br /&gt;
The first addition is in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;handlers { }&amp;lt;/span&amp;gt; directive. We&#039;re going to add the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence-peer&amp;lt;/span&amp;gt; option and configure it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;obliterate-peer.sh&amp;lt;/span&amp;gt; script we spoke about earlier in the DRBD section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	handlers {&lt;br /&gt;
		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
		# tool. It will call a fence against the other node and return&lt;br /&gt;
		# the appropriate exit code to DRBD.&lt;br /&gt;
		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to add three options to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;startup { }&amp;lt;/span&amp;gt; directive; We&#039;re going to tell DRBD to make both nodes &amp;quot;primary&amp;quot; on start, to wait five minutes on start for its peer to connect and, if the peer never connected last time, to wait onto two minutes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	startup {&lt;br /&gt;
		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
		become-primary-on	both;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
		# connect. This should be longer than it takes for cman to&lt;br /&gt;
		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
		# forever.&lt;br /&gt;
		wfc-timeout		300;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
		# if the other node was degraded the last time it was seen by&lt;br /&gt;
		# this node. This is a way to speed up the boot process when&lt;br /&gt;
		# the other node is out of commission for an extended duration.&lt;br /&gt;
		degr-wfc-timeout	120;&lt;br /&gt;
		&lt;br /&gt;
		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
		# &#039;Outdated&#039;.&lt;br /&gt;
		outdated-wfc-timeout    120;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disk { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure DRBD&#039;s behaviour when a [[split-brain]] is detected. By setting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencing&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;resource-and-stonith&amp;lt;/span&amp;gt;, we&#039;re telling DRBD to stop all disk access and call a fence against its peer node rather than proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	disk {&lt;br /&gt;
		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
		# condition and it is incredible important in dual-primary&lt;br /&gt;
		# setups!&lt;br /&gt;
		fencing			resource-and-stonith;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;net { }&amp;lt;/span&amp;gt; directive, we&#039;re going to tell DRBD that it is allowed to run in dual-primary mode and we&#039;re going to configure how it behaves if a split-brain has occurred, despite our best efforts. The recovery (or lack there of) requires three options; What to do when neither node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-0pri&amp;lt;/span&amp;gt;), what to do if only one node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-1pri&amp;lt;/span&amp;gt;) and finally, what to do if both nodes had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-2pri&amp;lt;/span&amp;gt;), as will most likely be the case for us. This last instance will be configured to tell DRBD just to drop the connection, which will require human intervention to correct.&lt;br /&gt;
&lt;br /&gt;
At this point, you might be wondering why we won&#039;t simply run Primary/Secondary. The reason is because of live-migration. When we push a VM across to the backup node, there is a short period of time where both nodes need to be writeable. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	net {&lt;br /&gt;
		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
		allow-two-primaries;&lt;br /&gt;
&lt;br /&gt;
		# The following three commands tell DRBD how to react should&lt;br /&gt;
		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
		# where both nodes were primary. This care requires human&lt;br /&gt;
		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
		after-sb-1pri		discard-secondary;&lt;br /&gt;
		after-sb-2pri		disconnect;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure how much bandwidth DRBD is allowed to take away from normal replication for use with background synchronization of out-of-sync blocks. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	syncer {&lt;br /&gt;
		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
		# the more of an impact normal application use of the DRBD&lt;br /&gt;
		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
		rate			30M;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes and exit the text editor. Now let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to see the changes we made.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/drbd.d/global_common.conf /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/drbd.d/global_common.conf	2013-09-27 16:38:33.000000000 -0400&lt;br /&gt;
+++ /etc/drbd.d/global_common.conf	2013-10-31 01:08:13.733823523 -0400&lt;br /&gt;
@@ -22,0 +23,5 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
+		# tool. It will call a fence against the other node and return&lt;br /&gt;
+		# the appropriate exit code to DRBD.&lt;br /&gt;
+		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
@@ -26,0 +32,22 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
+		become-primary-on	both;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
+		# connect. This should be longer than it takes for cman to&lt;br /&gt;
+		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
+		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
+		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
+		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
+		# forever.&lt;br /&gt;
+		wfc-timeout		300;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
+		# if the other node was degraded the last time it was seen by&lt;br /&gt;
+		# this node. This is a way to speed up the boot process when&lt;br /&gt;
+		# the other node is out of commission for an extended duration.&lt;br /&gt;
+		degr-wfc-timeout	120;&lt;br /&gt;
+&lt;br /&gt;
+		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
+		# &#039;Outdated&#039;.&lt;br /&gt;
+		outdated-wfc-timeout	120;&lt;br /&gt;
@@ -31,0 +59,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
+		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
+		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
+		# condition and it is incredible important in dual-primary&lt;br /&gt;
+		# setups!&lt;br /&gt;
+		fencing			resource-and-stonith;&lt;br /&gt;
@@ -37,0 +72,14 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
+		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
+		allow-two-primaries;&lt;br /&gt;
+&lt;br /&gt;
+		# The following three commands tell DRBD how to react should&lt;br /&gt;
+		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
+		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
+		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
+		# where both nodes were primary. This care requires human&lt;br /&gt;
+		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
+		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
+		after-sb-1pri		discard-secondary;&lt;br /&gt;
+		after-sb-2pri		disconnect;&lt;br /&gt;
@@ -41,0 +90,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
+		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
+		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
+		# the more of an impact normal application use of the DRBD&lt;br /&gt;
+		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
+		rate			30M;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with this file.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the DRBD Resources ===&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, we are going to create two DRBD resources:&lt;br /&gt;
&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and provide space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each resource configuration will be in its own file saved as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/rX.res&amp;lt;/span&amp;gt;. The two of them will be pretty much the same. So let&#039;s take a look at the first resource, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt;, then we&#039;ll just look at the changes for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt;. These files won&#039;t exist initially so we start by creating them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/r0.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the shared GFS2 partition and host VMs designed &lt;br /&gt;
# to run on an-c05n01.&lt;br /&gt;
resource r0 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device		/dev/drbd0;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk	internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address		10.10.50.1:7788;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address		10.10.50.2:7788;&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; and edit for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; VM resource. The main differences are the resource name, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, the block device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt;, the port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and the backing block devices, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
vim /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
resource r1 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device          /dev/drbd1;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk       internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address         10.10.50.1:7789;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address         10.10.50.2:7789;&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s easiest to see what changed between &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; if we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/drbd.d/r0.res	2013-10-30 21:26:31.936680235 -0400&lt;br /&gt;
+++ /etc/drbd.d/r1.res	2013-10-30 21:27:42.625006337 -0400&lt;br /&gt;
@@ -1,3 +1,2 @@&lt;br /&gt;
-# This is the resource used for the shared GFS2 partition and host VMs designed&lt;br /&gt;
-# to run on an-c05n01.&lt;br /&gt;
-resource r0 {&lt;br /&gt;
+# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
+resource r1 {&lt;br /&gt;
@@ -5 +4 @@&lt;br /&gt;
-	device		/dev/drbd0;&lt;br /&gt;
+	device		/dev/drbd1;&lt;br /&gt;
@@ -17 +16 @@&lt;br /&gt;
-		address		10.10.50.1:7788;&lt;br /&gt;
+		address		10.10.50.1:7789;&lt;br /&gt;
@@ -20 +19 @@&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
@@ -24,2 +23,2 @@&lt;br /&gt;
-		address		10.10.50.2:7788;&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		address		10.10.50.2:7789;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see easily that the resource name, device name and backing partitions changed. We can also see that the IP address used for each resource stayed the same. We split up the network traffic by using different [[TCP]] ports instead.&lt;br /&gt;
&lt;br /&gt;
Now we will do an initial validation of the configuration. This is done by running the following command;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm dump&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/drbd.conf&lt;br /&gt;
common {&lt;br /&gt;
    protocol               C;&lt;br /&gt;
    net {&lt;br /&gt;
        allow-two-primaries;&lt;br /&gt;
        after-sb-0pri    discard-zero-changes;&lt;br /&gt;
        after-sb-1pri    discard-secondary;&lt;br /&gt;
        after-sb-2pri    disconnect;&lt;br /&gt;
    }&lt;br /&gt;
    disk {&lt;br /&gt;
        fencing          resource-and-stonith;&lt;br /&gt;
    }&lt;br /&gt;
    syncer {&lt;br /&gt;
        rate             30M;&lt;br /&gt;
    }&lt;br /&gt;
    startup {&lt;br /&gt;
        wfc-timeout      300;&lt;br /&gt;
        degr-wfc-timeout 120;&lt;br /&gt;
        outdated-wfc-timeout 120;&lt;br /&gt;
        become-primary-on both;&lt;br /&gt;
    }&lt;br /&gt;
    handlers {&lt;br /&gt;
        fence-peer       /usr/lib/drbd/rhcs_fence;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r0 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r0 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.1:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.2:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r1 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r1 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.1:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.2:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll note that the output is formatted differently from the configuration files we created, but the values themselves are the same. If there had of been errors, you would have seen them printed. Fix any problems before proceeding. Once you get a clean dump, copy the configuration over to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
drbd.d/r0.res&lt;br /&gt;
drbd.d/r1.res&lt;br /&gt;
&lt;br /&gt;
sent 5015 bytes  received 91 bytes  10212.00 bytes/sec&lt;br /&gt;
total size is 5479  speedup is 1.07&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Initializing the DRBD Resources ==&lt;br /&gt;
&lt;br /&gt;
Now that we have DRBD configured, we need to initialize the DRBD backing devices and then bring up the resources for the first time.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To save a bit of time and typing, the following sections will use a little &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bash&amp;lt;/span&amp;gt; magic. When commands need to be run on both resources, rather than running the same command twice with the different resource names, we will use the short-hand form &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, create the new [[DRBD metadata|metadata]] on the backing devices. &lt;br /&gt;
&lt;br /&gt;
Two notes:&lt;br /&gt;
&lt;br /&gt;
* You may need to type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; to confirm the action if any data is seen.&lt;br /&gt;
* If DRBD sees an actual file system, it will error and insist that you clear the partition. You can do this by running; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd if=/dev/zero of=/dev/sdaX bs=4M count=1000&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; is the partition you want to clear. This is called &amp;quot;zeroing out&amp;quot; a partition. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; program does not print its progress. To check the progress, open a new terminal to the node and run &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kill -USR1 $(pidof dd)&amp;lt;/span&amp;gt;&#039;.&lt;br /&gt;
&lt;br /&gt;
Lets create the meta-data!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get an error like this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
pvs stderr:  Skipping volume group an-c05n01-vg0&lt;br /&gt;
pvs stderr:        Freeing VG (null) at 0x16efd20.&lt;br /&gt;
pvs stderr:      Unlocking /var/lock/lvm/P_global&lt;br /&gt;
pvs stderr:        _undo_flock /var/lock/lvm/P_global&lt;br /&gt;
&lt;br /&gt;
md_offset 542229131264&lt;br /&gt;
al_offset 542229098496&lt;br /&gt;
bm_offset 542212550656&lt;br /&gt;
&lt;br /&gt;
Found LVM2 physical volume signature&lt;br /&gt;
   529504444 kB left usable by current configuration&lt;br /&gt;
Could not determine the size of the actually used data area.&lt;br /&gt;
&lt;br /&gt;
Device size would be truncated, which&lt;br /&gt;
would corrupt data and result in&lt;br /&gt;
&#039;access beyond end of device&#039; errors.&lt;br /&gt;
If you want me to do this, you need to zero out the first part&lt;br /&gt;
of the device (destroy the content).&lt;br /&gt;
You should be very sure that you mean it.&lt;br /&gt;
Operation refused.&lt;br /&gt;
&lt;br /&gt;
Command &#039;drbdmeta 0 v08 /dev/sda5 internal create-md&#039; terminated with exit code 40&lt;br /&gt;
drbdadm create-md r0: exited with code 40&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The next two commands will irrevocably destroy the data on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; on the backing device to destroy all existing data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda5 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.04352 s, 464 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda6 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.83831 s, 426 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Try running the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create-md&amp;lt;/span&amp;gt; commands again, it should work this time.&lt;br /&gt;
&lt;br /&gt;
== Loading the drbd Kernel Module ==&lt;br /&gt;
&lt;br /&gt;
Before we can go any further, we&#039;ll need to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module. Normally you won&#039;t normally need to do this because the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd&amp;lt;/span&amp;gt; initializations script handles this for us. We can&#039;t use this yet though because the DRBD resource we defined are not yet setup.&lt;br /&gt;
&lt;br /&gt;
So to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module, run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: minor_table @ 0xffff8803374420c0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: minor_table @ 0xffff8803387a9ec0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now go back to the terminal windows we were using to watch the cluster start. Kill the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;, if it&#039;s still running. We&#039;re going to watch the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; so we can keep tabs on the current state of the DRBD resources. We&#039;ll do this by using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt; program, which will refresh the output of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat&amp;lt;/span&amp;gt; call every couple of seconds.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back in the first terminal, we need now to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;attach&amp;lt;/span&amp;gt; each resource&#039;s backing device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda{5,6}&amp;lt;/span&amp;gt;, to their respective DRBD resources, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;. After running the following command, you will see no output on the first terminal, but the second terminal&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; should change.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the connection state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:StandAlone&amp;lt;/span&amp;gt;, the current role, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Secondary/Unknown&amp;lt;/span&amp;gt; and the disk state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ds:Inconsistent/DUnknown&amp;lt;/span&amp;gt;. This tells us that our resources are not talking to one another, are not usable because they are in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state (you can&#039;t even read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbdX&amp;lt;/span&amp;gt; device) and that the backing device does not have an up to date view of the data. &lt;br /&gt;
&lt;br /&gt;
This all makes sense of course, as the resources are brand new.&lt;br /&gt;
&lt;br /&gt;
So the next step is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;connect&amp;lt;/span&amp;gt; the two nodes together. As before, we won&#039;t see any output from the first terminal, but the second terminal will change.&lt;br /&gt;
&lt;br /&gt;
{{note|1=After running the following command on the first node, its connection state will become &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:WFConnection&amp;lt;/span&amp;gt; which means that it is &#039;&#039;&#039;w&#039;&#039;&#039;aiting &#039;&#039;&#039;f&#039;&#039;&#039;or a &#039;&#039;&#039;connection&#039;&#039;&#039; from the other node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can now see that the two nodes are talking to one another properly as the connection state has changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:Connected&amp;lt;/span&amp;gt;. They can see that their peer node is in the same state as they are; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next step is to synchronize the two nodes. Neither node has any real data, so it&#039;s entirely arbitrary which node we choose to use here. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; because, well, why not.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm -- --overwrite-data-of-peer primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:11467520 nr:0 dw:0 dr:11468516 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 7:03:30 speed: 20,372 (13,916) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:10833792 nr:0 dw:0 dr:10834788 al:0 bm:661 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290248820&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.6% (283444/294024)M&lt;br /&gt;
        finish: 7:31:03 speed: 10,720 (13,144) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# don&#039;t run anything here.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11467520 dw:11467520 dr:0 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 8:42:19 speed: 16,516 (13,796) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11061120 dw:11061120 dr:0 al:0 bm:675 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290021492&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.7% (283224/294024)M&lt;br /&gt;
        finish: 7:06:46 speed: 11,316 (13,308) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! This tells us that the data, as garbage as it is, is being sync&#039;ed over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. DRBD doesn&#039;t know about data structures, all it cares about is that whatever is on the first node is identical to what is on the other node. This initial synchronization does this.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
&lt;br /&gt;
* There is a trick to short-circuit this which we used to use in the old tutorial, but we no longer recommend this. If you ever run an [http://www.drbd.org/users-guide-8.3/s-online-verify.html online verification] of the resource, all the previously unsync&#039;ed blocks will sync. So it&#039;s better to do it initially before the cluster is in production.&lt;br /&gt;
* If you notice that the sync speed is sitting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;250 K/sec&amp;lt;/span&amp;gt;, then DRBD isn&#039;t honouring the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { rate xxM; }&amp;lt;/span&amp;gt; value. Run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbdadm adjust all&amp;lt;/span&amp;gt; on one node at the sync speed should start to speed up.&lt;br /&gt;
* &#039;&#039;&#039;Sync speed is NOT replication speed!&#039;&#039;&#039; - This is a very common misunderstanding for new DRBD users. The sync speed we see here &#039;&#039;takes away from&#039;&#039; the speed available to applications writing to the DRBD resource. The slower this is, the faster your applications can write to DRBD. Conversely, the higher the sync speed, the slower your applications writing to disk will be. So keep this reasonably low. Generally, a good number is about 30% of the storage or network&#039;s fastest speed, whichever is slower. If in doubt, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30M&amp;lt;/span&amp;gt; is a safe starting value.&lt;br /&gt;
* If you manually adjust the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer&amp;lt;/span&amp;gt; speed, it will not immediately change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;. It takes a while to change, be patient.&lt;br /&gt;
&lt;br /&gt;
The good thing about DRBD is that we do not have to wait for the resources to be synchronized. So long as one of the resource is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;, both nodes will work. If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node needs to read data, it will simply read it from its peer. &lt;br /&gt;
&lt;br /&gt;
It is worth noting though; If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; node disconnects or disappears, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node will immediately demote to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;, making it unusable. This is the biggest reason for making the synchronization speed as high as we did. The cluster can not be considered redundant until both nodes are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So with this understood, let&#039;s get back to work. The resources can synchronize in the background.&lt;br /&gt;
&lt;br /&gt;
In order for a DRBD resource to be usable, it has to be &amp;quot;promoted&amp;quot;. Be default, DRBD resources start in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state. This means that it will receive changes from the peer, but no changes can be made. You can&#039;t even look at the contents of a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; resource. Why this is requires more time to discuss than we can go into here.&lt;br /&gt;
&lt;br /&gt;
So the next step is to promote both resource on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:20010808 nr:0 dw:0 dr:20011804 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 9:01:50 speed: 15,660 (14,680) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:18860984 nr:0 dw:0 dr:18861980 al:0 bm:1151 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:282221684&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.3% (275604/294024)M&lt;br /&gt;
        finish: 2:31:28 speed: 31,036 (13,836) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:20010808 dw:20010752 dr:608 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 11:06:52 speed: 12,724 (14,584) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:19152824 dw:19152768 dr:608 al:0 bm:1168 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:281929844&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.4% (275320/294024)M&lt;br /&gt;
        finish: 2:27:30 speed: 31,844 (13,956) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how the roles have changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Primary/Primary&amp;lt;/span&amp;gt;? That tells us that DRBD is now ready to be used on both nodes!&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re done setting up DRBD!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Stopping DRBD while a synchronization is running is fine. When DRBD starts back up, it will pick up where it left off.}}&lt;br /&gt;
&lt;br /&gt;
Eventually, the next day in the case of our cluster, the synchronization will complete. This is what it looks like once it&#039;s finished. After this point, all application writes to the DRBD resources will get all the available performance your storage and network have to offer.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:413259760 nr:0 dw:20 dr:413261652 al:1 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:188464424 nr:0 dw:20 dr:188465928 al:1 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:413259760 dw:413259600 dr:944 al:0 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:188464424 dw:188464264 dr:876 al:0 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the next section, we&#039;re going to start working on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. You will want to stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; and go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
= Initializing Clustered Storage =&lt;br /&gt;
&lt;br /&gt;
Before we can provision the first virtual machine, we must first create the storage that will back them. This will take a few steps:&lt;br /&gt;
&lt;br /&gt;
* Configuring [[LVM]]&#039;s clustered locking and creating the [[PV]]s, [[VG]]s and [[LV]]s&lt;br /&gt;
* Formatting and configuring the shared [[GFS2]] partition.&lt;br /&gt;
* Adding storage to the cluster&#039;s resource management.&lt;br /&gt;
&lt;br /&gt;
== Clustered Logical Volume Management ==&lt;br /&gt;
&lt;br /&gt;
We will assign all three DRBD resources to be managed by clustered LVM. This isn&#039;t strictly needed for the [[GFS2]] partition, as it uses DLM directly. However, the flexibility of LVM is very appealing, and will make later growth of the GFS2 partition quite trivial, should the need arise. &lt;br /&gt;
&lt;br /&gt;
The real reason for clustered LVM in our cluster is to provide DLM-backed locking to the partitions, or logical volumes in LVM, that will be used to back our VMs. Of course, the flexibility of LVM managed storage is enough of a win to justify using LVM for our VMs in itself, and shouldn&#039;t be ignored here.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Clustered LVM Locking ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to edit the configuration on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. When we&#039;re done, we&#039;ll copy the configuration files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Before we create the clustered LVM, we need to first make three changes to the LVM configuration:&lt;br /&gt;
&lt;br /&gt;
* We need to filter out the DRBD backing devices so that LVM doesn&#039;t see the same signature a second time on the DRBD resource&#039;s backing device.&lt;br /&gt;
* Switch from local locking to clustered locking.&lt;br /&gt;
* Prevent fall-back to local locking when the cluster is not available.&lt;br /&gt;
&lt;br /&gt;
Start by making a backup of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; and then begin editing it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The configuration option to filter out the DRBD backing device is, surprisingly, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter = [ ... ]&amp;lt;/span&amp;gt;. By default, it is set to allow everything via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a/.*/&amp;quot;&amp;lt;/span&amp;gt; regular expression. We&#039;re only using DRBD in our LVM, so we&#039;re going to flip that to reject everything &#039;&#039;except&#039;&#039; DRBD by changing the regex to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the locking, we&#039;re going to change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;locking_type&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (local locking) to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;, (clustered locking). This is what tells LVM to use DLM and gives us the &amp;quot;clustered&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    locking_type = 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, we&#039;re also going to disallow fall-back to local locking. Normally, LVM would try to access a clustered LVM [[VG]] using local locking if DLM is not available. We want to prevent any access to the clustered LVM volumes &#039;&#039;except&#039;&#039; when the DLM is itself running. This is done by changing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fallback_to_local_locking&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes, then lets run a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; against our backup to see a summary of the changes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/lvm/lvm.conf /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/lvm/lvm.conf	2013-10-10 09:40:04.000000000 -0400&lt;br /&gt;
+++ /etc/lvm/lvm.conf	2013-10-31 00:21:36.196228144 -0400&lt;br /&gt;
@@ -67,2 +67,2 @@&lt;br /&gt;
-    # By default we accept every block device:&lt;br /&gt;
-    filter = [ &amp;quot;a/.*/&amp;quot; ]&lt;br /&gt;
+    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
+    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
@@ -408 +408 @@&lt;br /&gt;
-    locking_type = 1&lt;br /&gt;
+    locking_type = 3&lt;br /&gt;
@@ -424 +424 @@&lt;br /&gt;
-    fallback_to_local_locking = 1&lt;br /&gt;
+    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect! Now copy the modified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; file to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm/lvm.conf root@an-c05n02:/etc/lvm/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm.conf&lt;br /&gt;
&lt;br /&gt;
sent 2399 bytes  received 355 bytes  5508.00 bytes/sec&lt;br /&gt;
total size is 37569  speedup is 13.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Testing the clvmd Daemon ===&lt;br /&gt;
&lt;br /&gt;
A little later on, we&#039;re going to put clustered LVM under the control of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Before we can do that though, we need to start it manually so that we can use it to create the [[LV]] that will back the [[GFS2]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. We will also be adding this partition to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, once it has been created.&lt;br /&gt;
&lt;br /&gt;
Before we start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon, we&#039;ll want to ensure that the cluster is running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M     64   2013-10-30 22:40:07  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M     64   2013-10-30 22:40:07  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is, and both nodes are members. We can start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve not created any volume groups yet, so that complaint about not finding any is expected.&lt;br /&gt;
&lt;br /&gt;
We can now use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool&amp;lt;/span&amp;gt; to verify that a [[DLM]] lock space has been created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. If it has, we&#039;re good to go.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 2,2&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 1,1&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Initialize our DRBD Resource for use as LVM PVs ===&lt;br /&gt;
&lt;br /&gt;
This is the first time we&#039;re actually going to use DRBD and clustered LVM, so we need to make sure that both are started.&lt;br /&gt;
&lt;br /&gt;
First, check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198972/294024)M&lt;br /&gt;
0:r0   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
1:r1   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198956/294024)M&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary/Primary&amp;lt;/span&amp;gt;, so we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
Now to check on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13936) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13894) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and running. As we did earlier, we can also verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; if we wish.&lt;br /&gt;
&lt;br /&gt;
Before we can use LVM, clustered or otherwise, we need to initialize one or more raw storage devices called &amp;quot;Physical Volumes&amp;quot;. This is done using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; command. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should see the newly initialized DRBD resources appear.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s verify that, indeed, we have no existing [[PV]]s. We&#039;ll do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;, a tool that looks at blocks devices for physical volumes it may not yet have seen.&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; first, we&#039;ll see that no [[PV]]s have been created.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; against both DRBD devices. This will &amp;quot;sign&amp;quot; the devices and tell LVM that it can use them in [[VG]]s we&#039;ll soon create. On the other node, we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt;. If The &amp;quot;clustered&amp;quot; part of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; is working, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; should immediately know about the new PVs without needing another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvcreate /dev/drbd{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd0&amp;quot; successfully created&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd1&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;/dev/drbd0&amp;quot; is a new physical volume of &amp;quot;504.97 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               504.97 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;/dev/drbd1&amp;quot; is a new physical volume of &amp;quot;287.13 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               287.13 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If this was normal LVM, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; would not have seen the new [[PV]]s. Because DRBD replicated the changes and clustered LVM alerted the peer though, it immediately knew about the changes. &lt;br /&gt;
&lt;br /&gt;
Pretty neat!&lt;br /&gt;
&lt;br /&gt;
=== Creating Cluster Volume Groups ===&lt;br /&gt;
&lt;br /&gt;
As with initializing the DRBD resource above, we will create our volume groups, called [[VG]]s, on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. As with the PVs, we will again be able to see them on both nodes immediately.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that no previously-unseen VGs exist using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgscan&amp;lt;/span&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to create the VGs, we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgcreate&amp;lt;/span&amp;gt; command with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; switch, which tells LVM to make the VG a clustered VG. Note that when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon is running, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; is implied. However, it&#039;s best to get into the habit of being extra careful and thorough. If there was a problem, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; not being running for example, it will trigger an error and we avoid hassles later.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you plan to use the [[AN!CDB|cluster dashboard]], it is important that the volume group names match those below. If you do not do this, you may have trouble provisioning new servers via the dashboard&#039;s user interface.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use the volume group naming convention of:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;_vgX&amp;lt;/span&amp;gt;&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; matches the node that will become home to the servers using this storage pool.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgX&amp;lt;/span&amp;gt; is a simple sequence, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. If you ever need to add space to an existing storage pool, you can create a new DRBD resource, sign it as a PV and either assign it directly to the existing volume group or increment this number and create a second storage pool for the associated node.&lt;br /&gt;
&lt;br /&gt;
Earlier, while planning our partition sizes, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; would back the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; physical volume.&lt;br /&gt;
&lt;br /&gt;
Likewise, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd1&amp;lt;/span&amp;gt; would be used for the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, create both of our new VGs!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgcreate -c y an-c05n01_vg0 /dev/drbd0&lt;br /&gt;
vgcreate -c y an-c05n02_vg0 /dev/drbd1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n01_vg0&amp;quot; successfully created&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n02_vg0&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       73506 / 287.13 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
   &lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               504.97 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       129273 / 504.97 GiB&lt;br /&gt;
  VG UUID               TzKBFn-xBVB-e9AP-iL1l-AvQi-mZiV-86KnSF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good! Now as a point of note, let&#039;s look again at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; (we know it will be the same on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  PV Size               287.13 GiB / not usable 1.99 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Free PE               73506&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
   &lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  PV Size               504.97 GiB / not usable 2.18 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Free PE               129273&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice now that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;VG Name&amp;lt;/span&amp;gt; has a value where it didn&#039;t before? This shows us that the PV has been allocated to a volume.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it for the volume groups!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Logical Volume ===&lt;br /&gt;
&lt;br /&gt;
The last LVM step, for now, is to create a &amp;quot;logical volume&amp;quot; carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group. This will be used in the next step as the volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
&lt;br /&gt;
Out of thoroughness, let&#039;s scan for any previously unseen logical volumes using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
None found, as expected. So let&#039;s create our 40 [[GB]] logical volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition. We&#039;ll do this by specifying how large we want the new logical volume to be, what name we want to give it and what volume group to carve the space out of. The resulting logical volume will then be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/&amp;lt;vg&amp;gt;/&amp;lt;lv&amp;gt;&amp;lt;/span&amp;gt;. Here, we&#039;re taking space from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and we&#039;ll call this LV &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shared&amp;lt;/span&amp;gt;, so the resulting volume will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 40G -n shared an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;shared&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/shared&lt;br /&gt;
  LV Name                shared&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                f0w1J0-6aTz-0Bz0-SX57-pstr-g5qu-SAGGSS&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-10-31 17:07:50 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                40.00 GiB&lt;br /&gt;
  Current LE             10240&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. We can now create our GFS2 partition!&lt;br /&gt;
&lt;br /&gt;
== Creating the Shared GFS2 Partition ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Red Hat &#039;&#039;&#039;[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Global_File_System_2/index.html#s2-selinux-gfs2-gfs2 does NOT]&#039;&#039;&#039; support using SELinux and GFS2 together. The principle reason for this is the performance degradation caused by the additional storage overhead required for SELinux to operate. We decided to enable SELinux in the [[Anvil!]] anyway because of how infrequently the partition is changed. In our case, performance is not a concern. However, if you need to be 100% in compliance with what Red Hat supports, you will need to disable SELinux.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; are running.}}&lt;br /&gt;
&lt;br /&gt;
The GFS2-formatted &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; partition will be mounted at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on both nodes and it will be used for four main purposes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;; Storing files like [[ISO]] images needed when installing server operating systems and mounting &amp;quot;DVDs&amp;quot; into the virtual DVD-ROM drives.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision&amp;lt;/span&amp;gt;; Storing short scripts used to call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; which handles the creation of new servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;; This is where the [[XML]] definition files which define the virtual hardware backing our servers will be kept. This is the most important directory as the cluster and [[AN!CDB|dashboard]] will look here when starting, migrating and recovering servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/archive&amp;lt;/span&amp;gt;; This is used to store old copies of the [[XML]] definition files and provision scripts.&lt;br /&gt;
&lt;br /&gt;
Formatting the logical volume is much like formatting a traditional file system on a traditional partition. There are a few extra arguments needed though. Lets look at them first.&lt;br /&gt;
&lt;br /&gt;
The following switches will be used with our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt; call:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-p lock_dlm&amp;lt;/span&amp;gt;; This tells GFS2 to use [[DLM]] for its clustered locking.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-j 2&amp;lt;/span&amp;gt;; This tells GFS2 to create two journals. This must match the number of nodes that will try to mount this partition at any one time.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-t an-cluster-05:shared&amp;lt;/span&amp;gt;; This is the lock space name, which must be in the format &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;cluste_name&amp;gt;:&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster_name&amp;lt;/span&amp;gt; must match the one in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt; has to be unique in the cluster, which is easy for us because we&#039;ll only have the one gfs2 file system.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve formatted the partition, we&#039;ll use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_tool&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to query the new partition&#039;s superblock. We&#039;re going to use it shortly in some bash magic to pull out the [[UUID]] and feed it into a string formatted for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. More importantly here, it shows us that the second node sees the new file system.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Depending on the size of the new partition, this call could take a while to complete. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs.gfs2 -p lock_dlm -j 2 -t an-cluster-05:shared /dev/an-c05n01_vg0/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This will destroy any data on /dev/an-c05n01_vg0/shared.&lt;br /&gt;
It appears to contain: symbolic link to `../dm-0&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Are you sure you want to proceed? [y/n] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device:                    /dev/an-c05n01_vg0/shared&lt;br /&gt;
Blocksize:                 4096&lt;br /&gt;
Device Size                40.00 GB (10485760 blocks)&lt;br /&gt;
Filesystem Size:           40.00 GB (10485758 blocks)&lt;br /&gt;
Journals:                  2&lt;br /&gt;
Resource Groups:           160&lt;br /&gt;
Locking Protocol:          &amp;quot;lock_dlm&amp;quot;&lt;br /&gt;
Lock Table:                &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
UUID:                      774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  mh_magic = 0x01161970&lt;br /&gt;
  mh_type = 1&lt;br /&gt;
  mh_format = 100&lt;br /&gt;
  sb_fs_format = 1801&lt;br /&gt;
  sb_multihost_format = 1900&lt;br /&gt;
  sb_bsize = 4096&lt;br /&gt;
  sb_bsize_shift = 12&lt;br /&gt;
  no_formal_ino = 2&lt;br /&gt;
  no_addr = 23&lt;br /&gt;
  no_formal_ino = 1&lt;br /&gt;
  no_addr = 22&lt;br /&gt;
  sb_lockproto = lock_dlm&lt;br /&gt;
  sb_locktable = an-cluster-05:shared&lt;br /&gt;
  uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
Now, on both nodes, we need to create a mount point for the new file system and then we&#039;ll mount it on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   29M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   26M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the path under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Filesystem&amp;lt;/span&amp;gt; is different from what we used when creating the GFS2 partition. This is an effect of [[Device Mapper]], which is used by LVM to create [[symlinks]] to actual block device paths. If we look at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; device and the device from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;df&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/mapper/an--c05n01_vg0-shared&amp;lt;/span&amp;gt;, we&#039;ll see that they both point to the same actual block device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/an-c05n01_vg0/shared /dev/mapper/an--c05n01_vg0-shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/an-c05n01_vg0/shared -&amp;gt; ../dm-0&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/mapper/an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt; at the beginning of the files&#039; mode? That tells us that these are links. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt; -&amp;gt; ../dm-0&amp;lt;/span&amp;gt; shows where they point to. If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/dm-0&amp;lt;/span&amp;gt;, we see its mode line begins with a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;, telling us that it is an actual block device. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/dm-0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
brw-rw----. 1 root disk 253, 0 Oct 31 17:27 /dev/dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re curious, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to gather more information about the [[device mapper]] devices. Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dmsetup info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Name:              an--c05n01_vg0-shared&lt;br /&gt;
State:             ACTIVE&lt;br /&gt;
Read Ahead:        256&lt;br /&gt;
Tables present:    LIVE&lt;br /&gt;
Open count:        1&lt;br /&gt;
Event number:      0&lt;br /&gt;
Major, minor:      253, 0&lt;br /&gt;
Number of targets: 1&lt;br /&gt;
UUID: LVM-TzKBFnxBVBe9APiL1lAvQimZiV86KnSFf0w1J06aTz0Bz0SX57pstrg5quSAGGSS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we see the link back to the LV.&lt;br /&gt;
&lt;br /&gt;
== Adding /shared to /etc/fstab ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;re going to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. Breaking this file may leave your system unbootable! As always, practice on unimportant nodes until you are comfortable with this process.}}&lt;br /&gt;
&lt;br /&gt;
In order for the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; initialization script to work, it must be able to find the GFS partition in the file system table, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. The operating system reads this file when it is booting, looking for file systems to mount. As such, this is a critical system file and breaking it can leave a node either unable to boot, or booting into the single user recovery console. &lt;br /&gt;
&lt;br /&gt;
So please proceed carefully.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a new entry to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; requires a particularly crafted line. You can read about this in detail by typing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fstab&amp;lt;/span&amp;gt;. In short though, each line is made up of six space-separated values;&lt;br /&gt;
&lt;br /&gt;
# This is the device (by path or by [[UUID]]). We will be using the partition&#039;s UUID here.&lt;br /&gt;
# This is the mount point for the file system. For this entry, that will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
# This tells the [[OS]] what file system this partition is. For us, we&#039;ll set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;.&lt;br /&gt;
# These are the mount options. Usually this is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;default&amp;lt;/span&amp;gt; which implies a set of option. We&#039;re going to add a couple other options to modify this, which we&#039;ll discuss shortly.&lt;br /&gt;
# This tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt; program whether to back this file system up or not. It&#039;s not usually used except with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext2]]&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext3]]&amp;lt;/span&amp;gt; file systems. Even then, it&#039;s rarely used any more. We will set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; which disables this.&lt;br /&gt;
# This last field sets the order in which boot-time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck&amp;lt;/span&amp;gt; (file system checks) run. This file system is never available at boot, so the only sensible value here is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With all this, we can now build our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
First, we need to query the file system&#039;s UUID.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
current uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We only need the UUID, so let&#039;s filter out the parts we don&#039;t want by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;awk&amp;lt;/span&amp;gt;, which splits a line up on spaces.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need to make sure that the UUID is lower-case. It is already, but we can make sure it&#039;s always lower case by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When specifying a device in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; but UUID instead of using a device path, we need to prefix the entry with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID=&amp;lt;/span&amp;gt;. We can expand on our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to do this.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generally, all but the last two values are separated by tabs. We know that the second field is the mount point for this file system, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; in this case. lets expand the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to add a tab followed by the mount point.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The third entry is the file system type, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; in our case. Let&#039;s add another tab and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; word.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up are the file system options. GFS2, being a clustered file system, requires cluster locking. Cluster locks are, relative to non-clustered internal locks, fairly slow. So we also want to reduce the number of writes that hit the partition. Normally, every time you look at a file or directory, a field called &amp;quot;access time&amp;quot;, or &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;atime&amp;lt;/span&amp;gt;&amp;quot; for short, gets updated. This is actually a write, which would in turn require a DLM lock. Few people care about access times, so we&#039;re going to disable it for files and directories as well. We&#039;re to append a couple of option to help here; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;defaults,noatime,nodiratime&amp;lt;/span&amp;gt;. Let&#039;s add them to our growing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All that is left now are the two last options. We&#039;re going to separate these with a single space. Let&#039;s finish off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; with one last addition to our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
Now, we can add it by simply copy and pasting this line into the file directly. Another bash trick though, as we say in the SSH section, is using bash redirection to append the output of one program onto the end of a file. We&#039;ll do a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; immediately after to see that the line was appended properly.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Be sure to use two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt; brackets! A single &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; bracket says &amp;quot;overwrite&amp;quot;. Two &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; brackets says &amp;quot;append&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:17:33.865210115 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:18:04.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:14:39.035500695 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This looks good. Note that for this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt;, we used the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-u&amp;lt;/span&amp;gt; option. This shows a couple lines on either side of the changes. We see the existing entries above the new one, so we know we didn&#039;t accidentally over-write the existing data.&lt;br /&gt;
&lt;br /&gt;
Now we need to make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; daemon can see the new partition. If it can, we know the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; entry works properly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That works.&lt;br /&gt;
&lt;br /&gt;
The last test is to create our sub-directories we talked about earlier. We&#039;ll do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then we will do a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. If everything is working properly, we should see the new directories immediately.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared/{definitions,provision,archive,files}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 40K&lt;br /&gt;
drwxr-xr-x.  6 root root 3.8K Nov  1 01:23 .&lt;br /&gt;
dr-xr-xr-x. 24 root root 4.0K Oct 31 21:02 ..&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 archive&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 definitions&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 files&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fantastic! &lt;br /&gt;
&lt;br /&gt;
Our clustered storage is complete. The last thing we need to do is to move the clustered storage to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
=== Stopping All Clustered Storage Components ===&lt;br /&gt;
&lt;br /&gt;
In the next step, we&#039;re going to put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; under the cluster&#039;s control. Let&#039;s stop these daemons now so we can see them be started by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; shortly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
= Managing Storage In The Cluster =&lt;br /&gt;
&lt;br /&gt;
A little while back, we spoke about how the cluster is split into two components; cluster communication managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and resource management provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It is the later which we will now begin to configure.&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; component is contained within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; element tags. Within this element are three types of child elements. They are:&lt;br /&gt;
&lt;br /&gt;
* Fail-over Domains - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** These are optional constraints which allow for control which nodes, and under what circumstances, services may run. When not used, a service will be allowed to run on any node in the cluster without constraints or ordering.&lt;br /&gt;
* Resources - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** Within this element, available resources are defined. Simply having a resource here will not put it under cluster control. Rather, it makes it available for use in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
* Services - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** This element contains one or more parallel or series child-elements which are themselves references to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt; elements. When in parallel, the services will start and stop at the same time. When in series, the services start in order and stop in reverse order. We will also see a specialized type of service that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm /&amp;gt;&amp;lt;/span&amp;gt; element name, as you can probably guess, for creating virtual machine services.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll look at each of these components in more detail shortly.&lt;br /&gt;
&lt;br /&gt;
== A Note on Daemon Starting ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Readers of the old tutorial will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; has been removed. We found that, in rare occasions, bleeding-edge client software, like modern versions of &amp;quot;Virtual Machine Manager&amp;quot; of Fedora workstations, connecting to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon could cause it to crash. This didn&#039;t interfere with the servers, but the cluster would try to fail the storage stack, causing the service to enter a failed state. This left servers running, but it is a mess to clean up that is easily avoided by simply removing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; from the storage stack. To address this, we will monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; as its own service. Should it fail, it will restart without impacting the storage daemons.}}&lt;br /&gt;
&lt;br /&gt;
There are four daemons we will be putting under cluster control:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;; Replicated storage.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;; Clustered LVM.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;; Mounts and Unmounts configured GFS2 partition. We will manage this using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;; Enables access to the KVM hypervisor via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; suite of tools.&lt;br /&gt;
&lt;br /&gt;
The reason we do not want to start these daemons with the system is so that we can let the cluster do it. This way, should any fail, the cluster will detect the failure and fail the entire service tree. &lt;br /&gt;
&lt;br /&gt;
For example, lets say that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; failed to start, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; would fail the storage service and give up, rather than continue trying to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and the rest.&lt;br /&gt;
&lt;br /&gt;
If we had left these daemons to start on boot, the failure of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; would not effect the start-up of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, which would then not find its [[PV]]s given that DRBD is down. The system would then try to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; daemon which would also fail as the [[LV]] backing the partition would not be available.&lt;br /&gt;
&lt;br /&gt;
=== Defining the Resources ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=All of these edits will be done on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once we&#039;re done and the config has been validated, we&#039;ll use the cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; to push the update to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and update the running cluster&#039;s config.}}&lt;br /&gt;
&lt;br /&gt;
Lets start by first defining our clustered resources. &lt;br /&gt;
&lt;br /&gt;
As stated before, the addition of these resources does not, in itself, put the defined resources under the cluster&#039;s management. Instead, it defines services, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; scripts. These can then be used by one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements, as we will see shortly. For now, it is enough to know what, until a resource is defined, it can not be used in the cluster.&lt;br /&gt;
&lt;br /&gt;
Given that this is the first component of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; being added to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, we will be creating the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; elements here as well.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the new section, then discuss the parts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First and foremost; Note that we&#039;ve incremented the configuration version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8&amp;lt;/span&amp;gt;. As always, &amp;quot;increment and then edit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the new section;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve added the attribute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;log_level=&amp;quot;5&amp;quot;&amp;lt;/span&amp;gt; to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element to cut down on the log entries in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;. Every 10 seconds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/$foo status&amp;lt;/span&amp;gt; on all script services. At the default log, these checks are logged. So without this, every ten seconds, four status messages would be printed to the system log. That can make is difficult when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing the logs when testing or debugging.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources&amp;gt;...&amp;lt;/resources&amp;gt;&amp;lt;/span&amp;gt; element contains our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources. This is a particular type of resource which specifically handles that starting and stopping of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[init.d]]&amp;lt;/span&amp;gt; style scripts. That is, the script must exit with [[LSB]] compliant codes. They must also properly react to being called with the sole argument of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are many other types of resources which, with the exception of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm .../&amp;gt;&amp;lt;/span&amp;gt;, we will not be looking at in this tutorial. Should you be interested in them, please look in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/usr/share/cluster&amp;lt;/span&amp;gt; for the various scripts (executable files that end with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.sh&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Each of our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ... /&amp;gt;&amp;lt;/span&amp;gt; resources have two attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;file=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The full path to the script to be managed.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; A unique name used to reference this resource later on in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
Other resources are more involved, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources are quite simple.&lt;br /&gt;
&lt;br /&gt;
=== Creating Failover Domains ===&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are, at their most basic, a collection of one or more nodes in the cluster with a particular set of rules associated with them. Services can then be configured to operate within the context of a given fail-over domain. There are a few key options to be aware of.&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are optional and can be left out of the cluster, generally speaking. However, in our cluster, we will need them for our storage services, as we will later see, so please do not skip this step.&lt;br /&gt;
&lt;br /&gt;
* A fail-over domain can be unordered or prioritized.&lt;br /&gt;
** When unordered, a service will start on any node in the domain. Should that node later fail, it will restart to another random node in the domain.&lt;br /&gt;
** When prioritized, a service will start on the available node with the highest priority in the domain. Should that node later fail, the service will restart on the available node with the next highest priority.&lt;br /&gt;
* A fail-over domain can be restricted or unrestricted.&lt;br /&gt;
** When restricted, a service is &#039;&#039;&#039;only&#039;&#039;&#039; allowed to start on, or restart on. a nodes in the domain. When no nodes are available, the service will be stopped.&lt;br /&gt;
** When unrestricted, a service will try to start on, or restart on, a node in the domain. However, when no domain members are available, the cluster will pick another available node at random to start the service on.&lt;br /&gt;
* A fail-over domain can have a fail-back policy.&lt;br /&gt;
** When a domain allows for fail-back and the domain is ordered, and a node with a higher &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt; (re)joins the cluster, services within the domain will migrate to that higher-priority node. This allows for automated restoration of services on a failed node when it rejoins the cluster.&lt;br /&gt;
** When a domain does not allow for fail-back, but is unrestricted, fail-back of services that fell out of the domain will happen anyway. That is to say, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; is ignored if a service was running on a node outside of the fail-over domain and a node within the domain joins the cluster. However, once the service is on a node within the domain, the service will &#039;&#039;&#039;not&#039;&#039;&#039; relocate to a higher-priority node should one join the cluster later.&lt;br /&gt;
** When a domain does not allow for fail-back and is restricted, then fail-back of services will never occur.&lt;br /&gt;
&lt;br /&gt;
What we need to do at this stage is to create something of a hack. Let me explain;&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, we need to start a set of local daemons on all nodes. These aren&#039;t really clustered resources though as they can only ever run on their host node. They will never be relocated or restarted elsewhere in the cluster as as such, are not highly available. So to work around this desire to &amp;quot;cluster the unclusterable&amp;quot;, we&#039;re going to create a fail-over domain for each node in the cluster. Each of these domains will have only one of the cluster nodes as members of the domain and the domain will be restricted, unordered and have no fail-back. With this configuration, any service group using it will only ever run on the one node in the domain.&lt;br /&gt;
&lt;br /&gt;
In the next step, we will create a service group, then replicate it once for each node in the cluster. The only difference will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failoverdomain&amp;lt;/span&amp;gt; each is set to use. With our configuration of two nodes then, we will have two fail-over domains, one for each node, and we will define the clustered storage service twice, each one using one of the two fail-over domains.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, then we will focus closer on the new section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, the version was incremented, this time to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;. We&#039;ve also added the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains&amp;gt;...&amp;lt;/failoverdomains&amp;gt;&amp;lt;/span&amp;gt; element. Let&#039;s take a closer look at this new element.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first thing to note is that there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;...&amp;lt;/failoverdomain&amp;gt;&amp;lt;/span&amp;gt; child elements:&lt;br /&gt;
&lt;br /&gt;
* The first has the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n01&amp;lt;/span&amp;gt; and contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
* The second is effectively identical, save that the domain&#039;s name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n02&amp;lt;/span&amp;gt; and it contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt; element has four attributes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute sets the unique name of the domain which we will later use to bind a service to the domain.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster to never &amp;quot;fail back&amp;quot; any services in this domain. This seems redundant, given there is only one node, but when combined with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;, prevents any migration of services.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; this is also somewhat redundant in that there is only one node defined in the domain, but I don&#039;t like to leave attributes undefined so I have it here.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute is key in that it tells the cluster to &#039;&#039;&#039;not&#039;&#039;&#039; try to restart services within this domain on any other nodes outside of the one defined in the fail-over domain.&lt;br /&gt;
&lt;br /&gt;
Each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;&amp;lt;/span&amp;gt; elements has a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode .../&amp;gt;&amp;lt;/span&amp;gt; child element. This is a very simple element which has, at this time, only one attribute:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The name of the node to include in the fail-over domain. This name must match the corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; node name.&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re ready to finally create our clustered storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; monitoring services.&lt;br /&gt;
&lt;br /&gt;
=== Creating Clustered Storage and libvirtd Service ===&lt;br /&gt;
&lt;br /&gt;
With the resources defined and the fail-over domains created, we can set about creating our services.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, services can have one or more resources within them. When two or more resources exist, then can be put into a dependency tree, they can used in parallel or a combination of parallel and dependent resources.&lt;br /&gt;
&lt;br /&gt;
When you create a service dependency tree, you put each dependent resource as a child element of its parent. The resources are then started in order, starting at the top of the tree and working its way down to the deepest child resource. If at any time one of the resources should fail, the entire service will be declared failed and no attempt will be made to try and start any further child resources. Conversely, stopping the service will cause the deepest child resource to be stopped first. Then the second deepest and on upwards towards the top resource. This is exactly the behaviour we want, as we will see shortly.&lt;br /&gt;
&lt;br /&gt;
When resources are defined in parallel, all defined resources will be started at the same time. Should any one of the resources fail to start, the entire resource will be declared failed. Stopping the service will likewise cause a simultaneous call to stop all resources.&lt;br /&gt;
&lt;br /&gt;
As before, let&#039;s take a look at the entire updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, then we&#039;ll focus in on the new service section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With the version now at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;, we have added four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements. Two of which contain the storage resources in a service tree configuration. The other two have a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; resource for managing the hypervisors. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a closer look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements have five attributes each:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute is a unique name that will be used to identify the service, as we will see later.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that, when it starts, it should automatically start this service.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster which fail-over domain this service must run within. The two otherwise identical services each point to a different fail-over domain, as we discussed in the previous section.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that a node running this service &#039;&#039;&#039;is&#039;&#039;&#039; allowed to to have other services running as well.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery=&amp;quot;restart&amp;quot;&amp;lt;/span&amp;gt; attribute sets the service recovery policy. As the name implies, the cluster will try to restart this service should it fail. Should the service fail multiple times in a row, it will be disabled. The exact number of failures allowed before disabling is configurable using the optional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt; attributes, which are not covered here.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=It is a fairly common mistake to interpret &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt; to mean that a service is only allowed to run on one node at a time. This is not the case, please do not use this attribute incorrectly.}}&lt;br /&gt;
&lt;br /&gt;
Within each of the two first two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; attributes are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script...&amp;gt;&amp;lt;/span&amp;gt; type resources and a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; type resource. These are configured as a service tree in the order:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The other two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements are there to simply monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon on each node. Should it fail for any reason, the cluster will restart the service right away.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ...&amp;gt;&amp;lt;/span&amp;gt; elements has just one attribute; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ref=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; which points to a corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;script&amp;lt;/span&amp;gt; resource. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; element has five attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; is the name used to reference this resource in the service tree.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; is the logical volume we formatted as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;force_unmount&amp;lt;/span&amp;gt;, when set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, tells the system to try and kill any processes that might be holding the mount open. This is useful if, for example, you left a terminal window open where you had browsed into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Without it, the service would fail and restart.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstype&amp;lt;/span&amp;gt; is the file system type. If you do not specify this, the system will try to determine it automatically. To be safe, we will set it.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mountpoint&amp;lt;/span&amp;gt; is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; should be mounted.&lt;br /&gt;
&lt;br /&gt;
The logic for the storage resource tree is:&lt;br /&gt;
&lt;br /&gt;
* DRBD needs to start so that the bare clustered storage devices become available.&lt;br /&gt;
* Clustered LVM must next start so that the logical volumes used by GFS2 and our VMs become available.&lt;br /&gt;
* Finally, the GFS2 partition contains the [[XML]] definition files needed to start our servers, host shared files and so on.&lt;br /&gt;
&lt;br /&gt;
From the other direction, we need the stop order to be organized in the reverse order:&lt;br /&gt;
&lt;br /&gt;
* We need the GFS2 partition to unmount first.&lt;br /&gt;
* With the GFS2 partition stopped, we can safely say that all LVs are no longer in use and thus &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; can stop.&lt;br /&gt;
* With Clustered LVM now stopped, nothing should be using our DRBD resources any more, so we can safely stop them, too.&lt;br /&gt;
&lt;br /&gt;
All in all, it&#039;s a surprisingly simple and effective configuration.&lt;br /&gt;
&lt;br /&gt;
== Validating and Pushing the Changes ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve made a big change, so it&#039;s all the more important that we validate the config before proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, no errors and we checked that the current cluster configuration version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We need to now tell the cluster to use the new configuration file. Unlike last time, we won&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;. Now that the cluster is up and running, we can use it to push out the updated configuration file using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;. This is the first time we&#039;ve used the cluster to push out an updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, so we will have to enter the password we set earlier for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As confirmed on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the new configuration loaded properly! Note as well that we had to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password for both nodes. Once done, you will not have to do that again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Later, if you push an update from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, you will need to enter the passwords once again, but not after that. You authenticate from a node only one time.&lt;br /&gt;
&lt;br /&gt;
If you were watching syslog, you will have seen an entries like the ones below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:48 an-c05n01 ricci[26853]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 ricci[26856]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/533317550&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 corosync[6448]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26653]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26656]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/15604613&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 corosync[6404]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the Cluster&#039;s Status ==&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at a new tool; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, &#039;&#039;&#039;clu&#039;&#039;&#039;ster &#039;&#039;&#039;stat&#039;&#039;&#039;us. We&#039;ll be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; extensively from here on out to monitor the status of the cluster members and managed services. It does not manage the cluster in any way, it is simply a status tool.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re only running the foundation of the cluster, so we can only see which nodes are members. &lt;br /&gt;
&lt;br /&gt;
We&#039;ll now start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It will read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; configuration file and parse the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; child elements. It will find our four new services and, according to their configuration, start them. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;ve configured the storage services to start automatically. When we start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now, it will start the storage resources, including DRBD. In turn, DRBD will stop and wait for up to five minutes and wait for its peer. This will cause the first node you start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on to appear to hang until the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; has started DRBD as well. If the other node doesn&#039;t start DRBD, it will be fenced. So be sure to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on both nodes at the same time.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, and see what&#039;s new.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What we see are two sections; The top section shows the cluster members and the lower part covers the managed resources. &lt;br /&gt;
&lt;br /&gt;
We can see that both members, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Online&amp;lt;/span&amp;gt;, meaning that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running and that they&#039;ve joined the cluster. It also shows us that both members are running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. You will always see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Local&amp;lt;/span&amp;gt; beside the name of the node you ran the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; command from.&lt;br /&gt;
&lt;br /&gt;
Under the services, you can see the four new services we created with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix. We can see that each service is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;started&amp;lt;/span&amp;gt;, meaning that all four of the resources are up and running properly and which node each service is running on.&lt;br /&gt;
&lt;br /&gt;
If we were watching the system log, we will see that, very shortly after starting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; starts and mounts. Somewhere in there, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; will start.&lt;br /&gt;
&lt;br /&gt;
Lets take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:07 an-c05n01 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 kernel: dlm: connecting to 2&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: I am node #1&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Starting stopped service service:storage_n01&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: minor_table @ 0xffff880638752a80&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Found 4 transactions (126 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: bitmap READ of 4040 pages took 9 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: attached to UUIDs D62CF91BB06F1B41:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Found 1 transactions (1 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: attached to UUIDs FF678525C82359F3:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting receiver thread (from drbd0_worker [12026])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting receiver thread (from drbd1_worker [12041])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Starting stopped service service:libvirtd_n01&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Service service:libvirtd_n01 started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Starting asender thread (from drbd0_receiver [12058])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: self D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Starting asender thread (from drbd1_receiver [12063])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: self FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated sync UUID FF678525C82359F2:CFC277C83C414547:CFC177C83C414547:0EC499BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated sync UUID D62CF91BB06F1B41:AB8966B4CD6A5E71:AB8866B4CD6A5E71:F1BA98C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: bitmap WRITE of 2298 pages took 12 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1, already locked for use&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 rgmanager[10738]: Service service:storage_n01 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: got connection from 1&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: I am node #2&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:storage_n02&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: minor_table @ 0xffff880638440280&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Found 4 transactions (4 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: bitmap READ of 4040 pages took 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: attached to UUIDs AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: No usable activity log found.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: attached to UUIDs CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting receiver thread (from drbd0_worker [11833])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting receiver thread (from drbd1_worker [11848])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:libvirtd_n02&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 rgmanager[10547]: Service service:libvirtd_n02 started&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Starting asender thread (from drbd0_receiver [11865])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: self AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Starting asender thread (from drbd1_receiver [11869])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: self CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated sync uuid CFC277C83C414547:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated sync uuid AB8966B4CD6A5E71:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: bitmap WRITE of 2298 pages took 14 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0, already locked for use&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Done&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n02 rgmanager[10547]: Service service:storage_n02 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sure enough, we can confirm that everything started properly.&lt;br /&gt;
&lt;br /&gt;
DRBD;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looks good. Lets look at clustered LVM;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  29009) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  28801) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good, too. Last service in storage is GFS2;&lt;br /&gt;
&lt;br /&gt;
GFS2;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, our stand-alone service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  12131) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  11939) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nice, eh?&lt;br /&gt;
&lt;br /&gt;
== Managing Cluster Resources ==&lt;br /&gt;
&lt;br /&gt;
Managing services in the cluster is done with a fairly simple tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to look at two commands at this time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Command&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e &amp;lt;service&amp;gt; -m &amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Enable the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt; on the specified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;. When a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; is not specified, the local node where the command was run is assumed.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -d &amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Disable (stop) the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stopping Clustered Storage - A Preview to Cold-Stopping the Cluster ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at how we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to stop our storage services.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Services with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix can be called with their name alone. As we will see later, other services will need to have the service type prefix included.}}&lt;br /&gt;
&lt;br /&gt;
Before doing any work on an &#039;&#039;Anvil!&#039;&#039;, start by confirming the current state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is running, as expected. Let&#039;s stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d storage_n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling service:storage_n01...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we now run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; now, we should see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:storage_n01&amp;lt;/span&amp;gt; is now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt; state? If you check the status of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; now, you will see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is indeed down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd not loaded&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs            ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
1:r1   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; are stopped as well.&lt;br /&gt;
&lt;br /&gt;
Pretty simple!&lt;br /&gt;
&lt;br /&gt;
== Starting Clustered Storage ==&lt;br /&gt;
&lt;br /&gt;
As we saw earlier, the storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; services start automatically. It&#039;s still important to know how to manually start these services though. So that is what we&#039;ll cover here.&lt;br /&gt;
&lt;br /&gt;
The main difference from stopping the service is that we swap the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-d&amp;lt;/span&amp;gt; switch for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;, &#039;&#039;&#039;e&#039;&#039;&#039;nable, switch. We will also add the target cluster member name using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt; switch. We didn&#039;t need to use the member switch while stopping because the cluster could tell where the service was running and, thus, which member to contact to stop the service.&lt;br /&gt;
&lt;br /&gt;
Should you omit the member name, the cluster will try to use the local node as the target member. Note though that a target service will start on the node the command was issued on, regardless of the fail-over domain&#039;s ordered policy. That is to say, a service will not start on another node in the cluster when the member option is not specified, despite the fail-over configuration set to prefer another node.&lt;br /&gt;
&lt;br /&gt;
As always, start by verifying the current state of the services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; is disabled. Let&#039;s start it up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e storage_n01 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable service:storage_n01...Success&lt;br /&gt;
service:storage_n01 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at DRBD now, it will show as being up and running on both nodes.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If the DRBD status shows the resource still stopped on the node, give it a minute and check again. It can sometimes take a few moments before the resources in the service starts.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back up and running normally.&lt;br /&gt;
&lt;br /&gt;
= Testing Network Redundancy =&lt;br /&gt;
&lt;br /&gt;
Now that the &#039;&#039;Anvil!&#039;&#039; is up and running, it&#039;s time to test the network&#039;s fault tolerance capabilities.&lt;br /&gt;
&lt;br /&gt;
We wanted to wait this long because we need to see how our cluster and storage software handles the failure and recovery of various networking components. Had we tested before now, we would have had to rely on simple tests, like ping responses, which do not give us a complete picture of the network&#039;s real resiliency.&lt;br /&gt;
&lt;br /&gt;
We will perform the following tests:&lt;br /&gt;
&lt;br /&gt;
* Pull each network cable and confirm that the bond it belongs to failed over to the other interface.&lt;br /&gt;
* Kill the primary switch entirely and then recover it.&lt;br /&gt;
* Kill the backup switch entirely and then recover it.&lt;br /&gt;
&lt;br /&gt;
During these tests, we will watch the following:&lt;br /&gt;
&lt;br /&gt;
* Watch a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; file for each bond to see how its state changes.&lt;br /&gt;
* Run a ping flood from each node to the other node, using each of out three networks.&lt;br /&gt;
* Watch the cluster membership.&lt;br /&gt;
* Watch the status of the DRBD resources.&lt;br /&gt;
* Tail the system log files.&lt;br /&gt;
&lt;br /&gt;
The cluster will be formed and the storage services will be running. We do not need to have the servers running, so we will turn them off. If something goes wrong here, it will certainly end up with a node being fenced. No need to risk hurting the servers. Whether they are running or nor will not will have no effect of the tests.&lt;br /&gt;
&lt;br /&gt;
== What we will be Watching ==&lt;br /&gt;
&lt;br /&gt;
Before setup for the tests, lets take a minute to look at the various things we&#039;ll be monitoring for faults.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/proc/net/bonding/bondX&#039; ===&lt;br /&gt;
&lt;br /&gt;
When a bond is created, a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file is created whose name matches the name of the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; device. We created three bonds; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, so we&#039;ll find &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond2&amp;lt;/span&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
These look like normal files, and we can read them like files, but they&#039;re actually representations of kernel values. Specifically, the health and state of the bond device, its slaves and current performance settings. Lets take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you recall from the network setup step, we made &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; the primary interface and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; the backup interface for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;. Indeed, we can see that these two interfaces are indeed slaved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The data here is in three sections:&lt;br /&gt;
&lt;br /&gt;
* The first section shows the state of the overall bond. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that we&#039;re using the &amp;quot;Active/Backup&amp;quot; bonding mode, that the currently active interface is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will always be used when both interfaces are healthy, though it will wait two minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120,000 ms&amp;lt;/span&amp;gt;) after &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; returns before it will be used. It also tells us that it will manually check for a link on the slaved interfaces every 100 ms.&lt;br /&gt;
&lt;br /&gt;
The next two sections cover the two slaved interfaces:&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the link (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;) is up and running at 1000 Mbps in full duplex mode. It shows us that it has not seen any failures in this interface since the bond was last started. It also shows us the interfaces real [[MAC]] address. This is important because, from the point of view of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ip addr&amp;lt;/span&amp;gt;, both slaved interfaces will &#039;&#039;appear&#039;&#039; to have the same MAC address (which depends on the currently active interface). This is a trick done in active-backup (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) bonding to speed up fail-over. The queue ID is used in other bonding modes for routing traffic down certain slaves when possible, we can ignore it here.&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; information is more or less the same as the first. This is expected because, usually, the hardware is the same. The only expected differences are the device name and MAC address, of course.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/etc/init.d/drbd status&#039; ===&lt;br /&gt;
&lt;br /&gt;
Earlier, we looked at another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; in order to watch the state of our DRBD resources. There is another way we can monitor DRBD using its initialization script. We&#039;ll use that method here.&lt;br /&gt;
&lt;br /&gt;
Lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will notice that the output is almost exactly the same as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt;&#039;s output, but formatted a little nicer. &lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;cman_tool nodes&#039; ===&lt;br /&gt;
&lt;br /&gt;
This is a more specific &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; call than we&#039;ve used in the past. Before, we called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; to get a broad overview of the cluster&#039;s state. It can be used in many ways to get more information about specific about the cluster. &lt;br /&gt;
&lt;br /&gt;
If you recall, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; would show us the simple sum of nodes in the cluster; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt;. If we want to know more about the nodes, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;. Lets see what that looks like on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    332   2013-11-27 14:11:01  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    340   2013-11-27 14:11:02  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Slightly more informative.&lt;br /&gt;
&lt;br /&gt;
== Network Testing Terminal Layout ==&lt;br /&gt;
&lt;br /&gt;
If you have a decent resolution monitor (or multiple monitors), you should be able to open 18 terminals at once. This is how many are needed to run ping floods, watch the bond status files, watch the system logs, watch DRBD and watch cluster membership all at the same time. This configuration makes it very easy to keep a near real-time, complete view of all network components.&lt;br /&gt;
&lt;br /&gt;
Personally, I have a 1920 x 1080 screen, which is pretty typical these days. I use a 9-point monospace font in my gnome terminals and I disable the menu bar. With that, the layout below fits nicely;&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node_el6-tutorial_network-test_terminal-layout_02.png|thumb|center|1000px|Terminal layout used for HA network testing; Calls running.]]&lt;br /&gt;
&lt;br /&gt;
The details of that are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Terminal layout for monitoring during network testing.&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The actual commands we will use are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this, we can keep a real-time overview of the status of all network, drbd and cluster components for both nodes. It may take a little bit to setup, but it will make the following network failure and recovery tests much easier to keep track of. Most importantly, it will allow you to quickly see if any of the tests fail.&lt;br /&gt;
&lt;br /&gt;
== How to Know if the Tests Passed ==&lt;br /&gt;
&lt;br /&gt;
Well, the most obvious answer to this question is if the cluster stack blows up or not.&lt;br /&gt;
&lt;br /&gt;
We can be a little more subtle than that though.&lt;br /&gt;
&lt;br /&gt;
We will be watching for:&lt;br /&gt;
&lt;br /&gt;
* Bonds not failing over to or back from their backup links when the primary link fails.&lt;br /&gt;
* More than 20 or 30 lost packets across each/all effected bonds fail over or back. Keep in mind that this may sound like a lot of dropped packets, but we&#039;re flooding the network with as many pings as the hardware can push out, so 20 to 30 lost packets is actually very low packet loss.&lt;br /&gt;
* Corosync declaring the peer node lost and cluster membership changing / node fencing.&lt;br /&gt;
* DRBD losing connection to the peer / node fencing.&lt;br /&gt;
&lt;br /&gt;
== Breaking things! ==&lt;br /&gt;
&lt;br /&gt;
To document the testing of all failure conditions would add substantially to this tutorial and not add much value.&lt;br /&gt;
&lt;br /&gt;
So instead we will look at sample failures to see what to expect. You can then use them as references for your own testing.&lt;br /&gt;
&lt;br /&gt;
=== Failing a Bond&#039;s Primary Interface ===&lt;br /&gt;
&lt;br /&gt;
For this test, we will pull &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&#039;s network cable out of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This will trigger a fail-over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; which we will see in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; file and we will see messages about the failure in the system logs. Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s ping flood on the [[BCN]] will show a number of dropped packets.&lt;br /&gt;
&lt;br /&gt;
Assuming all goes well, corosync should not report any errors or react in any way to this test.&lt;br /&gt;
&lt;br /&gt;
So pull the cable and see if you&#039;re result match ours.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; became the active link and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; shows as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lets look at the ping flood;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly in-line with what we expected! If you look at the cluster membership and system logs, you will see that nothing was noticed outside of the bonding driver!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s plug the cable back in.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll notice that the bond driver will see the link return, change the state of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt; and nothing more will happen at first. After two minutes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; will switch back to using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and there will be another short burst of dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: going back&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for two minutes.&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at the dropped packets when the switch-back happened;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; didn&#039;t lose a packet and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; only lost a few? The switch was controlled, so no time was lost detecting the link failure.&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t be tempted to test only a few links!}}&lt;br /&gt;
&lt;br /&gt;
Repeat this test for all network connections on both nodes. Ensure that each links fails and recovers in the same way. We have a complex network and tests like this help find cabling and configuration issues. These tests have value beyond simply verifying fail-over and recovery.&lt;br /&gt;
&lt;br /&gt;
=== Failing the Network Switches ===&lt;br /&gt;
&lt;br /&gt;
Failing and then recovering the primary switch tests a few things:&lt;br /&gt;
&lt;br /&gt;
* Can all the bonds fail over to their backup links at the same time?&lt;br /&gt;
* Does the switch handle the loss of the primary switch in the stack properly?&lt;br /&gt;
* Does the switch interrupt traffic when it recovers?&lt;br /&gt;
&lt;br /&gt;
Even if you don&#039;t have a stacked switch, this test is still very important. We set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; to two minutes, but there is a chance that is still not long enough for your switch. This test will expose issues like this.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you don&#039;t have port trunking, be sure to switch your workstation&#039;s links or network uplink from the primary to backup switch before proceeding. This will ensure you can monitor the nodes during the test without interruption.}}&lt;br /&gt;
&lt;br /&gt;
Before we start, lets take a look at the current view of thing;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we will pull the power cable out of the primary switch and wait for things to settle.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
..................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! All of the bonds failed over to their backup interfaces and the cluster stays stable. Both cluster membership and DRBD continued without interruption!&lt;br /&gt;
&lt;br /&gt;
Now to test recover of the primary switch. If everything was configured properly, the switch will recover, the primary links will wait two minutes before recovering and the actual cut-over will complete with few dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:53 an-c05n02 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Some switches will show a link and then drop the connection a few times as they boot. If your switch is like this, you will see this reflected in the system logs. This should be fine because of the two minute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; value.}}&lt;br /&gt;
&lt;br /&gt;
Now repeat this test by failing and recovering the backup switch. Do not assume that, because the first switch cycled successfully, the second switch will as well. A bad configuration can easily allow the primary switch to pass this test while the secondary switch would cause a failure.&lt;br /&gt;
&lt;br /&gt;
With the second switch test complete, we can be confident that the networking infrastructure is totally fault tolerant.&lt;br /&gt;
&lt;br /&gt;
= Provisioning Virtual Machines =&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re getting to the purpose of our cluster; Provision virtual machines!&lt;br /&gt;
&lt;br /&gt;
We have two steps left:&lt;br /&gt;
&lt;br /&gt;
* Provision our VMs.&lt;br /&gt;
* Add the VMs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Provisioning&amp;quot; a virtual machine simple means to create it; Assign a collection of emulated hardware, connected to physical devices, to a given virtual machine and begin the process of installing the operating system on it. This tutorial is more about clustering than it is about virtual machine administration, so some experience with managing virtual machines has to be assumed. If you need to brush up, here are some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM project&#039;s How-Tos]&lt;br /&gt;
* [http://kvm.et.redhat.com/page/FAQ KVM project&#039;s FAQ]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Hypervisor_Deployment_Guide/index.html Red Hat&#039;s Hypervisor Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html Red Hat&#039;s Virtualization Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html Red Hat&#039;s Virtualization Administration]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html Red Hat&#039;s Virtualization Host Configuration and Guest Installation Guide]&lt;br /&gt;
&lt;br /&gt;
When you feel comfortable, proceed.&lt;br /&gt;
&lt;br /&gt;
== Before We Begin - Building a Dashboard ==&lt;br /&gt;
&lt;br /&gt;
[[Image:An-cdb-splash.png|thumb|right|400px|[[AN!CDB]] dashboard with server &amp;quot;monitor&amp;quot; displayed.]]&lt;br /&gt;
&lt;br /&gt;
One of the biggest advances since the initial tutorial was created was the creation of the [[AN!CDB - Cluster Dashboard]].&lt;br /&gt;
&lt;br /&gt;
It provides a very easy to use web-based user interface for building, modifying and removing servers on the &#039;&#039;Anvil!&#039;&#039; platform. &lt;br /&gt;
&lt;br /&gt;
It also provides a &amp;quot;[https://en.wikipedia.org/wiki/KVM_switch KVM switch]&amp;quot; style access to the servers you create. This gives you direct access to your servers, just as if you have a physical keyboard, mouse and monitor plugged into a physical server. You can watch the server boot from the virtual, boot into recovery consoles or off of repair &amp;quot;DVDs&amp;quot; and so forth.&lt;br /&gt;
&lt;br /&gt;
The link above covers the dashboard and its use, and includes a link to an installer showing how to setup a dashboard for yourself. Now is a good time to take a break from this tutorial and setup that dashboard.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to build a dashboard, that is fine. It is not required in this tutorial.&lt;br /&gt;
&lt;br /&gt;
If you decide not to though, you will now need to setup &amp;quot;Virtual Machine Manager&amp;quot; on your (Linux) computer in order to get access to the servers we are about to build. You will need this in order to walk through the installation process for your new servers. Of course, once the install is complete, you can switch to another, traditional form of remote access like [[RDP]] on windows servers or [[ssh]] on *nix servers.&lt;br /&gt;
&lt;br /&gt;
If you want to use &amp;quot;Virtual Machine Manager&amp;quot;, look for a package from your distribution package manager with a name like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;. Once it is installed, add the connections to your &#039;&#039;Anvil!&#039;&#039; nodes. Once that&#039;s done, you&#039;re ready to proceed to the next section!&lt;br /&gt;
&lt;br /&gt;
== A Note on the Following Server Installations ==&lt;br /&gt;
&lt;br /&gt;
We wanted to show as many different server installations as possible. Obviously, it&#039;s unlikely that you will want or need all of the operating we&#039;re about to install. Please feel free to skip over the installation of servers that are not interesting to you.&lt;br /&gt;
&lt;br /&gt;
== Provision Planning ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to spend a lot of time provisioning &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. If you plan to skip it, please be sure to refer back to it if you run into questions on a later install.}}&lt;br /&gt;
&lt;br /&gt;
If you recall, when we were planning out our partitions, we&#039;ve already chosen which servers will draw from which storage pools and how big their &amp;quot;hard drives&amp;quot; will be. The last thing to consider is RAM allocation. The servers we&#039;re using to write this tutorial are a little modest in the RAM department with only 24 [[GiB]] of RAM. We need to subtract at least 2 GiB for the host nodes, leaving us with a total of 22 GiB. &lt;br /&gt;
&lt;br /&gt;
That needs to be divided up amongst our eight servers. Now, nothing says you have to use it all, of course. It&#039;s perfectly fine to leave some RAM unallocated for future use. This is really up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s put together a table with the RAM we plan to allocate and summarizing the logical volume we&#039;re going to create for each server. The [[LV]]s will be named after the server they&#039;ll be assigned to with the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_0&amp;lt;/span&amp;gt;. Later, if we add a second &amp;quot;hard drive&amp;quot; to a server, it will have the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_1&amp;lt;/span&amp;gt; and so on.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Server&lt;br /&gt;
!RAM (GiB)&lt;br /&gt;
!Storage Pool (VG)&lt;br /&gt;
!LV name&lt;br /&gt;
!LV size&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you plan to set static IP addresses for your servers, now would be a good time to select them, too. It&#039;s not needed, of course, but it certainly can make things easier to have all the details in one place.&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Not to spoil the surprise, but if you plan to not follow this tutorial exactly, please be sure to read [[#Calculating_Free_Space.3B_Converting_GiB_to_MB|the notes in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris100&amp;lt;/span&amp;gt; section]].}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm01-win2008 ==&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_08.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_Svr_2008_R2_64Bit_SP1.ISO root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
  3166720000 100%   65.53MB/s    0:00:46 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3167106674 bytes  received 31 bytes  59198256.17 bytes/sec&lt;br /&gt;
total size is 3166720000  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; to grab the latest version from [https://alt.fedoraproject.org/pub/alt/virtio-win/ their website]. At the time of this writing, the &amp;quot;[https://alt.fedoraproject.org/pub/alt/virtio-win/stable/ stable]&amp;quot; version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0.1-74&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Being conservative when it comes to servers, my preference is to use the &amp;quot;stable&amp;quot; version.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-04-28 18:01:10--  https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
Resolving alt.fedoraproject.org (alt.fedoraproject.org)... 209.132.181.27, 209.132.181.23, 209.132.181.24, ...&lt;br /&gt;
Connecting to alt.fedoraproject.org (alt.fedoraproject.org)|209.132.181.27|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 61272064 (58M) [application/octet-stream]&lt;br /&gt;
Saving to: ‘virtio-win-0.1-74.iso’&lt;br /&gt;
&lt;br /&gt;
100%[======================================&amp;gt;] 61,272,064  5.23MB/s   in 15s    &lt;br /&gt;
&lt;br /&gt;
2014-04-28 18:01:26 (3.86 MB/s) - ‘virtio-win-0.1-74.iso’ saved [61272064/61272064]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 3.1G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov  2 10:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--  1 root root  59M Nov 20 15:08 virtio-win-0.1-74.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm01-win2008_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm01-win2008_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm01-win2008_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm01-win2008_0&lt;br /&gt;
  LV Name                vm01-win2008_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                bT0zon-H2LN-0jmi-refA-J0QX-zHjT-nEY7YY&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-02 11:04:44 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm01-win2008.sh&lt;br /&gt;
chmod 755 /shared/provision/vm01-win2008.sh &lt;br /&gt;
vim /shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm01-win2008 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s break it down;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--connect qemu:///system&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; to use the [[QEMU]] hardware emulator (as opposed to [[Xen]], for example) and to install the server on to local node.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the name of the server. It is the name we will use in the cluster configuration and whenever we use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--arch x86_64&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the emulated CPU&#039;s architecture to 64-[[bit]]. This can be used even when you plan to install a 32-bit [[OS]], but not the other way around, of course.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--vcpus 2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the number of CPU cores to allocate to this server. Here, we&#039;re allocating two CPUs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|We need to make the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers available during the install process. This command is similar to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom&amp;lt;/span&amp;gt; above, but crafted as if it was a disk drive with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device=cdrom&amp;lt;/span&amp;gt; switch. This helps make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cdrom&amp;lt;/span&amp;gt; above is used as the boot drive. Also note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; option. This is used because, normally, if the ISO was &amp;quot;inserted&amp;quot; into another server&#039;s cd-rom, it would refuse to work here. The nature of ISOs ensures they&#039;re read-only, so we can safely force two or more servers to use the same ISO at the same time.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tweaks the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;&#039;s initial method of running and tunes the hypervisor to try and get the best performance for the server. There are many possible values here for many, many different operating systems. If you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install --os-variant list&amp;lt;/span&amp;gt; on your node, you will get a full list of available operating systems. If you can&#039;t find your exact operating system, select the one that is the closest match.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor that we want to create a network card using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; &amp;quot;hardware&amp;quot; and that we want it plugged into the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge. We only need one network card, but if you wanted two or more, simply repeat this command. If you create two or more bridges, you can have different network devices connect to different bridges.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finally, this tells the hypervisor to use the [http://www.spice-space.org/ spice] emulated video card. It is a bit simplistic to call it simply a &amp;quot;graphics card&amp;quot;, but that&#039;s close enough for now. Given that this is the last line, we close off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command with a simple redirection to a log file. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm01-win2008&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
One the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_01.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_02.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN7\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_05.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_06.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_07.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm01-win2008_a_Highly_Available_Service|Making vm01-win2008 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm02-win2012 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_2012_R2_64-bit_Preview.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
  4128862208 100%   66.03MB/s    0:00:59 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 4129366322 bytes  received 31 bytes  65029391.39 bytes/sec&lt;br /&gt;
total size is 4128862208  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 6.9G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 11 11:28 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm02-win2012_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm02-win2012_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm02-win2012_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm02-win2012_0&lt;br /&gt;
  LV Name                vm02-win2012_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                Lnyg1f-kNNV-qjfn-P7X3-LxLw-1Uyh-dfNfL0&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n02.alteeve.ca, 2013-11-11 11:30:55 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm02-win2012.sh&lt;br /&gt;
chmod 755 /shared/provision/vm02-win2012.sh &lt;br /&gt;
vim /shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm02-win2012 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is also the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script. At the time of writing, there wasn&#039;t an entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2012&amp;lt;/span&amp;gt;, so we&#039;re using the closest match which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2k8&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm02-win2012&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm02-win2012_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm03-win7 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous two servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_7_Pro_SP1_64bit_OEM_English.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
  3321233408 100%   83.97MB/s    0:00:37 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3321638948 bytes  received 31 bytes  80039493.47 bytes/sec&lt;br /&gt;
total size is 3321233408  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 10G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 11:32 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm03-win7_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm03-win7_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm03-win7_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm03-win7_0&lt;br /&gt;
  LV Name                vm03-win7_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                vgdtEm-aOsU-hatQ-2PxO-BN1e-sGLM-J7NVcn&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 12:08:52 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm03-win7.sh&lt;br /&gt;
chmod 755 /shared/provision/vm03-win7.sh &lt;br /&gt;
vim /shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm03-win7 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm03-win7.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm03-win7&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm03-win7_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm04-win8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our last Microsoft operating system!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation media and our driver disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous three servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Win8.1_Enterprise_64-bit_eval.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
  3797866496 100%   62.02MB/s    0:00:58 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3798330205 bytes  received 31 bytes  60773283.78 bytes/sec&lt;br /&gt;
total size is 3797866496  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 14G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 18:12 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm04-win8_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm04-win8_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm04-win8_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm04-win8_0&lt;br /&gt;
  LV Name                vm04-win8_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                WZIGmp-xkyZ-Q6Qs-ovMP-qr1k-9xC2-PmbcUD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 18:13:53 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm04-win8.sh&lt;br /&gt;
chmod 755 /shared/provision/vm04-win8.sh &lt;br /&gt;
vim /shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm04-win8 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm04-win8.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm04-win8&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm04-win8_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm05-freebsd9 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our first non-Microsft OS!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[http://www.freebsd.org/ FreeBSD] is free software and can be downloaded directly from their website.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-18 15:48:09--  ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
           =&amp;gt; `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039;&lt;br /&gt;
Resolving ftp.freebsd.org... 204.152.184.73, 2001:4f8:0:2::e&lt;br /&gt;
Connecting to ftp.freebsd.org|204.152.184.73|:21... connected.&lt;br /&gt;
Logging in as anonymous ... Logged in!&lt;br /&gt;
==&amp;gt; SYST ... done.    ==&amp;gt; PWD ... done.&lt;br /&gt;
==&amp;gt; TYPE I ... done.  ==&amp;gt; CWD (1) /pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2 ... done.&lt;br /&gt;
==&amp;gt; SIZE FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... 2554132480&lt;br /&gt;
==&amp;gt; PASV ... done.    ==&amp;gt; RETR FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... done.&lt;br /&gt;
Length: 2554132480 (2.4G) (unauthoritative)&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================&amp;gt;] 2,554,132,480  465K/s   in 45m 9s  &lt;br /&gt;
&lt;br /&gt;
2013-11-18 16:33:19 (921 KB/s) - `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039; saved [2554132480]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 18 15:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 18 16:35 ..&lt;br /&gt;
-rw-r--r--. 1 root root 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm05-freebsd9_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm05-freebsd9_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm05-freebsd9_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm05-freebsd9_0&lt;br /&gt;
  LV Name                vm05-freebsd9_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                ioF6jU-pXEQ-wAhm-1zkB-LTDw-PQPG-1SPdkD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-18 16:41:30 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm05-freebsd9.sh&lt;br /&gt;
chmod 755 /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
vim /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm05-freebsd9 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso \&lt;br /&gt;
  --os-variant freebsd8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant freebsd8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running FreeBSD 8, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm05-freebsd9&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
The entire install process for FreeBSD is normal. It has native support for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so the virtual hard drive and network card will &amp;quot;just work&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_03.png|thumb|900px|center|The hard drive for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_04.png|thumb|900px|center|The network card for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is also found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
There is one trick with installing FreeBSD 9 though. The optimization was for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;freebsd8&amp;lt;/span&amp;gt; and one down-side is that FreeBSD won&#039;t reboot automatically after the install finishes and tries to reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; server stays off after the initial install completes.]]&lt;br /&gt;
&lt;br /&gt;
Obviously, the server is not yet in the cluster so we can&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e&amp;lt;/span&amp;gt;. So instead, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to boot it up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_06.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is back up and running.]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm05-freebsd9_a_Highly_Available_Service|Making vm05-freebsd9 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm06-solaris11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Oracle&#039;s Solaris operating system is a commercial [[UNIX]] product. You can download an [http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html?ssSourceSiteId=ocomen evaluation version] from their website. We&#039;ll be using the [[x86]] version.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/sol-11-1111-text-x86.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
sol-11-1111-text-x86.iso&lt;br /&gt;
   450799616 100%  108.12MB/s    0:00:03 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 450854737 bytes  received 31 bytes  69362272.00 bytes/sec&lt;br /&gt;
total size is 450799616  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 17G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 19 17:11 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 19 17:04 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 root root 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n02_vg0&amp;quot; has insufficient free space (23506 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What&#039;s this?!&lt;br /&gt;
&lt;br /&gt;
=== Calculating Free Space; Converting GiB to MB ===&lt;br /&gt;
&lt;br /&gt;
What we have here is, despite our efforts to mitigate the [[GiB]] versus [[GB]] issue, we ran out of space.&lt;br /&gt;
&lt;br /&gt;
This highlights the need for careful design planning. We weren&#039;t careful enough, so now we have to deal with the resources we have left. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s figure out how much space is left in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; volume group.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  3&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                2&lt;br /&gt;
  Open LV               2&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       50000 / 195.31 GiB&lt;br /&gt;
  Free  PE / Size       23506 / 91.82 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can see that there is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]] left (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; &amp;quot;extents&amp;quot; which are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4.00&amp;lt;/span&amp;gt; [[MiB]] each).&lt;br /&gt;
&lt;br /&gt;
Knowing this, there are a few ways we could proceed.&lt;br /&gt;
&lt;br /&gt;
# Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l xx&amp;lt;/span&amp;gt; syntax, which says to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; extents. We have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; extents free, so we could just do &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 23506&amp;lt;/span&amp;gt;&lt;br /&gt;
# Use the &amp;quot;percentage free&amp;quot; method of defining free space. That would be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; which simply uses all remaining free space.&lt;br /&gt;
# Calculate the number of [[MB]] in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]].&lt;br /&gt;
&lt;br /&gt;
The first two are self-evident, so let&#039;s look the 3rd option because math is awesome!&lt;br /&gt;
&lt;br /&gt;
To do this, we need to convert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; GiB into bytes. We can get close by simply doing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(91.82 * (1024 * 1024 * 1024))&amp;lt;/span&amp;gt; (x GiB -&amp;gt; MiB -&amp;gt; KiB = bytes), but this gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590,974,279.68&amp;lt;/span&amp;gt;... The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.82&amp;lt;/span&amp;gt; is not precise enough. If we divide this by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; (number of bytes in a [[MB]]), we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98590.97&amp;lt;/span&amp;gt;. Round down to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we take the extent size times free extent count, we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;((23506 * 4) * (1024 * 1024))&amp;lt;/span&amp;gt; (extents free * extent size) converted to MiB -&amp;gt; KiB = bytes) which gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591309824&amp;lt;/span&amp;gt;. Divided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; to get [[MB]] and we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591.30&amp;lt;/span&amp;gt;, rounded down we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,591&amp;lt;/span&amp;gt; [[MB]].&lt;br /&gt;
&lt;br /&gt;
Both methods are pretty darn close, and would end up with the same number of extents used. So now, if we wanted to, we could use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -L 98591M&amp;lt;/span&amp;gt; to keep in line with our previous usage of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
That was fun!&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll be boring and practical and use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; because it&#039;s safe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm06-solaris11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
  LV Name                vm06-solaris11_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                3BQgmu-QHca-0XtE-PRQB-btQc-LmdF-rTVyi5&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-19 15:37:29 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                91.82 GiB&lt;br /&gt;
  Current LE             23506&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we&#039;re a little smaller than we originally planned. A good and simple way to avoid this problem is to plan your storage to have more free space than you think you will need. Storage space is, relatively speaking, fairly cheap.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Solaris 11 does not support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so we will be emulating a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;scsi&amp;lt;/span&amp;gt; storage controller and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e1000&amp;lt;/span&amp;gt; (Intel 1 Gbps) network card.}}&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm06-solaris11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm06-solaris11.sh &lt;br /&gt;
vim /shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm06-solaris11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/sol-11-1111-text-x86.iso \&lt;br /&gt;
  --os-variant solaris10 \&lt;br /&gt;
  --network bridge=vbr2,model=e1000 \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm06-solaris11_0 \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/sol-11-1111-text-x86.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant solaris10&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Solaris 10, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=e1000&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to emulate an Intel gigabit network controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm06-solaris11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off, but with errors!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; begins, but with (harmless) errors.]]&lt;br /&gt;
&lt;br /&gt;
By default, Solaris tries to use the [[uhci]] USB driver which doesn&#039;t work. It generates the following error;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received&lt;br /&gt;
, this USB UHCI host controller is unusable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is harmless and can be safely ignored. Once the install is complete, we will disabled [[uhci]] by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rem_drv uhci&amp;lt;/span&amp;gt; in the server.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_03.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_04.png|thumb|900px|center|Installation summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm06-solaris11_a_Highly_Available_Service|Making vm06-solaris11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm07-rhel6 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux operating system is a commercial [[Linux]] product. You can download an [http://www.redhat.com/products/enterprise-linux/server/download.html evaluation version] from their website. If you prefer a community-supported version, the [http://www.centos.org/modules/tinycontent/index.php?id=30 CentOS] project is a binary-compatible, free-as-in-beer operating system that you can use here instead.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/rhel-server-6.4-x86_64-dvd.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
  3720347648 100%   65.25MB/s    0:00:54 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3720801890 bytes  received 31 bytes  64709598.63 bytes/sec&lt;br /&gt;
total size is 3720347648  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 20G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 20 16:54 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 20 16:50 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm07-rhel6_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm07-rhel6_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
  LV Name                vm07-rhel6_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                wBNRrK-N8xL-nJm4-lM0y-a858-ydgC-d0UU04&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-20 16:56:22 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm07-rhel6.sh&lt;br /&gt;
chmod 755 /shared/provision/vm07-rhel6.sh &lt;br /&gt;
vim /shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm07-rhel6 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso \&lt;br /&gt;
  --os-variant rhel6 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running RHEL 6.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm07-rhel6&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
It&#039;s no surprise that [[RHEL6]] works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers. Red Hat did write them, after all.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_04.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_05.png|thumb|900px|center|Performing a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Desktop&amp;lt;/span&amp;gt; install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_06.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_07.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Desktop&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm07-rhel6_a_Highly_Available_Service|Making vm07-rhel6 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
=== Making sure RHEL 6 reboots after panic&#039;ing ===&lt;br /&gt;
&lt;br /&gt;
It used to be that [[RHEL]] would halt all CPU activity if the kernel panic&#039;ed. This lack of activity could be used to detect a failure in the guest which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; could use to trigger recovery of the guest. Now though, RHEL 6 keeps one of the virtual CPUs after after panic&#039;ing, which the node can not differentiate from a normal load.&lt;br /&gt;
&lt;br /&gt;
To ensure that your RHEL guest recovers after panic&#039;ing, you will need to append the following to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysctl.conf&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make the server reboot within 5 seconds of a panic.&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make the change take immediate effect, run the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 5 &amp;gt; /proc/sys/kernel/panic&lt;br /&gt;
sysctl -e kernel.panic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify that the server will reboot post panic, you can send the following command to your server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This command will immediately and totally halt your server. It will not recover until it reboots.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If things worked properly, the server will reboot five seconds after issuing this command.&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm08-sles11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
The last server in our tutorial!&lt;br /&gt;
&lt;br /&gt;
SUSE&#039;s Linux Enterprise Server is a commercial [[Linux]] product. You can download an [https://www.suse.com/products/server/eval.html evaluation version] from their website.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/SLES-11-SP3-DVD-x86_64-GM-DVD* root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
  3362783232 100%   60.94MB/s    0:00:52 (xfer#1, to-check=1/2)&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
  5311318016 100%   73.66MB/s    0:01:08 (xfer#2, to-check=0/2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 28G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 21 01:19 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 21 01:12 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-------. 1 1000 1000 3.2G Oct 30 17:52 SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
-rw-------. 1 1000 1000 5.0G Oct 30 18:25 SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n01_vg0&amp;quot; has insufficient free space (19033 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve run into the same problem that we hit with [[#Calculating_Free_Space.3B_Converting_GiB_to_MB]]. So we&#039;ve learned our lesson and will switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; to use up the free space that remains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm08-sles11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
  LV Name                vm08-sles11_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                9J9eO1-BhTe-Ee8X-zP5u-UY5S-Y7AB-Ql0hhI&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-21 01:23:16 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                74.35 GiB&lt;br /&gt;
  Current LE             19033&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our compounding error in planning has reduced this server&#039;s planned space down to a mere &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;74.35&amp;lt;/span&amp;gt; [[GiB]]!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm08-sles11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm08-sles11.sh &lt;br /&gt;
vim /shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm08-sles11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso \&lt;br /&gt;
  --disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force \&lt;br /&gt;
  --os-variant sles11 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|SLES 11 has two install DVDs. This tells the hypervisor to create a second DVD drive and to insert &#039;Disc 2&#039; into it.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running SLES 11.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm08-sles11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
SLES 11 works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_04.png|thumb|900px|center|Install summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_05.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_08.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Physical Machine&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
That is all eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm08-sles11_a_Highly_Available_Service|Making vm08-sles11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
Eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
= Making Our VMs Highly Available Cluster Services =&lt;br /&gt;
&lt;br /&gt;
We&#039;re ready to start the final step; Making our VMs highly available cluster services! This involves two main steps:&lt;br /&gt;
&lt;br /&gt;
* Creating two new, ordered fail-over Domains; One with each node as the highest priority.&lt;br /&gt;
* Adding our VMs as services, one is each new fail-over domain.&lt;br /&gt;
&lt;br /&gt;
== Creating the Ordered Fail-Over Domains ==&lt;br /&gt;
&lt;br /&gt;
We have planned for two VMs, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-dev&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-web&amp;lt;/span&amp;gt; to normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-db&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-ms&amp;lt;/span&amp;gt; to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Of course, should one of the nodes fail, the lost VMs will be restarted on the surviving node. For this, we will use an ordered fail-over domain.&lt;br /&gt;
&lt;br /&gt;
The idea here is that each new fail-over domain will have one node with a higher priority than the other. That is, one will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the highest priority and the other will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as the highest. This way, VMs that we want to normally run on a given node will be added to the matching fail-over domain.&lt;br /&gt;
&lt;br /&gt;
{{note|1=With 2-node clusters like ours, ordering is arguably useless. It&#039;s used here more to introduce the concepts rather than providing any real benefit. If you want to make production clusters unordered, you can. Just remember to run the VMs on the appropriate nodes when both are on-line.}}&lt;br /&gt;
&lt;br /&gt;
Here are the two new domains we will create in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/cluster/cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			...&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two major pieces of the puzzle here are the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority=&amp;quot;x&amp;quot;&amp;lt;/span&amp;gt; attributes. The former tells the cluster that there is a preference for which node should be used when both are available. The later, which is the difference between the two new domains, tells the cluster which specific node is preferred.&lt;br /&gt;
&lt;br /&gt;
The first of the new fail-over domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt;. Any service placed in this domain will prefer to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, as its priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; is higher than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. The second of the new domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; which reverses the preference, making &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; preferred over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; with the new domain, and the version updated to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s validate it now, but we won&#039;t bother to push it out just yet.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, now to create the new VM services!&lt;br /&gt;
&lt;br /&gt;
== Making vm01-win2008 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you jumped straight here after provisioning the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server, please [[#Making_Our_VMs_Highly_Available_Cluster_Services|jump back]] and be sure you&#039;ve created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; fail-over domains.}}&lt;br /&gt;
&lt;br /&gt;
The final piece of the puzzle, and the whole purpose of this exercise is in sight!&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm01-win2008|vm01-win2008]]&amp;lt;/span&amp;gt;, as it was the first server we provisioned.&lt;br /&gt;
&lt;br /&gt;
There is a special resource agent for virtual machines which use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:&amp;lt;/span&amp;gt; service prefix in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. We will need to create one of these services for each server that will be managed by the &#039;&#039;Anvil!&#039;&#039; platform.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm01-win2008 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
In order for the cluster to manage a server, it must know where to find the &amp;quot;definition&amp;quot; file that describes the virtual machine and its hardware. When the server was created with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt;, it saved this definition file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/libvirt/qemu/vm01-win2008.xml&amp;lt;/span&amp;gt;. If this was a single-host setup, that would be fine.&lt;br /&gt;
&lt;br /&gt;
In our case though, there are two reasons we need to move this.&lt;br /&gt;
&lt;br /&gt;
# We want both nodes to be able to see the definition file and we want a single place to make updates.&lt;br /&gt;
# Normal &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools are not cluster-aware, so we don&#039;t want them to see our server except when it is running.&lt;br /&gt;
&lt;br /&gt;
To address the first issue, we&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to write out the definition file for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. We&#039;ll use a simple bash redirection to write this to a file on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; where both nodes will be able to read it. Also, being stored on our GFS2 partition, any change made to the file will immediately be seen by both nodes.&lt;br /&gt;
&lt;br /&gt;
To address the second issue, we will &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;&amp;quot; the server. This effectively deletes it from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;, so when a server is off (or running elsewhere), tools like &amp;quot;Virtual Machine Manager&amp;quot; will not see it. This helps avoid problems like a user, unaware that the server is running on another node, starting it on the first. The cluster will still be able to start and stop the server just fine, so there is no worry about losing your new server. The cluster tools, being cluster-aware obviously, are smart enough to not try and boot a server on one node when it&#039;s already running on another.&lt;br /&gt;
&lt;br /&gt;
So the first step is to dump the server&#039;s definition file.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tool, to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--all&amp;lt;/span&amp;gt; option is needed to show us servers that are defined but powered off. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh list&amp;lt;/span&amp;gt; only shows running servers, so it&#039;s a good habit to always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--list&amp;lt;/span&amp;gt; to be sure you have a complete view of your system.&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is running. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots. It changes frequently and you need not worry about it. its principal purpose to be unique among running servers.&lt;br /&gt;
&lt;br /&gt;
So before we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt; the server, we first need to record its definition. We can do that with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh dumpxml $vm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain type=&#039;kvm&#039; id=&#039;1&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;vm01-win2008&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;uuid&amp;gt;d06381fc-8033-9768-3a28-b751bcc00716&amp;lt;/uuid&amp;gt;&lt;br /&gt;
  &amp;lt;memory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/memory&amp;gt;&lt;br /&gt;
  &amp;lt;currentMemory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/currentMemory&amp;gt;&lt;br /&gt;
  &amp;lt;vcpu placement=&#039;static&#039;&amp;gt;2&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch=&#039;x86_64&#039; machine=&#039;rhel6.4.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;boot dev=&#039;hd&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
  &amp;lt;features&amp;gt;&lt;br /&gt;
    &amp;lt;acpi/&amp;gt;&lt;br /&gt;
    &amp;lt;apic/&amp;gt;&lt;br /&gt;
    &amp;lt;pae/&amp;gt;&lt;br /&gt;
  &amp;lt;/features&amp;gt;&lt;br /&gt;
  &amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;timer name=&#039;rtc&#039; tickpolicy=&#039;catchup&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/clock&amp;gt;&lt;br /&gt;
  &amp;lt;on_poweroff&amp;gt;destroy&amp;lt;/on_poweroff&amp;gt;&lt;br /&gt;
  &amp;lt;on_reboot&amp;gt;restart&amp;lt;/on_reboot&amp;gt;&lt;br /&gt;
  &amp;lt;on_crash&amp;gt;restart&amp;lt;/on_crash&amp;gt;&lt;br /&gt;
  &amp;lt;devices&amp;gt;&lt;br /&gt;
    &amp;lt;emulator&amp;gt;/usr/libexec/qemu-kvm&amp;lt;/emulator&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hda&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-0-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;0&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/virtio-win-0.1-52.iso&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hdc&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-1-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;1&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;block&#039; device=&#039;disk&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039; cache=&#039;none&#039; io=&#039;native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&#039;/dev/an-c05n01_vg0/vm01-win2008_0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vda&#039; bus=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;virtio-disk0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x04&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;usb&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;usb0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;ide&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;interface type=&#039;bridge&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;mac address=&#039;52:54:00:8e:67:32&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source bridge=&#039;vbr2&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vnet0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;net0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x03&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/interface&amp;gt;&lt;br /&gt;
    &amp;lt;serial type=&#039;pty&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/serial&amp;gt;&lt;br /&gt;
    &amp;lt;console type=&#039;pty&#039; tty=&#039;/dev/pts/3&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target type=&#039;serial&#039; port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/console&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;tablet&#039; bus=&#039;usb&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;input0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;graphics type=&#039;spice&#039; port=&#039;5900&#039; autoport=&#039;yes&#039; listen=&#039;127.0.0.1&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;listen type=&#039;address&#039; address=&#039;127.0.0.1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/graphics&amp;gt;&lt;br /&gt;
    &amp;lt;video&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;qxl&#039; ram=&#039;65536&#039; vram=&#039;65536&#039; heads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;video0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x02&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/video&amp;gt;&lt;br /&gt;
    &amp;lt;memballoon model=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;balloon0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x05&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/memballoon&amp;gt;&lt;br /&gt;
  &amp;lt;/devices&amp;gt;&lt;br /&gt;
  &amp;lt;seclabel type=&#039;dynamic&#039; model=&#039;selinux&#039; relabel=&#039;yes&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;unconfined_u:system_r:svirt_t:s0:c68,c367&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;imagelabel&amp;gt;unconfined_u:object_r:svirt_image_t:s0:c68,c367&amp;lt;/imagelabel&amp;gt;&lt;br /&gt;
  &amp;lt;/seclabel&amp;gt;&lt;br /&gt;
&amp;lt;/domain&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is your server&#039;s hardware!&lt;br /&gt;
&lt;br /&gt;
Notice how it shows the mounted cd-roms? You can also see the [[MAC]] address assigned to the network card, the RAM and CPU cores allocated and other details. Pretty awesome!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s re-run the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dumpxml&amp;lt;/span&amp;gt; file, but this time, we&#039;ll use a bash redirection to save the output to a file in our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definition&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008 &amp;gt; /shared/definitions/vm01-win2008.xml&lt;br /&gt;
ls -lah /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 11:54 /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now, as we will see in a moment, the cluster will be able to use this to start, stop, migrate and recover the server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm01-win2008.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm01-win2008 Service ===&lt;br /&gt;
&lt;br /&gt;
As we discussed earlier, we are now going to create a new service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
&lt;br /&gt;
This element will have a child element that tells the cluster to give servers up to 30 minutes to shut down. Normally, the cluster will wait for two minutes after calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; against a server. For privacy reasons, there is not way for the cluster to know what is happening inside the server. So after the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; timeout expires, the node is considered failed and is forced off. The problem is that windows often queues updates to be installed during the shut down, so it can take a very long time to turn off. We don&#039;t want to risk &amp;quot;pulling the plug&amp;quot; on a windows machine that is being updated, of course, so we will tell the cluster to be very patient.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is a good idea to set your windows servers to download updates but not install them until an admin says to do so. This way, there is less chance of problem because the admin can do a reboot to install the updates during a maintenance window. It also avoids false-decleration of server failure.}}&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12&amp;lt;/span&amp;gt; and take a look at the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at each of the attributes now;&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;&lt;br /&gt;
|This must match the name we created the VM with (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name ...&amp;lt;/span&amp;gt; value when we provisioned the VM). In this case, that is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. This is the name that will be passed to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm.sh&amp;lt;/span&amp;gt; resource agent when managing this service, and it will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;name&amp;gt;.xml&amp;lt;/span&amp;gt; used when looking under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path=...&amp;lt;/span&amp;gt; for the VM&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster to manage the VM using the given fail-over domain. We built &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage pool, so this server will be assigned to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; domain. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster where to look for the server&#039;s definition file. &#039;&#039;&#039;Do not&#039;&#039;&#039; include the actual file name, just the path. The cluster takes this path, appends the server&#039;s name and then appends &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.xml&amp;lt;/span&amp;gt; in order to find the server&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster &#039;&#039;not&#039;&#039; to start the server automatically. This is needed because, if this was &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the cluster will try to start the server and the storage at the same time. It takes a few moments for the storage to start, and by the time it did, the server service would have failed.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt;&lt;br /&gt;
|As we saw with the storage services, we want to ensure that this service &#039;&#039;&#039;is not&#039;&#039;&#039; exclusive. If it were, starting the VM would stop storage/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and prevent other servers from running on the node. This would be a bad thing™.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the &#039;&#039;Anvil!&#039;&#039; what to do when the service fails. We are setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt;, so the cluster will try to restart the server on the same node it was on when it failed. The alternative is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;, which would instead start the server on another node. More about this next.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt;&lt;br /&gt;
|When a server fails, it is possible that it is because there is a subtle problem on the host node itself. So this attribute allows us to set a limit on how many times a server will be allowed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt; before giving up and switching to a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy. We&#039;re setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;, which means that if a server is restarted twice, the third failure will trigger a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt;&lt;br /&gt;
|If we let the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; failure count increment indefinitely, than a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy becomes inevitable. To account for this, we use this attribute to tell the &#039;&#039;Anvil!&#039;&#039; to &amp;quot;forget&amp;quot; a restart after the defined number of seconds. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds (ten minutes). So if a server fails, the failure count increments from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. After &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds though, the restart is &amp;quot;forgotten&amp;quot; and the failure count returns to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Said another way, a server will have to fail three times in ten minutes to trigger the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; recovery policy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So let&#039;s take a look at the final, complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s now take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;? That is because of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, the cluster is smart enough that we can tell it to start the service and it will see the server is already running and not actually do anything. So we can do this next step safely while the server is running.&lt;br /&gt;
&lt;br /&gt;
The trick, of course, is to be sure to tell the cluster to start the server on the right cluster node.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; once more to verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is, in fact, still on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent. So now to tell the cluster to begin managing the server, we&#039;re use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. It takes two switches in this case:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;; &amp;quot;enable&amp;quot; the service&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt;; do the action on the named member.&lt;br /&gt;
&lt;br /&gt;
We can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; from any node in the cluster. For now though, lets stick to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; that the server is now under cluster control.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. Windows 2008 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 13:36:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Windows occasionally ignores ACPI power button events. In other cases, some programs will block the shut-down. In either case, the server will not actually shut down. It&#039;s a good habit to connect to the server and make sure it shuts down when you disable the service. If it does not shut down on its own, use the operating system&#039;s power off feature.}}&lt;br /&gt;
&lt;br /&gt;
As we expected. So now, &amp;quot;press the server&#039;s power button&amp;quot; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We have to do it this way because, if the server stops any other way, the cluster will treat it as a failure and boot it right back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:11:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt;; That tells rgmanager to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service on the preferred host. It&#039;s a nice habit to get into as it will ensure the server always boots on the preferred node, when possible.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What the deuce!?&lt;br /&gt;
&lt;br /&gt;
=== Solving vm01-win2008 &amp;quot;Failure to Enable&amp;quot; Error ===&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the log file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n02 rgmanager[2864]: Recovering failed service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, we&#039;ll see that the server is stuck in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:16:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            none                                       recovering    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is why we saw the &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&amp;lt;/span&amp;gt;&amp;quot; message on both nodes. The cluster tried to enable it on the preferred host first, because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch, that failed so it tried to enable it on the second node and that also failed. &lt;br /&gt;
&lt;br /&gt;
The first step to diagnosing the problem is to disable the service in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and then manually trying to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:17:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now the cluster is no longer trying to touch the server. Lets start it manually. As always, verify the state of things. In this case, we&#039;ll double-check that the server really didn&#039;t start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s for sure off, so let&#039;s try to start it. As you can see above, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server is not shown as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shut off&amp;lt;/span&amp;gt; because we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;d it. So to start it, we need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt; option and specify the definition file manually.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh create &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 created from /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 10    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we know that the server itself is fine. Let&#039;s shut down the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;. Note that it will take a minute for the server to gracefully shut down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh shutdown vm01-win2008 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 is being shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a likely cause of problems is an [[SELinux]] denial. Let&#039;s verify that SELinux is, in fact, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enforcing&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is. So to test, let&#039;s temporarily put SELinux into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;permissive&amp;lt;/span&amp;gt; mode and see if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; starts working.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bingo! So we&#039;ve SELinux appears to be the problem.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s disable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt;, re-enable SELinux and then try to debug SELinux.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 1&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re back to where it fails. We will now want to look for errors. SELinux writes log entries to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/audit/audit.log&amp;lt;/span&amp;gt;, however, by default, many things are set to not logged (set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; in SELinux parlance). This includes cluster related issues. So to temporarily enable complete logging, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semodule&amp;lt;/span&amp;gt; command to tell it to log all messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# no output, but it takes a while to complete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f /var/log/audit/audit.log&amp;lt;/span&amp;gt; and try again to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We expect it will fail, but the log messages will be useful. Once it fails, we&#039;ll immediately disable it again. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;audit.log&amp;lt;/span&amp;gt;, we see;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1384209306.795:2768): avc:  denied  { search } for  pid=24850 comm=&amp;quot;virsh&amp;quot; name=&amp;quot;/&amp;quot; dev=dm-0 ino=22 scontext=unconfined_u:system_r:xm_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s complaining about the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; and specifically about the [[inode]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;. If you recall from when we setup the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; was a &amp;quot;device mapper&amp;quot; device. Let&#039;s see what this is.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/mapper/ | grep dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx.  1 root root      7 Nov  3 12:14 an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the device mapper name for the [[LV]] we created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Knowing this, let&#039;s search &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; for what is at [[inode]] number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find /shared -inum 22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So inode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt; is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; directory itself. So lets look at the SELinux context using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-Z&amp;lt;/span&amp;gt; switch.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:file_t:s0      .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the current context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt; entry above) is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;system_u:object_r:file_t:s0&amp;lt;/span&amp;gt;. This isn&#039;t permissive enough, so we need to fix it. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_t&amp;lt;/span&amp;gt; context should be good enough as it allows reads from files under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{{note|1=If you use a program other than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; that tries to manipulate the files in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;, you may need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_rw_t&amp;lt;/span&amp;gt; context as it allows read/write permissions.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll need to make this change on &#039;&#039;&#039;both&#039;&#039;&#039; nodes. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage&amp;lt;/span&amp;gt; to make the change followed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restorecon&amp;lt;/span&amp;gt; to make sure the changes remain in case the file system is ever re-labelled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We told SELinux to ignore the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; option earlier. We&#039;ll want to undo this so that our logs don&#039;t get flooded.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# No output, but it will take a while to return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If all went well, we should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Live Migration ===&lt;br /&gt;
&lt;br /&gt;
One of the most useful features of the &#039;&#039;Anvil!&#039;&#039; is the ability to &amp;quot;push&amp;quot; a running server from one node to another. This can be done without interrupting users, so it allows maintenance of nodes in the middle of work days. Upgrades, maintenance and repairs can be done without scheduling maintenance windows!&lt;br /&gt;
&lt;br /&gt;
As always, lets take a look at where things are right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:15:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that the cluster&#039;s view is accurate.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we expected.&lt;br /&gt;
&lt;br /&gt;
Now, to live-migrate a server, we will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-M&amp;lt;/span&amp;gt; (note the capitalization). This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; to migrate, instead of relocated, the service to the target cluster member.&lt;br /&gt;
&lt;br /&gt;
Seeing as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is currently on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll migrate it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you get an error like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Failed; service running on original owner&amp;lt;/span&amp;gt;, you may not have your [[#Configuring_iptables|firewall]] configured properly. Alternately, you may have run into [[2-Node_Red_Hat_KVM_Cluster_Tutorial_-_Troubleshooting#.5Bvm.5D_error:_internal_error_Attempt_to_migrate_guest_to_the_same_host_.7Buuid.7D|mainboards with matching UUIDs]].}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:57:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you were logged into the server, you would have noticed than any running appications, including network applications, would have not been effected in any way.&lt;br /&gt;
&lt;br /&gt;
How cool is that?&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll push it back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 15:02:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, we can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very cool.&lt;br /&gt;
&lt;br /&gt;
== Making vm02-win2012 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm02-win2012|vm02-win2012]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm02-win2012 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Recall that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm02-win2012 &amp;gt; /shared/definitions/vm02-win2012.xml&lt;br /&gt;
ls -lah /shared/definitions/vm02-win2012.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 13:03 /shared/definitions/vm02-win2012.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm02-win2012.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm02-win2012 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm02-win2012 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;13&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;13&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you&#039;ve been following along, this will be the first time we&#039;ve pushed a change to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll need to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password on both nodes.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:08:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:09:00 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To show that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; can be used anywhere, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to enable the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:29:12 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm02-win2012 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:35:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re flipping to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, but we don&#039;t have to. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; command is smart enough to know where the server is running and disable it on the appropriate node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm02-win2012...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:36:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ll go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; so that we can see how the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch is, in fact, smart enough to start the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm02-win2012...Success&lt;br /&gt;
vm:vm02-win2012 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SELinux fix [[#Solving_vm01-win2008_Failure_to_Enable_Error|from before]] worked for this server, too! You can verify this by disabling the server and re-running the above command on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:08:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@an-c05n01 ~]# virsh list --all&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 6     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:13:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Making vm03-win7 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm03-win7|vm03-win7]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm03-win7 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm03-win7 &amp;gt; /shared/definitions/vm03-win7.xml&lt;br /&gt;
ls -lah /shared/definitions/vm03-win7.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 14:21 /shared/definitions/vm03-win7.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm03-win7.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm03-win7 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm03-win7 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;14&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm03-win7 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm03-win7...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:30:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:43:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:56:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
 4     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:59:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm04-win8 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm04-win8|vm04-win8]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm04-win8 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm04-win8 &amp;gt; /shared/definitions/vm04-win8.xml&lt;br /&gt;
ls -lah /shared/definitions/vm04-win8.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 15:24 /shared/definitions/vm04-win8.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm04-win8.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm04-win8 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm04-win8 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. This server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;15&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm04-win8 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm04-win8...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:34:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:35:11 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm05-freebsd9 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm05-freebsd9|vm05-freebsd9]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm05-freebsd9 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm05-freebsd9 &amp;gt; /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
ls -lah /shared/definitions/vm05-freebsd9.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.8K Nov 19 12:29 /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm05-freebsd9.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm05-freebsd9 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm05-freebsd9...Success&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:56:03 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm05-freebsd9 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:57:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm05-freebsd9...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:02:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 10    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:03:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm06-solaris11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm06-solaris11|vm06-solaris11]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm06-solaris11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm06-solaris11 &amp;gt; /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm06-solaris11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 20 16:05 /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm06-solaris11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm06-solaris11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm06-solaris11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;17&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm06-solaris11...Success&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:31:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm06-solaris11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:39:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm06-solaris11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:38 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:42:46 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:43:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm07-rhel6 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm07-rhel6|vm07-rhel6]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm07-rhel6 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm07-rhel6 &amp;gt; /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
ls -lah /shared/definitions/vm07-rhel6.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 21 00:55 /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm07-rhel6.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm07-rhel6 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm07-rhel6 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you did a &amp;quot;minimal&amp;quot; install, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; will not be installed. Without it, the server will not shut down gracefully in the next step. Be sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is installed and that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpi&amp;lt;/span&amp;gt; daemon is running.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm07-rhel6...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:05:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:06:16 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:07:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 20    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:08:49 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making vm08-sles11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add our last server, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm08-sles11|vm08-sles11]]&amp;lt;/span&amp;gt;, to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm08-sles11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm08-sles11 &amp;gt; /shared/definitions/vm08-sles11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm08-sles11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.1K Nov 21 02:14 /shared/definitions/vm08-sles11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm08-sles11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm08-sles11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;19&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm08-sles11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm08-sles11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:20:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 21    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:21:13 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 25    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s really pretty easy, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
= Setting Up Alerts =&lt;br /&gt;
&lt;br /&gt;
One of the major additions to this second addition is the advent of the new alert system we developed called &amp;quot;AN!CM&amp;quot;; &amp;quot;AN! Cluster Monitor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Alert System Overview ==&lt;br /&gt;
&lt;br /&gt;
It is hardly fancy, but it does provide, in one package, very careful and detailed monitoring of:&lt;br /&gt;
&lt;br /&gt;
* Incoming power issues via UPS monitoring.&lt;br /&gt;
* Network interruptions via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond&amp;lt;/span&amp;gt; driver events&lt;br /&gt;
* Monitoring of node environmental health via IPMI BMC sensor readings&lt;br /&gt;
* Monitoring of all storage components via LSI&#039;s MegaCli tool&lt;br /&gt;
* Monitoring of the HA cluster stack using Red Hat&#039;s tools&lt;br /&gt;
&lt;br /&gt;
In all, over 200 points are monitored every 30 seconds. Most changes are simply logged, but events deemed important (or new events not before seen) trigger email alerts. These alerts are kept as simple and to the point as possibly to minimize the amount of time needed to understand what event triggered the alert.&lt;br /&gt;
&lt;br /&gt;
The alerting system tries to be intelligent about how alerts are triggered. For example, a thermal alert can trigger if it passes a set threshold, of course. At the same time, &amp;quot;early warning&amp;quot; alerts can be triggered is a sudden excessive change in temperature is seen. This allows early reaction to major events like HVAC failures in the server room or DC.&lt;br /&gt;
&lt;br /&gt;
Basic predictive failure analysis is also provided. Examples of this are alerts on distorted incoming power from the building mains. Likewise, a sudden jump in the number of media errors from a disk drive will trigger alerts. In this way, early warning alerts can get out before a component actually fails. This allows for corrective measures or replacement parts to be ordered pre-failure, minimizing risk exposure time.&lt;br /&gt;
&lt;br /&gt;
== AN!CM Requirements ==&lt;br /&gt;
&lt;br /&gt;
The alerting system is fairly customized to the &#039;&#039;Anvil!&#039;&#039; build-out. For example, only APC brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] controllers are supported for UPS monitoring. Likewise, only LSI-brand RAID controllers are currently supported.&lt;br /&gt;
&lt;br /&gt;
That said, AN!CM is an [https://github.com/digimer/an-cdb/tree/master/tools open-source project] (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.lib&amp;lt;/span&amp;gt;), so contributions are happily accepted. If you need help adapting this to your hardware, please don&#039;t hesitate to [[Support|contact us]]. We will be happy to assist however we can.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Your Dashboard ==&lt;br /&gt;
&lt;br /&gt;
You can configure a node&#039;s monitoring without a dashboard, if you wish. However, [[AN!CDB]] has been designed to use the dashboard systems as the center of the AN! tools.&lt;br /&gt;
&lt;br /&gt;
Please setup a dashboard before proceeding:&lt;br /&gt;
&lt;br /&gt;
* [[Install and Configure AN!CDB]]&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re done there, come back here.&lt;br /&gt;
&lt;br /&gt;
== Testing Monitoring ==&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/an/an.conf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm.lib&amp;lt;/span&amp;gt; should be on our nodes.&lt;br /&gt;
&lt;br /&gt;
Before we enable monitoring, lets test it once manually. If things work as expected, you should get two emails:&lt;br /&gt;
&lt;br /&gt;
* First indicating that the alert system has started with an overview of the node&#039;s health.&lt;br /&gt;
* Second indicating that the alert system has stopped.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The monitoring and alert program generally will not print anything to the screen. When we run the command below, the terminal will appear hung. It is not though. Wait a minute and you should get an email from the node. Once you see that email, press &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; to close the program and return to the command prompt.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C3:34&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:58:06:A9&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:8E:67:32&lt;br /&gt;
          |- vnet2, MAC: FE:54:00:68:9B:FD&lt;br /&gt;
          |- vnet3, MAC: FE:54:00:D5:49:4C&lt;br /&gt;
          \- vnet4, MAC: FE:54:00:8A:6C:52&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 73 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4080 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      36 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 110 Watts  | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 16.50 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 18.70 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 210 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 37        |&lt;br /&gt;
| CPU2           | ok        | 41        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4560      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     30.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  sharedfs&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:5E:29:1C&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:29:38:3B&lt;br /&gt;
          \- vnet2, MAC: FE:54:00:B0:6C:AA&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 68 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4058 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      35 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.13 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 33        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4920      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 51.0 Minutes    Current Load:    26.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once you see these emails, you can close the monitoring programs by pressing &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot;. When you do, the terminal will return and you will get another email from each node warning you that the alerting system has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 2480 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n01 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 1447 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n02 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to see what AN!CM is doing, it writes its log files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt;. There are many events that are logged which do not trigger emails. Sensors like thermometers, fan tachometers and various voltage and wattage sensors will constantly be shifting. These changes are recorded in this log file, should you ever wish to see how things change over time.&lt;br /&gt;
&lt;br /&gt;
Lets take a quick look at what was written to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.log&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 41 *C -&amp;gt; 42 *C&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 18.70 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 19.80 Watts -&amp;gt; ok, 17.60 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201452 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 52.0 Minutes -&amp;gt; 51.0 Minutes&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4081 mV -&amp;gt; 4079 mV&lt;br /&gt;
1386201487 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 42 *C -&amp;gt; 41 *C&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 20.90 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN1 PSU2&amp;quot; fan speed has change; ok, 6480 RPM -&amp;gt; ok, 6600 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 SYS&amp;quot; fan speed has change; ok, 5280 RPM -&amp;gt; ok, 5340 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN3 SYS&amp;quot; fan speed has change; ok, 4980 RPM -&amp;gt; ok, 5040 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 5220 RPM -&amp;gt; ok, 5280 RPM.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 14.30 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 11 Watts.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN1 SYS&amp;quot; fan speed has change; ok, 4740 RPM -&amp;gt; ok, 4680 RPM.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6360 RPM -&amp;gt; ok, 6240 RPM.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;PSU2 Power&amp;quot; has change; ok, 120 Watts -&amp;gt; ok, 110 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;Total Power&amp;quot; has change; ok, 210 Watts -&amp;gt; ok, 200 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4060 mV -&amp;gt; 4061 mV&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;BATT 3.0V&amp;quot; voltage has change; ok, 3.14 Volts -&amp;gt; ok, 3.13 Volts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 14.30 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 11 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6240 RPM -&amp;gt; ok, 6360 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 4860 RPM -&amp;gt; ok, 4920 RPM.&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;IOH 1.8V&amp;quot; voltage has change; ok, 1.80 Volts -&amp;gt; ok, 1.79 Volts.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shortly, we will look at what alerts that trigger emails look like. For now, we&#039;re ready to enable monitoring!&lt;br /&gt;
&lt;br /&gt;
== Enabling Monitoring ==&lt;br /&gt;
&lt;br /&gt;
Now that we know that monitoring and emailing is working, it is time to enable it.&lt;br /&gt;
&lt;br /&gt;
By design, the monitoring program is designed to exit should it run into any unexpected problems. Obviously, it is quite important that the alert system always run. &lt;br /&gt;
&lt;br /&gt;
The way we ensure this is to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[crontab]]&amp;lt;/span&amp;gt; to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; every five minutes. The first thing that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; does is check to see if it is already running. If so, it simply exits, so the alert system won&#039;t run more than once. Should it crash or be killed for some reason, however, this will ensure that the alert system is back up within five minutes.&lt;br /&gt;
&lt;br /&gt;
So if you find that you suddenly get an email claiming that the monitoring software has started, be sure to check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt; for error messages.&lt;br /&gt;
&lt;br /&gt;
Back to enabling monitoring; &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to also enable two log archival scripts; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_megasas.log.sh&amp;lt;/span&amp;gt;. These prevent the log files generated by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; directly and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file created by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; from growing too big. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; will run once a day and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; archival scripts will run once per month. We already downloaded &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt;, but we still need to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt;. Both will create up to five archived log files, allowing you to review up to five days and five months, respectively. After that, the oldest log files are removed, effectively capping the amount of disk space these logs will use.&lt;br /&gt;
&lt;br /&gt;
Lets download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; and make it executable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:58--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.1 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:59--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.3 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cronbtab -e&amp;lt;/span&amp;gt; to edit the cron table and add three entries for these programs. If you already added &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/archive_an-cm.log.sh&amp;lt;/span&amp;gt;, then simply append the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save and quit. Within five minutes, you should see an email telling you that the monitoring system has started up again.&lt;br /&gt;
&lt;br /&gt;
We&#039;re done!&lt;br /&gt;
&lt;br /&gt;
== We&#039;re Done! or are We? ==&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, ladies and gentlemen. Our cluster is completed! In theory now, any failure in the cluster will result in no lost data and, at worst, no more than a minute or two of downtime.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In theory&amp;quot; just isn&#039;t good enough in clustering though. Time to take &amp;quot;theory&amp;quot; and make it a tested, known fact.&lt;br /&gt;
&lt;br /&gt;
= Testing Server Recovery =&lt;br /&gt;
&lt;br /&gt;
You may have thought that we were done. Indeed, the &#039;&#039;Anvil!&#039;&#039; has been built, but we need to do a final round of testing. Thus far, we&#039;re tested network redundancy and we have tested our fencing devices.&lt;br /&gt;
&lt;br /&gt;
The last round of testing will be to make sure our servers recover properly. We will test the following;&lt;br /&gt;
&lt;br /&gt;
# Controlled migration and node withdrawal.&lt;br /&gt;
## Migrate all servers to one node, then withdraw and power off the other node.&lt;br /&gt;
## Restart the node and rejoin it to the cluster.&lt;br /&gt;
## Repeat for the other node.&lt;br /&gt;
# Controlled, out-of-cluster power-off of a server, ensure it is restarted&lt;br /&gt;
# Crashing nodes.&lt;br /&gt;
## Ensuring crashed node is fenced.&lt;br /&gt;
## Confirm all servers recover on the surviving node.&lt;br /&gt;
## Rejoining the recovered node and migrating servers back.&lt;br /&gt;
## Crashing the other node, ensuring its servers recover.&lt;br /&gt;
&lt;br /&gt;
== Controlled Migration and Node Withdrawal ==&lt;br /&gt;
&lt;br /&gt;
These tests ensure that we will be able to safely pull a node out of service for upgrades, repairs, routine service and OS updates.&lt;br /&gt;
&lt;br /&gt;
We will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;; We will live-migrate all servers over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then power off &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. We will then power &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back up and rejoin it to the cluster. Once both DRBD resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; again, we will live-migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
Once done, we will repeat the process in order to test taking &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; out, then restarting it and putting it back into production. If all goes well, both nodes will be powered off at one point or another and none of the servers should be interrupted.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
As always, the first step is to check what state the cluster is in.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:08:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Remember; It is not uncommon for live migrations to take several minutes to complete. The hypervisor will slow the migration process if it thinks that is needed to avoid negatively affecting performance inside the server. Please be patient!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s a good idea to be running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; from this point forward. It will allow you to monitor the changes as they happen.}}&lt;br /&gt;
&lt;br /&gt;
Before we can withdraw &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll need to live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What is this? An alert!&lt;br /&gt;
&lt;br /&gt;
You should have just gotten two alerts, one from each node, telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; has moved. Lets take a look;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike the long and detailed message from the initial startup, these &amp;quot;state change&amp;quot; emails are much shorter and to the point. It tells you only what has changed, so that you can quickly tell exactly what happened. In this case, we expected this change so there is no need for concern.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s migrate the other servers. You will see another pair of alerts like this after each migration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That should be all of them. Verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:53:54 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now we will stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. We&#039;ll verify that the node is gone by calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; from both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:56:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
We can now update &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s OS or power it off for physical maintenance, repairs or upgrades!&lt;br /&gt;
&lt;br /&gt;
We will power it off now to simulate hardware maintenance.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
poweroff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n01.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 21:57 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for power off NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Load Testing in a Degraded State ===&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is powered off. &lt;br /&gt;
&lt;br /&gt;
This is a great time to load test your servers! &lt;br /&gt;
&lt;br /&gt;
This is an effective simulation of a degraded state. Should you lose a node, you will be forced to run on a single node until repairs can be made. You need to be sure that performance on a single node is good enough to maintain full production during this time. &lt;br /&gt;
&lt;br /&gt;
How you load test your servers will be entirely dependent on what they are and what they do. So there is not much we can do in the scope of this tutorial. Once your load tests are done, proceed to the next section.&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
So you&#039;re load tests are done. Now you&#039;re ready to bring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back online and rejoin it to the cluster.&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent to first verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is truly off, then we will use it to turn it on. We could certainly use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; directly, of course, but it is an excellent opportunity to practice with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Getting status of IPMI:an-c05n01.ipmi...Chassis power = Off&lt;br /&gt;
Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State confirmed. Let&#039;s power it up!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Powering on machine @ IPMI:an-c05n01.ipmi...Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most hardware servers take several minutes to boot, so this is a great time to go make a tea or coffee. Once it&#039;s booted, within five minutes, you should get an alert email telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is up and running. This is an excellent way to know when your break is over.&lt;br /&gt;
&lt;br /&gt;
Once the node is up, log back into and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resource are back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;. Do not proceed until this is the case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:24:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready to migrate the servers back!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; is once again fully redundant and our servers are back on their preferred hosts.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Next up; Withdrawing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. As always, we will check the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:34:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This time, we will live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All servers are off, so now we&#039;ll stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as offline now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:41:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As before, we can now do an OS update or power off the node.&lt;br /&gt;
&lt;br /&gt;
We did our single-node load testing already, so this time we will simply reboot &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to simulate a (very quick) hardware service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n02.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 22:43 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for reboot NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
As before, we&#039;ll verify the current state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Then we&#039;ll watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:47:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:50:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step; Migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;re back into a fully redundant state and our servers are running on their preferred nodes!&lt;br /&gt;
&lt;br /&gt;
== Out-of-Cluster Server Power-off ==&lt;br /&gt;
&lt;br /&gt;
If a server shuts off, for any reason, the cluster will treat it as a failed service and it will recover it by turning it back on. &lt;br /&gt;
&lt;br /&gt;
There is a catch though...&lt;br /&gt;
&lt;br /&gt;
For privacy reasons, there is no way to look inside a server to determine if it has failed. So detecting a failure is restricted to simply seeing it not do anything any more. Some operating systems, like most or all Microsoft operating systems, go into an infinite loop when they [http://en.wikipedia.org/wiki/Blue_Screen_of_Death blue screen]. To the cluster, it simply looks like the server is really really busy, so it is not treated as failed. &lt;br /&gt;
&lt;br /&gt;
So please make sure, if at all possible, to set your servers to reboot on crash. Most modern operating systems do this already, but consult your server operating system&#039;s documentation to verify.&lt;br /&gt;
&lt;br /&gt;
For this test, all we will do is log into a server and turn it off the way you would if it was a bare-iron server. If things work properly, the server should see it as failed and turn it back on within a few seconds.&lt;br /&gt;
&lt;br /&gt;
For this test, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, click on the &amp;quot;Start&amp;quot; icon and then click on &#039;&#039;Shut down&#039;&#039;. We will watch the system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as that is the node hosting the server.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: device vnet1 left promiscuous mode&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: Deleting interface #19 vnet1, fe80::fc54:ff:fe68:9bfd#123, interface stats: received=0, sent=0, dropped=0, active_time=99 secs&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:23 an-c05n01 rgmanager[2770]: status on vm &amp;quot;vm03-win7&amp;quot; returned 1 (generic error)&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Stopping service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 is recovering&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Recovering failed service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: device vnet1 entered promiscuous mode&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
Dec  5 02:10:25 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: Listen normally on 20 vnet1 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:39 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Above we see the hypervisor report that the server shut down at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:17&amp;lt;/span&amp;gt;. The message &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Deleting interface #19 vnet1...&amp;lt;/span&amp;gt;&amp;quot; is the virtual network cable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; being deleted because the server it was &amp;quot;plugged into&amp;quot; was no longer running.&lt;br /&gt;
&lt;br /&gt;
Six seconds later, at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:23&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; realized that the server had failed. If you had been watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, you would have seen the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; server enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failed&amp;lt;/span&amp;gt; state. Moments later, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; began recovering the server by first disabling it, then starting it back up.&lt;br /&gt;
&lt;br /&gt;
Two seconds after that, eight seconds after the unexpected shut down, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; was recovered and running again. Three seconds later, a new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; was created, reconnecting the server to the network. A this point, recovery is complete!&lt;br /&gt;
&lt;br /&gt;
Probably the easiest test so far. Of course, you will want to repeat this test for all of your servers.&lt;br /&gt;
&lt;br /&gt;
== Crashing Nodes; The Ultimate Test ==&lt;br /&gt;
&lt;br /&gt;
Finally, we&#039;ve reaches the ultimate test.&lt;br /&gt;
&lt;br /&gt;
Most people first look at high-availability to protect against crashed bare-iron servers. As we&#039;ve seen, there are many other single-points of failure that we had to address and which we&#039;ve already tested.&lt;br /&gt;
&lt;br /&gt;
In this test, we&#039;re going to have all services and servers running. &lt;br /&gt;
&lt;br /&gt;
We will first crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; by sending a &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; character to the &amp;quot;magic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Magic_SysRq_key SysRq Key]&amp;lt;/span&amp;gt;, as we did when we first tested our fencing configuration. This will cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to instantly [http://en.wikipedia.org/wiki/Kernel_panic kernel panic], crashing the node and halting all the servers running on it. This will simulate the harshest software crash possible on a node.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve recovered from that, we will crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; by cutting the power to it. This will simulate a total destruction of a node. As we saw in our early fence testing, this will cause the [[IPMI]] [[BMC]] under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to also fail, forcing the surviving node to fall back to the [[PDU]] based backup fence method.&lt;br /&gt;
&lt;br /&gt;
These tests will also ensure that your &#039;&#039;Anvil!&#039;&#039; does not suffer from a [[boot storm]] when all of the servers from either node reboot at the same time during recovery. This is a very, very important aspect of this test. Should the servers start, but fail to finish booting and become unresponsive, it is likely that your storage was not fast enough to handle the sudden high read load placed on them during recovery. As bad as this is, it is much better to find out now, &#039;&#039;&#039;before&#039;&#039;&#039; going into production.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=&#039;&#039;Virtual Machine Manager&#039;&#039; will appear to hang when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; until the connection is determined to have failed. To watch the recovery of the servers on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in real time, please disconnect from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.}}&lt;br /&gt;
&lt;br /&gt;
Once we crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we should see the following sequence of events:&lt;br /&gt;
&lt;br /&gt;
* Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will declare &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost and will fence it.&lt;br /&gt;
* An alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will arrive indicating the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All servers that had been running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will boot on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Additional alerts will arrive as the servers are recovered.&lt;br /&gt;
* Within five or ten minutes, we will get an alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; saying that the alert system has started, indicating the node is back.&lt;br /&gt;
&lt;br /&gt;
Before we do this, lets see what is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 11:55:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So this test is going to crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. This is the majority of our servers, so this recovery will tell us if we&#039;re going to have a boot storm or not. If all of them boot without trouble, we will know that our storage is likely fast enough.&lt;br /&gt;
&lt;br /&gt;
Be sure to log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system logs before proceeding.&lt;br /&gt;
&lt;br /&gt;
Ok, let&#039;s do this!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing returned, it&#039;s dead&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 corosync[2546]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 fenced[2613]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fenced[2613]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fence_node[2294]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: new current UUID AC7D34993319CF07:96939998C25B00D5:C667A4D09ADAF91B:C666A4D09ADAF91B&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:06 an-c05n02 rgmanager[2785]: Marking service:storage_n01 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 fence_node[2325]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: new current UUID 20CEE1AD5C066F57:BF89350BA62F87D1:EAA52C899C7C1F8D:EAA42C899C7C1F8D&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Looking at journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replaying journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replayed 259 of 476 blocks&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Found 5 revoke tags&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Journal replayed in 1s&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Done&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm01-win2008 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm03-win7 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm04-win8 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: device vnet3 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm07-rhel6 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm08-sles11 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet4 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 rgmanager[2785]: Service vm:vm01-win2008 started&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 rgmanager[2785]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm07-rhel6 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm04-win8 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm08-sles11 started&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 14 vnet3 fe80::fc54:ff:fe8e:6732 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 15 vnet5 fe80::fc54:ff:fe58:6a9 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 16 vnet6 fe80::fc54:ff:fe8a:6c52 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 17 vnet4 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 18 vnet7 fe80::fc54:ff:fed5:494c UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: peers refreshed&lt;br /&gt;
Dec  5 12:02:19 an-c05n02 kernel: kvm: 3933: cpu0 disabled perfctr wrmsr: 0xc1 data 0xabcd&lt;br /&gt;
Dec  5 12:02:22 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that, in this case, DRBD caught the failure slightly faster than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; did. It initiated a fence via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. Next we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; also call a fence, which succeeded on first try. Shortly after, DRBD recognized the fence succeeded as well. &lt;br /&gt;
&lt;br /&gt;
With the fence actions succeeded, we see DRBD mark the lost resources as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Outdated&amp;lt;/span&amp;gt;, GFS2 reaps lost locks and cleans up the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; filesystem. We also see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; mark &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage as disabled and then begin recovery of the five lost servers. Once they&#039;re booted, the last recovery step is &amp;quot;plugging them in&amp;quot; to the bridge.&lt;br /&gt;
&lt;br /&gt;
Lets look at the alerts we received.&lt;br /&gt;
&lt;br /&gt;
The alert system checks for state changes every 30 seconds. So depending on when the loop fires during the failure and recovery process, you may get a couple alerts. That is what happened in my case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n01.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local, rgmanager	-&amp;gt; Online, Local&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
30 seconds later, the next alert arrives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local	-&amp;gt; Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n01; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service storage_n01; State change!&lt;br /&gt;
  --	-&amp;gt; stopped&lt;br /&gt;
  --	-&amp;gt; (an-c05n01.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm03-win7; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm04-win8; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm07-rhel6; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm08-sles11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first email shows the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. The second email shows the recovery of all the servers. The astute reader will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; showed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. &lt;br /&gt;
&lt;br /&gt;
This is because there is a time between node loss and fence complete where [[DLM]] stops giving out locks. As we mentioned, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; all require DLM locks in order to work. So during a pending fence, these programs will appear to hang, which is by design. Once the fence action succeeds, normal operation resumes. In this case, we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; returned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in the second email alert.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 12:37:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at the timeline, we see that the fault was detected almost immediately at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:01:27&amp;lt;/span&amp;gt;. Recovery is completed at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:02:24&amp;lt;/span&amp;gt;. The total recovery time was 57 seconds.&lt;br /&gt;
&lt;br /&gt;
Not too shabby!&lt;br /&gt;
&lt;br /&gt;
=== Degraded Mode Load Testing ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Load-testing your &#039;&#039;Anvil!&#039;&#039; in a degraded state is just as critical as anything else we&#039;ve done thus far!}}&lt;br /&gt;
&lt;br /&gt;
It is very important that you ensure all of your servers can run well at full load on a single node. All of our work until now is useless if your servers grind during a degraded state.&lt;br /&gt;
&lt;br /&gt;
The two biggest concerns are CPU and storage.&lt;br /&gt;
&lt;br /&gt;
Please be sure to test, as long as needed, all of your applications running at full speed, both CPU and storage. If those tests pass, it&#039;s a good idea to then run synthetic benchmarks to find out just how much load your servers can take on the one node before performance degrades. This will be very useful for predicting when additional resource must be added as you grow.&lt;br /&gt;
&lt;br /&gt;
The actual methods used in this step are dependent entirely on your setup, so no further discussion can be had here.&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; recovers from the fence, it will send out the &amp;quot;I&#039;ve started!&amp;quot; alerts. There might be two emails, depending on the when the alert system started. That was the case in this test. The first alert came up before the bond devices &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; expired. Once that delay passed, a second alert was triggered showing the backup interfaces coming online.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 71 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4077 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      37 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 120 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6600 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 6.60 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 120 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 35        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6600      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4500      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 120.0 Volts -&amp;gt; UPS -&amp;gt; 120.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bond bond0 (Back-Channel Network); Second slave eth3&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond1 (Storage Network); Second slave eth4&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond2 (Internet-Facing Network); Second slave eth5&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lets check the state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 13:04:05 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything looks good, so lets rejoin &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for the DRBD resource to both be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    71.2%            (176592/607108)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   Connected   Primary/Primary  UpToDate/UpToDate      C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a bit...&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to start live-migrating the five servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back to normal.&lt;br /&gt;
&lt;br /&gt;
You should see numerous alert emails showing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; rejoining the cluster and the servers moving back.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Last test!&lt;br /&gt;
&lt;br /&gt;
As mentioned, we&#039;re going to cut the power to this node. We could just pull the power cables out and that would be perfectly fine. Downside to that is that it requires getting up, and who wants to do that?&lt;br /&gt;
&lt;br /&gt;
So we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to call each PDU and turn off outlet #2, which powers &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we saw in our initial round of fence testing, the initial fence attempt using [[IPMI]] will fail. Then the PDUs should be called and the outlets we turned off will be verified as off, then turned back on. &lt;br /&gt;
&lt;br /&gt;
If your server is set to boot when power is restored, or if you have it set to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Last State&amp;lt;/span&amp;gt;&amp;quot;, the server should boot automatically. If it stays off, simply call an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt; action against it using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;. It will be great practice!&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s watch the logs, kill the power, and look at the email alerts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An alert!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Warning! - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN1 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6360 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN1 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN2 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6480 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN2 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;Power Unit&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; ok, 0x02&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x02	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is because we took our time killing the second power supply. The node stayed up long enough for a scan to run and it saw all power lost to its primary PSU, so its fans have died as well as the power itself vanishing. If you&#039;re in earshot on the node, you can probably hear an audible alarm, too.&lt;br /&gt;
&lt;br /&gt;
Lets finish the job.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p02 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:03 an-c05n01 corosync[27890]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 fenced[27962]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 fence_node[19868]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: new current UUID 982B45395AF5322D:AC7D34993319CF07:96949998C25B00D5:96939998C25B00D5&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 fence_node[19898]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: new current UUID 46F3B4E245FCFB01:20CEE1AD5C066F57:BF8A350BA62F87D1:BF89350BA62F87D1&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:27 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replaying journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replayed 3 of 5 blocks&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Found 12 revoke tags&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Journal replayed in 1s&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:libvirtd_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Taking over service vm:vm02-win2012 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm05-freebsd9 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm06-solaris11 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Service vm:vm02-win2012 started&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 rgmanager[28154]: Service vm:vm06-solaris11 started&lt;br /&gt;
Dec  5 18:38:31 an-c05n01 rgmanager[28154]: Service vm:vm05-freebsd9 started&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 16 vnet6 fe80::fc54:ff:feb0:6caa UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 17 vnet7 fe80::fc54:ff:fe29:383b UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 18 vnet5 fe80::fc54:ff:fe5e:291c UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: peers refreshed&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:45 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the log entries are almost the same as we saw when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; was crashed. The main difference is that the first fence attempt failed, as expected.&lt;br /&gt;
&lt;br /&gt;
Lets look at the timeline;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Event&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:02&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD detects the failure and initiates a fence.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:03&amp;lt;/span&amp;gt;&lt;br /&gt;
|Corosync detects the failure, reforms the cluster. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[DLM]] blocks.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:22&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD-called fence succeeds. We do not see the failed IPMI attempt in the log.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:26&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; initiated [[IPMI]] call fails, the [[PDU]]-based fence succeeds.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:27&amp;lt;/span&amp;gt;&lt;br /&gt;
|GFS2 cleans up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:28&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; begins recovery, boots lost servers.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:44&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; interfaces link the recovered servers to the bridge. Recovery is complete.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this case, recovery took 42 seconds, actually faster than the recovery of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This shows the difference in timings to detect losses. Normally, this is a little slower because of the time taken to declare the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPMI&amp;lt;/span&amp;gt; fence method &amp;quot;failed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lets look again at the alerts from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; triggered by the failure of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Half a minute later;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike last time, we didn&#039;t see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. This is because the fence completed, so &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; didn&#039;t block when the monitoring system checked it. Half a minute later, the servers were already recovered so the alert system saw them move rather than recover.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that the servers are indeed back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:56:04 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; boots up, we&#039;ll get the usual &amp;quot;I&#039;m alive!&amp;quot; alert.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 65 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4052 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      41 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 190 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 27        |&lt;br /&gt;
| CPU1           | ok        | 31        |&lt;br /&gt;
| CPU2           | ok        | 36        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4920      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 5100      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN5 SYS       | ok        | 5160      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     33.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s log in and double check the state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:46:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected. Time to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Watch the status of the drbd resources and wait until both are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    36.7%            (391292/612720)K&lt;br /&gt;
...    sync&#039;ed:    7.1%             (653544/699704)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a few...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready. &lt;br /&gt;
&lt;br /&gt;
Verify everything with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
Ready to live-migrate the servers back now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is beautiful.&lt;br /&gt;
&lt;br /&gt;
== Done and Done! ==&lt;br /&gt;
&lt;br /&gt;
That, ladies and gentlemen, is all she wrote!&lt;br /&gt;
&lt;br /&gt;
You should now be safely ready to take your &#039;&#039;Anvil!&#039;&#039; into production at this stage.&lt;br /&gt;
&lt;br /&gt;
Happy Clustering!&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Here are some common problems you might run into.&lt;br /&gt;
&lt;br /&gt;
== SELinux Related Problems ==&lt;br /&gt;
&lt;br /&gt;
SELinux is a double-edged sword. It can certainly protect you, and it is worth having, but it can cut you, too. Here we cover a couple common issues.&lt;br /&gt;
&lt;br /&gt;
=== Password-less SSH doesn&#039;t work, but ~/.ssh/authorized_keys is fine ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve double-checked that you&#039;ve copied your public keys into a target node or server&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; file, it could be that the file&#039;s context is not correct. To check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how the context is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt;? That should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. So we need to update the context now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/authorized_keys&lt;br /&gt;
restorecon -r /root/.ssh/authorized_keys&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to log in to the target machine without a password.&lt;br /&gt;
&lt;br /&gt;
=== Live-Migration fails with &#039;[vm] error: Unable to read from monitor: Connection reset by peer&#039; ===&lt;br /&gt;
&lt;br /&gt;
When trying to migrate a server using the [[AN!CDB|dashboard]], you will see an error like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm01-win2008 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; you will see errors like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8474]: [vm] Migrate vm01-win2008 to an-c05n02.alteeve.ca failed:&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8496]: [vm] error: Unable to read from monitor: Connection reset by peer&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: migrate on vm &amp;quot;vm01-win2008&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: Migration of vm:vm01-win2008 to an-c05n02.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can happen for two reasons;&lt;br /&gt;
&lt;br /&gt;
# You forgot to [[#Populate_known_hosts|populate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt;]].&lt;br /&gt;
# The context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt; is not correct.&lt;br /&gt;
&lt;br /&gt;
It is usually the second case, so that is what we will address here.&lt;br /&gt;
&lt;br /&gt;
Check to see what context is currently set for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The context on this file needs to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. To change it, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts &lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to live-migrate your servers to the node.&lt;br /&gt;
&lt;br /&gt;
=== Attempting to Live Migrate Fails with &#039;Host key verification failed.&#039; ===&lt;br /&gt;
&lt;br /&gt;
Attempting to Live-Migrate a server from one node to another fails with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the system log, we see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migrating vm:vm02-win2008r2 to an-c05n01.alteeve.ca&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10618]: [vm] Migrate vm02-win2008r2 to an-c05n01.alteeve.ca failed:&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10640]: [vm] error: Cannot recv data: Host key verification failed.: Connection reset by peer&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: migrate on vm &amp;quot;vm02-win2008r2&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migration of vm:vm02-win2008r2 to an-c05n01.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has two causes:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[AN!Cluster_Tutorial_2#Populate_known_hosts|/root/.ssh/known_hosts]]&amp;lt;/span class=&amp;quot;code&amp;quot;&amp;gt; isn&#039;t populated.&lt;br /&gt;
# The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[selinux]]&amp;lt;/span&amp;gt; context is not correct.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve confirmed that your &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file is correct, then you can verify you&#039;ve hit an SELinux issue by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 0&amp;lt;/span&amp;gt; on both nodes and trying again. If the migration works, you have an SELinux issue. Re-enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 1&amp;lt;/span&amp;gt; and we&#039;ll fix it.&lt;br /&gt;
&lt;br /&gt;
If we look at the current context:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:admin_home_t:s0 id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We see that it is currently &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;, but &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; is fine. We want all of them to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;, so we&#039;ll have to fix it.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Check both nodes! If one node has a bad context, it&#039;s likely the other node is bad, too. Both nodes will need to be fixed for reliable migration.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa.pub &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa.pub &lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:ssh_home_t:s0  id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:ssh_home_t:s0  id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can try migrating again, and this time it should work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed!&lt;br /&gt;
&lt;br /&gt;
== Other Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These tutorials are not directly related to this one, but might be of use to some.&lt;br /&gt;
&lt;br /&gt;
* [[Anvil! Tutorial 2 - Growing Storage]]&lt;br /&gt;
* [[Configuring Brocade Switches]]&lt;br /&gt;
* [[Anvil! m2 Tutorial]]&lt;br /&gt;
* [[Configuring Network Boot on Fujitsu Primergy]]&lt;br /&gt;
* [[Configuring Hardware RAID Arrays on Fujitsu Primergy]]&lt;br /&gt;
* [[Encrypted Arrays with LSI SafeStore]]&lt;br /&gt;
* [[Configuring an APC AP7900]]&lt;br /&gt;
* [[Configuring APC SmartUPS with AP7930 Network Cards]]&lt;br /&gt;
* [[Anvil! m2 Tutorial - Installing RHEL/Centos]]&lt;br /&gt;
&lt;br /&gt;
== Older Issues From Previous Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These links have older troubleshooting issues that probably aren&#039;t needed anymore, but you never know.&lt;br /&gt;
&lt;br /&gt;
* [[Managing Drive Failures with AN!CDB]]&lt;br /&gt;
* [[2-Node Red Hat KVM Cluster Tutorial - Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
{{footer}}&lt;/div&gt;</summary>
		<author><name>Misko</name></author>
	</entry>
	<entry>
		<id>https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6585</id>
		<title>AN!Cluster Tutorial 2</title>
		<link rel="alternate" type="text/html" href="https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6585"/>
		<updated>2015-01-06T10:37:17Z</updated>

		<summary type="html">&lt;p&gt;Misko: /* Creating Clustered Storage and libvirtd Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{howto_header}}&lt;br /&gt;
&lt;br /&gt;
[[image:RN3-m2_01.jpg|thumb|right|400px|A typical &#039;&#039;Anvil!&#039;&#039; build-out]]&lt;br /&gt;
&lt;br /&gt;
This paper has one goal:&lt;br /&gt;
&lt;br /&gt;
* Create an easy to use, fully redundant platform for virtual servers.&lt;br /&gt;
&lt;br /&gt;
Oh, and do have fun!&lt;br /&gt;
&lt;br /&gt;
= What&#039;s New? =&lt;br /&gt;
&lt;br /&gt;
In the last two years, we&#039;ve learned a lot about how to make an even more solid high-availability platform. We&#039;ve created tools to make monitoring and management of the virtual servers and nodes trivially easy. This updated release of our [[2-Node Red Hat KVM Cluster Tutorial|tutorial]] brings these advances to you!&lt;br /&gt;
&lt;br /&gt;
* Many refinements to the cluster stack that protect against corner cases seen over the last two years.&lt;br /&gt;
* Configuration naming convention changes to support the new [[AN!CDB]] dashboard.&lt;br /&gt;
* Addition of the [[AN!CM]] monitoring and alert system.&lt;br /&gt;
* Security improved; [[selinux]] and [[iptables]] now enabled and used.&lt;br /&gt;
&lt;br /&gt;
== A Note on Terminology ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use the following terms:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Anvil!&#039;&#039;: This is our name for the HA platform as a whole.&lt;br /&gt;
* &#039;&#039;Nodes&#039;&#039;: The physical hardware servers used as members in the cluster and which host the virtual servers.&lt;br /&gt;
* &#039;&#039;Servers&#039;&#039;: The virtual servers themselves. &lt;br /&gt;
* &#039;&#039;Compute Pack&#039;&#039;: This describes a pair of nodes that work together to power highly-available servers.&lt;br /&gt;
* &#039;&#039;Foundation Pack&#039;&#039;: This describes the switches, [[PDU]]s and [[UPS]]es used to power and connect the nodes.&lt;br /&gt;
* &#039;&#039;Monitor Pack&#039;&#039;: This describes the equipment used for the [[AN!CDB]] management dashboard.&lt;br /&gt;
&lt;br /&gt;
== Why Should I Follow This (Lengthy) Tutorial? ==&lt;br /&gt;
&lt;br /&gt;
Following this tutorial is not the lightest undertaking. It is designed to teach you all the inner details of building an HA platform for virtual servers. When finished, you will have a detailed and deep understanding of what it takes to build a fully redundant, mostly fault-tolerant high-availability platform. Though lengthy, it is very worthwhile if you want to understand high-availability.&lt;br /&gt;
&lt;br /&gt;
In either case, when finished, you will have the following benefits:&lt;br /&gt;
* Totally open source. Everything. This guide and all software used is open!&lt;br /&gt;
* You can host servers running almost any operating system. &lt;br /&gt;
* The HA platform requires no access to the servers and no special software needs to be installed. Your users may well never know that they&#039;re on a virtual machine.&lt;br /&gt;
* Your servers will operate just like servers installed on bare-iron machines. No special configuration is required. The high-availability components will be hidden behind the scenes.&lt;br /&gt;
* The worst failures of core components, such as a mainboard failure in a node, will cause an outage of roughly 30 to 90 seconds.&lt;br /&gt;
* Storage is synchronously replicated, guaranteeing that the total destruction of a node will cause no more data loss than a traditional server losing power.&lt;br /&gt;
* Storage is replicated without the need for a [[SAN]], reducing cost and providing total storage redundancy.&lt;br /&gt;
* Live-migration of servers enables upgrading and node maintenance without downtime. No more weekend maintenance!&lt;br /&gt;
* AN!CM; The &amp;quot;AN! Cluster Monitor&amp;quot;, watches the HA stack is continually. It sends alerts for many events from predictive hardware failure to simple live migration in a single application.&lt;br /&gt;
* Most failures are fault-tolerant and will cause no interruption in services at all.&lt;br /&gt;
&lt;br /&gt;
Ask your local VMware or Microsoft Hyper-V sales person what they&#039;d charge for all this. :)&lt;br /&gt;
&lt;br /&gt;
== High-Level Explanation of How HA Clustering Works ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is an adaptation of [http://lists.linux-ha.org/pipermail/linux-ha/2013-October/047633.html this post] to the [http://lists.linux-ha.org/mailman/listinfo/linux-ha Linux-HA] mailing list. If you find this section hard to follow, please don&#039;t worry. Each component is explained in the &amp;quot;Concepts&amp;quot; section below.}}&lt;br /&gt;
&lt;br /&gt;
Before digging into the details, it might help to start with a high-level explanation of how HA clustering works.&lt;br /&gt;
&lt;br /&gt;
[[Corosync]] uses the [[totem]] protocol for &amp;quot;heartbeat&amp;quot;-like monitoring of the other node&#039;s health. A token is passed around to each node, the node does some work (like acknowledge old messages, send new ones), and then it passes the token on to the next node. This goes around and around all the time. Should a node not pass its token on after a short time-out period, the token is declared lost, an error count goes up and a new token is sent. If too many tokens are lost in a row, the node is declared lost.&lt;br /&gt;
&lt;br /&gt;
Once the node is declared lost, the remaining nodes reform a new cluster. If enough nodes are left to form [[quorum]] (simple majority), then the new cluster will continue to provide services. In two-node clusters, like the ones we&#039;re building here, quorum is disabled so each node can work on its own.&lt;br /&gt;
&lt;br /&gt;
Corosync itself only cares about who is a cluster member and making sure all members get all [[CPG|messages]]. What happens after the cluster reforms is up to the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, and the resource group manager, [[rgmanager]].&lt;br /&gt;
&lt;br /&gt;
The first thing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; does after being notified that a node was lost is initiate a [[fence]] against the lost node. This is a process where the lost node is powered off by the healthy node (power fencing), or cut off from the network/storage (fabric fencing). In either case, the idea is to make sure that the lost node is in a known state. If this is skipped, the node could recover later and try to provide cluster services, not having realized that it was removed from the cluster. This could cause problems from confusing switches to corrupting data.&lt;br /&gt;
&lt;br /&gt;
When rgmanager is told that membership has changed because a node died, it looks to see what services might have been lost. Once it knows what was lost, it looks at the rules it&#039;s been given and decides what to do. These rules are defined in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|cluster.conf]]&#039;s&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element. We&#039;ll go into detail on this later.&lt;br /&gt;
&lt;br /&gt;
In two-node clusters, there is also a chance of a &amp;quot;split-brain&amp;quot;. Quorum has to be disabled, so it is possible for both nodes to think the other node is dead and both try to provide the same cluster services. By using fencing, after the nodes break from one another (which could happen with a network failure, for example), neither node will offer services until one of them has fenced the other. The faster node will win and the slower node will shut down (or be isolated). The survivor can then run services safely without risking a split-brain.&lt;br /&gt;
&lt;br /&gt;
Once the dead/slower node has been fenced, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; then decides what to do with the services that had been running on the lost node. Generally, this means restarting the services locally that had been running on the dead node. The details of this are decided by you when you configure the resources in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. As we will see with each node&#039;s local storage service, the service is not recovered but instead left stopped.&lt;br /&gt;
&lt;br /&gt;
= The Task Ahead =&lt;br /&gt;
&lt;br /&gt;
Before we start, let&#039;s take a few minutes to discuss clustering and its complexities.&lt;br /&gt;
&lt;br /&gt;
== A Note on Patience ==&lt;br /&gt;
&lt;br /&gt;
When someone wants to become a pilot, they can&#039;t jump into a plane and try to take off. It&#039;s not that flying is inherently hard, but it requires a foundation of understanding. Clustering is the same in this regard; there are many different pieces that have to work together just to get off the ground. &lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;must&#039;&#039;&#039; have patience.&lt;br /&gt;
&lt;br /&gt;
Like a pilot on their first flight, seeing a cluster come to life is a fantastic experience. Don&#039;t rush it! Do your homework and you&#039;ll be on your way before you know it.&lt;br /&gt;
&lt;br /&gt;
Coming back to earth:&lt;br /&gt;
&lt;br /&gt;
Many technologies can be learned by creating a very simple base and then building on it. The classic &amp;quot;Hello, World!&amp;quot; script created when first learning a programming language is an example of this. Unfortunately, there is no real analogue to this in clustering. Even the most basic cluster requires several pieces be in place and working well together. If you try to rush, by ignoring pieces you think are not important, you will almost certainly waste time. A good example is setting aside [[fencing]], thinking that your test cluster&#039;s data isn&#039;t important. The cluster software has no concept of &amp;quot;test&amp;quot;. It treats everything as critical all the time and &#039;&#039;will&#039;&#039; shut down if anything goes wrong.&lt;br /&gt;
&lt;br /&gt;
Take your time, work through these steps, and you will have the foundation cluster sooner than you realize. Clustering is fun &#039;&#039;&#039;because&#039;&#039;&#039; it is a challenge.&lt;br /&gt;
&lt;br /&gt;
== Technologies We Will Use ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Red Hat Enterprise Linux 6&#039;&#039; ([[EL6]]); You can use  a derivative like [[CentOS]] v6. Specifically, we&#039;re using 6.5.&lt;br /&gt;
* &#039;&#039;Red Hat Cluster Services&#039;&#039; &amp;quot;Stable&amp;quot; version 3. This describes the following core components:&lt;br /&gt;
** &#039;&#039;Corosync&#039;&#039;; Provides cluster communications using the [[totem]] protocol.&lt;br /&gt;
** &#039;&#039;Cluster Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[cman]]&amp;lt;/span&amp;gt;); Manages the starting, stopping and managing of the cluster.&lt;br /&gt;
** &#039;&#039;Resource Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[rgmanager]]&amp;lt;/span&amp;gt;); Manages cluster resources and services. Handles service recovery during failures.&lt;br /&gt;
** &#039;&#039;Clustered Logical Volume Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[clvm]]&amp;lt;/span&amp;gt;); Cluster-aware (disk) volume manager. Backs [[GFS2]] [[filesystem]]s and [[KVM]] virtual machines.&lt;br /&gt;
** &#039;&#039;Global File System&#039;&#039; version 2 (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[gfs2]]&amp;lt;/span&amp;gt;); Cluster-aware, concurrently mountable file system.&lt;br /&gt;
* &#039;&#039;Distributed Redundant Block Device&#039;&#039; ([[DRBD]]); Keeps shared data synchronized across cluster nodes.&lt;br /&gt;
* &#039;&#039;KVM&#039;&#039;; [[Hypervisor]] that controls and supports virtual machines.&lt;br /&gt;
* Alteeve&#039;s Niche! Cluster Dashboard and Cluster Monitor&lt;br /&gt;
&lt;br /&gt;
== A Note on Hardware ==&lt;br /&gt;
&lt;br /&gt;
[[Image:RX300-S7_close-up_01.jpg|thumb|right|500px|RX300 S7]]&lt;br /&gt;
&lt;br /&gt;
Another new change is that Alteeve&#039;s Niche!, after years of experimenting with various hardware, has partnered with [[Fujitsu]]. We chose them because of the unparalleled quality of their equipment. &lt;br /&gt;
&lt;br /&gt;
This tutorial can be used on any manufacturer&#039;s hardware, provided it meets the minimum requirements listed below. That said, we strongly recommend readers give Fujitsu&#039;s [http://www.fujitsu.com/fts/products/computing/servers/primergy/rack/ RX-line] of servers a close look. We do not get a discount for this recommendation, we genuinely love the quality of their gear. The only technical argument for using Fujitsu hardware is that we do all our cluster stack monitoring software development on Fujitsu RX200 and RX300 servers, so we can say with confidence that the AN! software components will work well on their kit.&lt;br /&gt;
&lt;br /&gt;
If you use any other hardware vendor and run into any trouble, please don&#039;t hesitate to [[Support|contact us]]. We want to make sure that our HA stack works on as many systems as possible and will be happy to help out. Of course, all Alteeve code is open source, so [https://github.com/digimer/an-cdb contributions] are always welcome, too!&lt;br /&gt;
&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
&lt;br /&gt;
The goal of this tutorial is to help you build an HA platform with zero single points of failure. In order to do this, certain minimum technical requirements must be met.&lt;br /&gt;
&lt;br /&gt;
Bare minimum requirements:&lt;br /&gt;
&lt;br /&gt;
* Two servers with the following;&lt;br /&gt;
** A CPU with [https://en.wikipedia.org/wiki/Hardware-assisted_virtualization hardware-accelerated virtualization]&lt;br /&gt;
** Redundant power supplies&lt;br /&gt;
** [[IPMI]] or vendor-specific [https://en.wikipedia.org/wiki/Integrated_Remote_Management_Controller out-of-band management], like Fujitsu&#039;s iRMC, HP&#039;s iLO, Dell&#039;s iDRAC, etc&lt;br /&gt;
** Six network interfaces, 1 [[Gbit]] or faster (yes, six!)&lt;br /&gt;
** 2 [[GiB]] of RAM and 44.5 GiB of storage for the host operating system, plus sufficient RAM and storage for your VMs&lt;br /&gt;
* Two switched [[PDU]]s; APC-brand recommended but any with a supported [[fence agent]] is fine&lt;br /&gt;
* Two network switches&lt;br /&gt;
&lt;br /&gt;
== Recommended Hardware; A Little More Detail ==&lt;br /&gt;
&lt;br /&gt;
The previous section covered the bare-minimum system requirements for following this tutorial. If you are looking to build an &#039;&#039;Anvil!&#039;&#039; for production, we need to discuss important considerations for selecting hardware.&lt;br /&gt;
&lt;br /&gt;
=== The Most Important Consideration - Storage ===&lt;br /&gt;
&lt;br /&gt;
There is probably no single consideration more important than choosing the storage you will use.&lt;br /&gt;
&lt;br /&gt;
In our years of building &#039;&#039;Anvil!&#039;&#039; HA platforms, we&#039;ve found no single issue more important than storage latency. This is true for all virtualized environments, in fact.&lt;br /&gt;
&lt;br /&gt;
The problem is this:&lt;br /&gt;
&lt;br /&gt;
Multiple servers on shared storage can cause particularly random storage access. Traditional hard drives have disks with mechanical read/write heads on the ends of arms that sweep back and forth across the disk surfaces. These platters are broken up into &amp;quot;tracks&amp;quot; and each track is itself cut up into &amp;quot;sectors&amp;quot;. When a server needs to read or write data, the hard drive needs to sweep the arm over the track it wants and then wait there for the sector it wants to pass underneath.&lt;br /&gt;
&lt;br /&gt;
This time taken to get the read/write head onto the track and then wait for the sector to pass underneath is called &amp;quot;seek latency&amp;quot;. How long this latency actually is depends on a few things:&lt;br /&gt;
&lt;br /&gt;
* How fast are the platters rotating? The faster the platter speed, the less time it takes for a sector to pass under the read/write head.&lt;br /&gt;
* How fast the read/write arms can move and how far do they have to travel between tracks? Highly random read/write requests can cause a lot of head travel and increase seek time.&lt;br /&gt;
* How many read/write requests ([[IOPS]]) can your storage handle? If your storage can not process the incoming read/write requests fast enough, your storage can slow down or stall entirely.&lt;br /&gt;
&lt;br /&gt;
When many people think about hard drives, they generally worry about maximum write speeds. For environments with many virtual servers, this is actually far less important than it might seem. Reducing latency to ensure that read/write requests don&#039;t back up is far more important. This is measured as the storage&#039;s [[IOPS]] performance. If too many requests back up in the cache, storage performance can collapse or stall out entirely. &lt;br /&gt;
&lt;br /&gt;
This is particularly problematic when multiple servers try to boot at the same time. If, for example, a node with multiple servers dies, the surviving node will try to start the lost servers at nearly the same time. This causes a sudden dramatic rise in read requests and can cause all servers to hang entirely, a condition called a &amp;quot;boot storm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, this latency problem can be easily dealt with in one of three ways;&lt;br /&gt;
&lt;br /&gt;
# Use solid-state drives. These have no moving parts, so there is less penalty for highly random read/write requests.&lt;br /&gt;
# Use fast platter drives and proper [[RAID]] controllers with [[write-back]] caching.&lt;br /&gt;
# Isolate each server onto dedicated platter drives.&lt;br /&gt;
&lt;br /&gt;
Each of these solutions have benefits and downsides;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;amp;nbsp;&lt;br /&gt;
!Pro&lt;br /&gt;
!Con&lt;br /&gt;
|-&lt;br /&gt;
|Fast drives + [[Write-back caching]]&lt;br /&gt;
|15,000rpm SAS drives are extremely reliable and the high rotation speeds minimize latency caused by waiting for sectors to pass under the read/write heads. Using multiple drives in [[RAID]] [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_5|level 5]] or [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_6|level 6]] breaks up reads and writes into smaller pieces, allowing requests to be serviced quickly and to help keep the read/write buffer empty. Write-back caching allows RAM-like write speeds and the ability to re-order disk access to minimize head movement.&lt;br /&gt;
|The main con is the number of disks needed to get effective performance gains from [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|striping]]. Alteeve always uses a minimum of six disks, but many entry-level servers support a maximum of 4 drives. You need to account for the number of disks you plan to use when selecting your hardware.&lt;br /&gt;
|-&lt;br /&gt;
|SSDs&lt;br /&gt;
|They have no moving parts, so read and write requests do not have to wait for mechanical movements to happen, drastically reducing latency. The minimum number of drives for SSD-based configuration is two.&lt;br /&gt;
|Solid state drives use [[NAND]] flash, which can only be written to a finite number of times. All drives in our &#039;&#039;Anvil!&#039;&#039; will be written to roughly the same amount, so hitting this write-limit could mean that all drives in both nodes would fail at nearly the same time. Avoiding this requires careful monitoring of the drives and replacing them before their write limits are hit.&lt;br /&gt;
{{note|1=Enterprise grade SSDs are designed to handle highly random, multi-threaded workloads and come at a significant cost. Consumer-grade SSDs are designed principally for single threaded, large accesses and do not offer the same benefits.}}&lt;br /&gt;
|-&lt;br /&gt;
|Isolated Storage&lt;br /&gt;
|Dedicating hard drives to virtual servers avoids the highly random read/write issues found when multiple servers share the same storage. This allows for the safe use of cheap, inexpensive hard drives. This also means that dedicated hardware RAID controllers with battery-backed cache are not needed. This makes it possible to save a good amount of money in the hardware design.&lt;br /&gt;
|The obvious down-side to isolated storage is that you significantly limit the number of servers you can host on your &#039;&#039;Anvil!&#039;&#039;. If you only need to support one or two servers, this should not be an issue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last piece to consider is the interface of the drives used, be they SSDs or traditional HDDs. The two common interface types are [[SATA]] and [[SAS]]. &lt;br /&gt;
&lt;br /&gt;
* SATA HDD drives generally have a platter speed of 7,200rpm. The SATA interface has limited instruction set and provides minimal health reporting. These are &amp;quot;consumer&amp;quot; grade devices that are far less expensive, and far less reliable, than SAS drives.&lt;br /&gt;
* SAS drives are generally aimed at the enterprise environment and are built to much higher quality standards. SAS HDDs have rotational speeds of up to 15,000rpm and can handle far more read/write operations per second. Enterprise SSDs using the SAS interface are also much more reliable than their commercial counterpart. The main downside to SAS drives is their cost.  &lt;br /&gt;
&lt;br /&gt;
In all production environments, we strongly, strongly recommend SAS-connected drives. For non-production environments, SATA drives are fine.&lt;br /&gt;
&lt;br /&gt;
==== Extra Security - LSI SafeStore ====&lt;br /&gt;
&lt;br /&gt;
If security is a particular concern of yours, then you can look at using [https://en.wikipedia.org/wiki/Hardware-based_full_disk_encryption self-encrypting] hard drives along with LSI&#039;s [[LSI SafeStore|SafeStore]] option. An example hard drive, which we&#039;ve tested and validated, would be the Seagate [http://www.seagate.com/internal-hard-drives/enterprise-hard-drives/hdd/enterprise-performance-10K-hdd/ ST1800MM0038] drives. In general, if the drive advertises &amp;quot;[http://www.seagate.com/tech-insights/protect-data-with-seagate-secure-self-encrypting-drives-master-ti/ SED]&amp;quot; support, it should work fine.&lt;br /&gt;
&lt;br /&gt;
The provides the ability to:&lt;br /&gt;
* Encrypt all data with [https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES-256] grade encryption without a performance hit.&lt;br /&gt;
* Require a pass phrase on boot to decrypt the server&#039;s data.&lt;br /&gt;
* Protect the contents of the drives while &amp;quot;at rest&amp;quot; (ie: while being shipped somewhere).&lt;br /&gt;
* Execute a [https://github.com/digimer/striker/blob/master/tools/anvil-self-destruct self-destruct] sequence.&lt;br /&gt;
&lt;br /&gt;
Obviously, most users won&#039;t need this, but it might be useful to some users in sensitive environments like embassies in less than friendly host countries.&lt;br /&gt;
&lt;br /&gt;
=== RAM - Preparing for Degradation ===&lt;br /&gt;
&lt;br /&gt;
RAM is a far simpler topic than storage, thankfully. Here, all you need to do is add up how much RAM you plan to assign to servers, add at least 2 [[GiB]] for the host, and then install that much memory in both of your nodes. &lt;br /&gt;
&lt;br /&gt;
In production, there are two technologies you will want to consider;&lt;br /&gt;
&lt;br /&gt;
* [[ECC]], error-correcting code, provide the ability for RAM to recover from single-[[bit]] errors. If you are familiar with how [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|parity]] in RAID arrays work, ECC in RAM is the same idea. This is often included in server-class hardware by default. It is highly recommended.&lt;br /&gt;
* [http://www.fujitsu.com/global/services/computing/server/sparcenterprise/technology/availability/memory.html Memory Mirroring] is, continuing our storage comparison, [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] for RAM. All writes to memory go to two different chips. Should one fail, the contents of the RAM can still be read from the surviving module.&lt;br /&gt;
&lt;br /&gt;
=== Never Over-Provision! ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Over-provisioning&amp;quot;, also called &amp;quot;[https://en.wikipedia.org/wiki/Thin_provisioning thin provisioning]&amp;quot; is a concept made popular in many &amp;quot;cloud&amp;quot; technologies. It is a concept that has almost no place in HA environments.&lt;br /&gt;
&lt;br /&gt;
A common example is creating virtual disks of a given apparent size, but which only pull space from real storage as needed. So if you created a &amp;quot;thin&amp;quot; virtual disk that was 80 [[GiB]] large, but only 20 GiB worth of data was used, only 20 GiB from the real storage would be used. &lt;br /&gt;
&lt;br /&gt;
In essence; Over-provisioning is where you allocate more resources to servers than the nodes can actually provide, banking on the hopes that most servers will not use all of the resources allocated to them. The danger here, and the reason it has almost no place in HA, is that if the servers collectively use more resources than the nodes can provide, something is going to crash.&lt;br /&gt;
&lt;br /&gt;
=== CPU Cores - Possibly Acceptable Over-Provisioning ===&lt;br /&gt;
&lt;br /&gt;
Over provisioning of RAM and storage is never acceptable in an HA environment, as mentioned. Over-allocating CPU cores is possibly acceptable though.&lt;br /&gt;
&lt;br /&gt;
When selecting which CPUs to use in your nodes, the number of cores and the speed of the cores will determine how much computational horse-power you have to allocate to your servers. The main considerations are:&lt;br /&gt;
&lt;br /&gt;
* Core speed; Any given &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; can be processed by a single CPU core at a time. The faster the given core is, the faster it can process any given request. Many applications do not support [https://en.wikipedia.org/wiki/Thread_%28computing%29#Multithreading multithreading], meaning that the only way to improve performance is to use faster cores, not more cores.&lt;br /&gt;
* Core count; Some applications support breaking up jobs into many threads, and passing them to multiple CPU cores at the same time for simultaneous processing. This way, the application feels faster to users because each CPU has to do less work to get a job done. Another benefit of multiple cores is that if one application consumes the processing power of a single core, other cores remain available for other applications, preventing processor congestion.&lt;br /&gt;
&lt;br /&gt;
In processing, each CPU &amp;quot;[https://en.wikipedia.org/wiki/Multi-core_processor core]&amp;quot; can handle one program &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; at a time. Since the earliest days of [https://en.wikipedia.org/wiki/Multitasking multitasking], operating systems have been able to handle threads waiting for a CPU resource to free up. So the risk of over-provisioning CPUs is restricted to performance issues only.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re building an &#039;&#039;Anvil!&#039;&#039; to support multiple servers and it&#039;s important that, no matter how busy the other servers are, the performance of each server can not degrade, then you need to be sure you have as many real CPU cores as you plan to assign to servers.&lt;br /&gt;
&lt;br /&gt;
So for example, if you plan to have three servers and you plan to allocate each server four virtual CPU cores, you need a minimum of 13 real CPU cores (3 servers x 4 cores each plus at least one core for the node). In this scenario, you will want to choose servers with dual 8-core CPUs, for a total of 16 available real CPU cores. You may choose to buy two 6-core CPUs, for a total of 12 real cores, but you risk congestion still. If all three servers fully utilize their four cores at the same time, the host OS will be left with no available core for its software, which manages the HA stack.&lt;br /&gt;
&lt;br /&gt;
In many cases, however, risking a performance loss under periods of high CPU load is acceptable. In these cases, allocating more virtual cores than you have real cores is fine. Should the load of the servers climb to a point where all real cores are under 100% utilization, then some applications will slow down as they wait for their turn in the CPU.&lt;br /&gt;
&lt;br /&gt;
In the end, the decision whether to over-provision CPU cores or not, and if so by how much, is up to you, the reader. Remember to consider balancing out faster cores with the number of cores. If your expected load will be short bursts of computationally intense jobs, then few-but-faster cores may be the best solution.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Hyper-Threading ====&lt;br /&gt;
&lt;br /&gt;
Intel&#039;s [https://en.wikipedia.org/wiki/Hyper-threading hyper-threading] technology can make a CPU appear to the OS to have twice as many real cores than it actually has. For example, a CPU listed as &amp;quot;4c/8t&amp;quot; (four cores, eight threads) will appear to the node as an 8-core CPU. In fact, you only have four cores and the additional four cores are emulated attempts to make more efficient use of the processing of each core. &lt;br /&gt;
&lt;br /&gt;
Simply put, the idea behind this technology is to &amp;quot;slip in&amp;quot; a second thread when the CPU would otherwise be idle. For example, if the CPU core has to wait for memory to be fetched for the currently active thread, instead of sitting idle, a thread in the second core will be worked on. &lt;br /&gt;
&lt;br /&gt;
How much benefit this gives you in the real world is debatable and highly depended on your applications. For the purposes of HA, it&#039;s recommended to not count the &amp;quot;HT cores&amp;quot; as real cores. That is to say, when calculating load, treat &amp;quot;4c/8t&amp;quot; CPUs as a 4-core CPUs.&lt;br /&gt;
&lt;br /&gt;
=== Six Network Interfaces, Seriously? ===&lt;br /&gt;
&lt;br /&gt;
Yes, seriously.&lt;br /&gt;
&lt;br /&gt;
Obviously, you can put everything on a single network card and your HA software will work, but it would not be advised.&lt;br /&gt;
&lt;br /&gt;
We will go into the network configuration at length later on. For now, here&#039;s an overview:&lt;br /&gt;
&lt;br /&gt;
* Each network needs two links in order to be fault-tolerant. One link will go to the first network switch and the second link will go to the second network switch. This way, the failure of a network cable, port or switch will not interrupt traffic.&lt;br /&gt;
* There are three main networks in an &#039;&#039;Anvil!&#039;&#039;;&lt;br /&gt;
** Back-Channel Network; This is used by the cluster stack and is sensitive to latency. Delaying traffic on this network can cause the nodes to &amp;quot;partition&amp;quot;, breaking the cluster stack.&lt;br /&gt;
** Storage Network; All disk writes will travel over this network. As such, it is easy to saturate this network. Sharing this traffic with other services would mean that it&#039;s very possible to significantly impact network performance under high disk write loads. For this reason, it is isolated.&lt;br /&gt;
** Internet-Facing Network; This network carries traffic to and from your servers. By isolating this network, users of your servers will never experience performance loss during storage or cluster high loads. Likewise, if your users place a high load on this network, it will not impact the ability of the &#039;&#039;Anvil!&#039;&#039; to function properly. It also isolates untrusted network traffic.&lt;br /&gt;
&lt;br /&gt;
So, three networks, each using two links for redundancy, means that we need six network interfaces. It is strongly recommended that you use three separate dual-port network cards. Using a single network card, as we will discuss in detail later, leaves you vulnerable to losing entire networks should the controller fail.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Dedicated IPMI Interfaces ====&lt;br /&gt;
&lt;br /&gt;
Some server manufacturers provide access to [[IPMI]] using the same physical interface as one of the on-board network cards. Usually these companies provide optional upgrades to break the IPMI connection out to a dedicated network connector.&lt;br /&gt;
&lt;br /&gt;
Whenever possible, it is recommended that you go with a dedicated IPMI connection.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve found that it rarely, if ever, is possible for a node to talk to its own network interface using a shared physical port. This is not strictly a problem, but it can certainly make testing and diagnostics easier when the node can ping and query its own IPMI interface over the network.&lt;br /&gt;
&lt;br /&gt;
=== Network Switches ===&lt;br /&gt;
&lt;br /&gt;
The ideal switches to use in HA clusters are [https://en.wikipedia.org/wiki/Stackable_switch stackable] and [https://en.wikipedia.org/wiki/Managed_switch managed] switches in pairs. At the very least, a pair of switches that support [https://en.wikipedia.org/wiki/Virtual_LAN VLANs] is recommended. None of this is strictly required, but here are the reasons they&#039;re recommended:&lt;br /&gt;
&lt;br /&gt;
* VLAN allows for totally isolating the [[BCN]], [[SN]] and [[IFN]] traffic. This adds security and reduces broadcast traffic.&lt;br /&gt;
* Managed switches provide a unified interface for configuring both switches at the same time. This drastically simplifies complex configurations, like setting up VLANs that span the physical switches.&lt;br /&gt;
* Stacking provides a link between the two switches that effectively makes them work like one. Generally, the bandwidth available in the stack cable is much higher than the bandwidth of individual ports. This provides a high-speed link for all three VLANs in one cable and it allows for multiple links to fail without risking performance degradation. We&#039;ll talk more about this later.&lt;br /&gt;
&lt;br /&gt;
Beyond these suggested features, there are a few other things to consider when choosing switches:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!Consideration&lt;br /&gt;
|-&lt;br /&gt;
|[https://en.wikipedia.org/wiki/Maximum_transmission_unit MTU] size&lt;br /&gt;
|&lt;br /&gt;
# The default packet size on a network is 1500 [[bytes]]. If you build your VLANs in software, you need to account for the extra size needed for the VLAN header. If your switch supports &amp;quot;[https://en.wikipedia.org/wiki/Jumbo_Frames Jumbo Frames]&amp;quot;, then there should be no problem. However, some cheap switches do not support jumbo frames, requiring you to reduce the MTU size value for the interfaces on your nodes.&lt;br /&gt;
# If you have particularly large chunks of data to transmit, you may want to enable the largest MTU possible. This maximum value is determined by the smallest MTU in your network equipment. If you have nice network cards that support traditional 9 [[KiB]] MTU, but you have a cheap switch that supports a small jumbo frame, say 4 KiB, your effective MTU is 4 [[KiB]].&lt;br /&gt;
|-&lt;br /&gt;
|Packets Per Second&lt;br /&gt;
|This is a measure of how many packets can be routed per second, and generally is a reflection of the switch&#039;s processing power and memory. Cheaper switches will not have the ability to route a high number of packets at the same time, potentially causing congestion.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multicast]] Groups&lt;br /&gt;
|Some fancy switches, like some Cisco hardware, don&#039;t maintain multicast groups persistently. The cluster software uses multicast for communication, so if your switch drops a multicast group, it will cause your cluster to partition. If you have a managed switch, ensure that persistent multicast groups are enabled. We&#039;ll talk more about this later.&lt;br /&gt;
|-&lt;br /&gt;
|Port speed and count versus Internal Fabric Bandwidth&lt;br /&gt;
|A switch that has, say, 48 [[Gbps]] ports may not be able to route 48 Gbps. This is a problem similar to over-provisioning we discussed above. If an inexpensive 48 port switch has an internal switch fabric of only 20 Gbps, then it can handle only up to 20 saturated ports at a time. Be sure to review the internal fabric capacity and make sure it&#039;s high enough to handle all connected interfaces running full speed. Note, of course, that only one link in a given [[network bonding|bond]] will be active at a time.&lt;br /&gt;
|-&lt;br /&gt;
|Uplink speed&lt;br /&gt;
|If you have a gigabit switch and you simply link the ports between the two switches, the link speed will be limited to 1 gigabit. Normally, all traffic will be kept on one switch, so this is fine. If a single link fails over to the backup switch, then its traffic will bounce up via the uplink cable to the main switch at full speed. However, if a second link fails, both will be sharing the single gigabit uplink, so there is a risk of congestion on the link. If you can&#039;t get stacked switches, which generally have 10 Gbps speeds or higher, then look for switches with 10 Gbps dedicated uplink ports and use those for uplinks.&lt;br /&gt;
|-&lt;br /&gt;
|Uplinks and VLANs&lt;br /&gt;
|When using normal ports for uplinks with VLANs defined in the switch, each uplink port will be restricted to the VLAN it is a member of. In this case, you will need one uplink cable per VLAN.&lt;br /&gt;
|-&lt;br /&gt;
|Port [https://en.wikipedia.org/wiki/Link_aggregation Trunking]&lt;br /&gt;
|If your existing network supports it, choosing a switch with port trunking provides a backup link from the foundation pack switches to the main network. This extends the network redundancy out to the rest of your network. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are numerous other valid considerations when choosing network switches for your &#039;&#039;Anvil!&#039;&#039;. These are the most prescient considerations, though.&lt;br /&gt;
&lt;br /&gt;
=== Why Switched PDUs? ===&lt;br /&gt;
&lt;br /&gt;
We will discuss this in detail later on, but in short, when a node stops responding, we can not simply assume that it is dead. To do so would be to risk a &amp;quot;[[split-brain]]&amp;quot; condition which can lead to data divergence, data loss and data corruption.&lt;br /&gt;
&lt;br /&gt;
To deal with this, we need a mechanism of putting a node that is in an unknown state into a known state. A process called &amp;quot;[[fencing]]&amp;quot;. Many people who build HA platforms use the [[IPMI]] interface for this purpose, as will we. The idea here is that, when a node stops responding, the surviving node connects to the lost node&#039;s [[IPMI]] interface and forces the machine to power off. The IPMI [[BMC]] is, effectively, a little computer inside the main computer, so it will work regardless of what state the node itself is in.&lt;br /&gt;
&lt;br /&gt;
Once the node has been confirmed to be off, the services that had been running on it can be restarted on the remaining good node, safe in knowing that the lost peer is not also hosting these services. In our case, these &amp;quot;services&amp;quot; are the shared storage and the virtual servers.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this though. Actually, two.&lt;br /&gt;
&lt;br /&gt;
# The IPMI draws its power from the same power source as the server itself. If the host node loses power entirely, IPMI goes down with the host.&lt;br /&gt;
# The IPMI BMC has a single network interface and it is a single device. &lt;br /&gt;
&lt;br /&gt;
If we relied on IPMI-based fencing alone, we&#039;d have a single point of failure. If the surviving node can not put the lost node into a known state, it will intentionally hang. The logic being that a hung cluster is better than risking corruption or a [[split-brain]]. This means that, with IPMI-based fencing alone, the loss of power to a single node would not be automatically recoverable.&lt;br /&gt;
&lt;br /&gt;
That just will not do!&lt;br /&gt;
&lt;br /&gt;
To make fencing redundant, we will use switched [[PDU]]s. Think of these as network-connected power bars.&lt;br /&gt;
&lt;br /&gt;
Imagine now that one of the nodes blew itself up. The surviving node would try to connect to its IPMI interface and, of course, get no response. Then it would log into both PDUs (one behind either side of the redundant power supplies) and cut the power going to the node. By doing this, we now have a way of putting a lost node into a known state.&lt;br /&gt;
&lt;br /&gt;
So now, no matter how badly things go wrong, we can always recover!&lt;br /&gt;
&lt;br /&gt;
=== Network Managed UPSes Are Worth It ===&lt;br /&gt;
&lt;br /&gt;
We have found that a surprising number of issues that affect service availability are power related. A network-connected smart UPS allows you to monitor the power coming from the building mains. Thanks to this, we&#039;ve been able to detect far more than simple &amp;quot;lost power&amp;quot; events. We&#039;ve been able to detect failing transformers and regulators, over and under voltage events and so on. Events that, if caught ahead of time, avoid full power outages. It also protects the rest of your gear that isn&#039;t behind a UPS.&lt;br /&gt;
&lt;br /&gt;
So strictly speaking, you don&#039;t need network managed UPSes. However, we have found them to be [http://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427ebgdg6ijlui worth their weight in gold]. We will, of course, be using them in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Dashboard Servers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; will be managed by [[AN!CDB - Cluster Dashboard]], a small little dedicated server. This can be a virtual machine on a laptop or desktop, or a dedicated little server. All that matters is that it can run [[RHEL]] or [[CentOS]] version 6 with a minimal desktop.&lt;br /&gt;
&lt;br /&gt;
Normally, we setup a couple of [http://www.asus.com/ca-en/Eee_Box_PCs/EeeBox_PC_EB1033 ASUS EeeBox] machines, for redundancy of course, hanging off the back of a monitor. Users can connect to the dashboard using a browser from any device and control the servers and nodes easily from it. It also provides [https://en.wikipedia.org/wiki/KVM_switch KVM-like] access to the servers on the &#039;&#039;Anvil!&#039;&#039;, allowing them to work on the servers when they can&#039;t connect over the network. For this reason, you will probably want to pair up the dashboard machines with a monitor that offers a decent resolution to make it easy to see the desktop of the hosted servers.&lt;br /&gt;
&lt;br /&gt;
== What You Should Know Before Beginning ==&lt;br /&gt;
&lt;br /&gt;
It is assumed that you are familiar with Linux systems administration, specifically [[Red Hat]] [[Enterprise Linux]] and its derivatives. You will need to have somewhat advanced networking experience as well. You should be comfortable working in a terminal (directly or over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ssh]]&amp;lt;/span&amp;gt;). Familiarity with [[XML]] will help, but is not terribly required as its use here is pretty self-evident.&lt;br /&gt;
&lt;br /&gt;
If you feel a little out of depth at times, don&#039;t hesitate to set this tutorial aside. Browse over to the components you feel the need to study more, then return and continue on. Finally, and perhaps most importantly, you &#039;&#039;&#039;must&#039;&#039;&#039; have patience! If you have a manager asking you to &amp;quot;go live&amp;quot; with a cluster in a month, tell him or her that it simply &#039;&#039;&#039;won&#039;t happen&#039;&#039;&#039;. If you rush, you will skip important points and &#039;&#039;&#039;you will fail&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Patience is vastly more important than any pre-existing skill.&lt;br /&gt;
&lt;br /&gt;
== A Word on Complexity ==&lt;br /&gt;
&lt;br /&gt;
Introducing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Fabimer principle&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Clustering is not inherently hard, but it is inherently complex. Consider:&lt;br /&gt;
&lt;br /&gt;
* Any given program has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; bugs.&lt;br /&gt;
** [[RHCS]] uses; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, and many more smaller apps.&lt;br /&gt;
** We will be adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DRBD&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GFS2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;KVM&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Right there, we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N * 10&amp;lt;/span&amp;gt; possible bugs. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;.&lt;br /&gt;
* A cluster has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt; nodes.&lt;br /&gt;
** In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; nodes, each with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; networks across &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; interfaces bonded into pairs.&lt;br /&gt;
** The network infrastructure (Switches, routers, etc). We will be using two managed switches, adding another layer of complexity.&lt;br /&gt;
** This gives us another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y * (2*(3*2))+2&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;+2&amp;lt;/span&amp;gt; for managed switches. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;B&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Let&#039;s add the human factor. Let&#039;s say that a person needs roughly 5 years of cluster experience to be considered an proficient. For each year less than this, add a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Z&amp;lt;/span&amp;gt; &amp;quot;oops&amp;quot; factor, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(5-Z) * 2&amp;lt;/span&amp;gt;. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt;.&lt;br /&gt;
* So, finally, add up the complexity, using this tutorial&#039;s layout, 0-years of experience and managed switches.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(N * 10) * (Y * (2*(3*2))+2) * ((5-0) * 2) == (A * B * C)&amp;lt;/span&amp;gt; == an-unknown-but-big-number.&lt;br /&gt;
&lt;br /&gt;
This isn&#039;t meant to scare you away, but it is meant to be a sobering statement. Obviously, those numbers are somewhat artificial, but the point remains.&lt;br /&gt;
&lt;br /&gt;
Any one piece is easy to understand, thus, clustering is inherently easy. However, given the large number of variables, you must really understand all the pieces and how they work together. &#039;&#039;&#039;&#039;&#039;DO NOT&#039;&#039;&#039;&#039;&#039; think that you will have this mastered and working in a month. Certainly don&#039;t try to sell clusters as a service without a &#039;&#039;lot&#039;&#039; of internal testing.&lt;br /&gt;
&lt;br /&gt;
Clustering is kind of like chess. The rules are pretty straight forward, but the complexity can take some time to master.&lt;br /&gt;
&lt;br /&gt;
= Overview of Components =&lt;br /&gt;
&lt;br /&gt;
When looking at a cluster, there is a tendency to want to dive right into the configuration file. That is not very useful in clustering.&lt;br /&gt;
&lt;br /&gt;
* When you look at the configuration file, it is quite short.&lt;br /&gt;
&lt;br /&gt;
Clustering isn&#039;t like most applications or technologies. Most of us learn by taking something such as a configuration file, and tweaking it to see what happens. I tried that with clustering and learned only what it was like to bang my head against the wall.&lt;br /&gt;
&lt;br /&gt;
* Understanding the parts and how they work together is critical.&lt;br /&gt;
&lt;br /&gt;
You will find that the discussion on the components of clustering, and how those components and concepts interact, will be much longer than the initial configuration. It is true that we could talk very briefly about the actual syntax, but it would be a disservice. Please don&#039;t rush through the next section, or worse, skip it and go right to the configuration. You will waste far more time than you will save.&lt;br /&gt;
&lt;br /&gt;
* Clustering is easy, but it has a complex web of inter-connectivity. You must grasp this network if you want to be an effective cluster administrator!&lt;br /&gt;
&lt;br /&gt;
== Component; Cman ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; portion of the the cluster is the &#039;&#039;&#039;c&#039;&#039;&#039;luster &#039;&#039;&#039;man&#039;&#039;&#039;ager. In the 3.0 series used in [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; acts mainly as a [[quorum]] provider. That is, is adds up the votes from the cluster members and decides if there is a simple majority. If there is, the cluster is &amp;quot;quorate&amp;quot; and is allowed to provide cluster services. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; service will be used to start and stop all of the components needed to make the cluster operate.&lt;br /&gt;
&lt;br /&gt;
== Component; Corosync ==&lt;br /&gt;
&lt;br /&gt;
Corosync is the heart of the cluster. Almost all other cluster compnents operate though this.&lt;br /&gt;
&lt;br /&gt;
In Red Hat clusters, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is configured via the central &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. It can be configured directly in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt;, but given that we will be building an RHCS cluster, we will only use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. That said, almost all &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt; options are available in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. This is important to note as you will see references to both configuration files when searching the Internet.&lt;br /&gt;
&lt;br /&gt;
Corosync sends messages using [[multicast]] messaging by default. Recently, [[unicast]] support has been added, but due to network latency, it is only recommended for use with small clusters of two to four nodes. We will be using [[multicast]] in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== A Little History ===&lt;br /&gt;
&lt;br /&gt;
There were significant changes between [[RHCS]] the old version 2 and version 3 available on [[EL6]], which we are using.&lt;br /&gt;
&lt;br /&gt;
In the RHCS version 2, there was a component called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;openais&amp;lt;/span&amp;gt; which provided &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt;. The OpenAIS project was designed to be the heart of the cluster and was based around the [http://www.saforum.org/ Service Availability Forum]&#039;s [http://www.saforum.org/Application-Interface-Specification~217404~16627.htm Application Interface Specification]. AIS is an open [[API]] designed to provide inter-operable high availability services.&lt;br /&gt;
&lt;br /&gt;
In 2008, it was decided that the AIS specification was overkill for most clustered applications being developed in the open source community.  At that point, OpenAIS was split in to two projects: Corosync and OpenAIS. The former, Corosync, provides totem, cluster membership, messaging, and basic APIs for use by clustered applications, while the OpenAIS project became an optional add-on to corosync for users who want the full AIS API.&lt;br /&gt;
&lt;br /&gt;
You will see a lot of references to OpenAIS while searching the web for information on clustering. Understanding its evolution will hopefully help you avoid confusion.&lt;br /&gt;
&lt;br /&gt;
=== The Future of Corosync ===&lt;br /&gt;
&lt;br /&gt;
In [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is version 1.4. Upstream, however, it&#039;s passed version 2. One of the major changes in the 2+ version is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; becomes a quorum provider, helping to remove the need for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. If you experiment with clustering on [[Fedora]], for example, you will find that cman is gone entirely.&lt;br /&gt;
&lt;br /&gt;
== Concept; Quorum ==&lt;br /&gt;
&lt;br /&gt;
[[Quorum]] is defined as the minimum set of hosts required in order to provide clustered services and is used to prevent [[split-brain]] situations.&lt;br /&gt;
&lt;br /&gt;
The quorum algorithm used by the RHCS cluster is called &amp;quot;simple majority quorum&amp;quot;, which means that more than half of the hosts must be online and communicating in order to provide service. While simple majority quorum is a very common quorum algorithm, other quorum algorithms exist ([[grid quorum]], [[YKD Dyanamic Linear Voting]], etc.).&lt;br /&gt;
&lt;br /&gt;
The idea behind quorum is that, when a cluster splits into two or more partitions, which ever group of machines has quorum can safely start clustered services knowing that no other lost nodes will try to do the same.&lt;br /&gt;
&lt;br /&gt;
Take this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a cluster of four nodes, each with one vote.&lt;br /&gt;
** The cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;. A clear majority, in this case, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; because &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(4/2)+1&amp;lt;/span&amp;gt;, rounded down, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Now imagine that there is a failure in the network equipment and one of the nodes disconnects from the rest of the cluster.&lt;br /&gt;
** You now have two partitions; One partition contains three machines and the other partition has one.&lt;br /&gt;
** The three machines will have quorum, and the other machine will lose quorum.&lt;br /&gt;
** The partition with quorum will reconfigure and continue to provide cluster services.&lt;br /&gt;
** The partition without quorum will withdraw from the cluster and shut down all cluster services.&lt;br /&gt;
&lt;br /&gt;
When the cluster reconfigures and the partition wins quorum, it will fence the node(s) in the partition without quorum. Once the fencing has been confirmed successful, the partition with quorum will begin accessing clustered resources, like shared filesystems.&lt;br /&gt;
&lt;br /&gt;
This also helps explain why an even &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; is not enough to have quorum, a common question for people new to clustering. Using the above scenario, imagine if the split were 2 and 2 nodes. Because either can&#039;t be sure what the other would do, neither can safely proceed. If we allowed an even 50% to have quorum, both partition might try to take over the clustered services and disaster would soon follow.&lt;br /&gt;
&lt;br /&gt;
There is one, and &#039;&#039;&#039;only&#039;&#039;&#039; one except to this rule.&lt;br /&gt;
&lt;br /&gt;
In the case of a two node cluster, as we will be building here, any failure results in a 50/50 split. If we enforced quorum in a two-node cluster, there would never be high availability because and failure would cause both nodes to withdraw. The risk with this exception is that we now place the entire safety of the cluster on [[fencing]], a concept we will cover in a second. Fencing is a second line of defense and something we are loath to rely on alone.&lt;br /&gt;
&lt;br /&gt;
Even in a two-node cluster though, proper quorum can be maintained by using a quorum disk, called a [[qdisk]]. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; on a [[DRBD]] resource comes with its own problems, so we will not be able to use it here.&lt;br /&gt;
&lt;br /&gt;
== Concept; Virtual Synchrony ==&lt;br /&gt;
&lt;br /&gt;
Many cluster operations, like distributed locking and so on, have to occur in the same order across all nodes. This concept is called &amp;quot;virtual synchrony&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; using &amp;quot;closed process groups&amp;quot;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[CPG]]&amp;lt;/span&amp;gt;. A closed process group is simply a private group of processes in a cluster. Within this closed group, all messages between members are ordered. Delivery, however, is not guaranteed. If a member misses messages, it is up to the member&#039;s application to decide what action to take.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at two scenarios showing how locks are handled using CPG:&lt;br /&gt;
&lt;br /&gt;
* The cluster starts up cleanly with two members.&lt;br /&gt;
* Both members are able to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Both want to start it, but need a lock from [[DLM]] to do so.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member has its totem token, and sends its request for the lock.&lt;br /&gt;
** DLM issues a lock for that service to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member requests a lock for the same service.&lt;br /&gt;
** DLM rejects the lock request.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member successfully starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; and announces this to the CPG members.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sees that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; is now running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and no longer tries to start the service.&lt;br /&gt;
&lt;br /&gt;
* The two members want to write to a common area of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; GFS2 partition.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sends a request for a DLM lock against the FS, gets it.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; sends a request for the same lock, but DLM sees that a lock is pending and rejects the request.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member finishes altering the file system, announces the changed over CPG and releases the lock.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member updates its view of the filesystem, requests a lock, receives it and proceeds to update the filesystems.&lt;br /&gt;
** It completes the changes, annouces the changes over CPG and releases the lock.&lt;br /&gt;
&lt;br /&gt;
Messages can only be sent to the members of the CPG while the node has a totem token from corosync.&lt;br /&gt;
&lt;br /&gt;
== Concept; Fencing ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=DO NOT BUILD A CLUSTER WITHOUT PROPER, WORKING AND TESTED FENCING.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:fence_meme.jpg|right|300px|thumb|Laugh, but this is a weekly conversation.]]&lt;br /&gt;
&lt;br /&gt;
Fencing is a &#039;&#039;&#039;absolutely critical&#039;&#039;&#039; part of clustering. Without &#039;&#039;&#039;fully&#039;&#039;&#039; working fence devices, &#039;&#039;&#039;&#039;&#039;your cluster will fail&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sorry, I promise that this will be the only time that I speak so strongly. Fencing really is critical, and explaining the need for fencing is nearly a weekly event. &lt;br /&gt;
&lt;br /&gt;
So then, let&#039;s discuss fencing.&lt;br /&gt;
&lt;br /&gt;
When a node stops responding, an internal timeout and counter start ticking away. During this time, no [[DLM]] locks are allowed to be issued. Anything using DLM, including &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, are effectively hung. The hung node is detected using a totem token timeout. That is, if a token is not received from a node within a period of time, it is considered lost and a new token is sent. After a certain number of lost tokens, the cluster declares the node dead. The remaining nodes reconfigure into a new cluster and, if they have quorum (or if quorum is ignored), a fence call against the silent node is made.&lt;br /&gt;
&lt;br /&gt;
The fence daemon will look at the cluster configuration and get the fence devices configured for the dead node. Then, one at a time and in the order that they appear in the configuration, the fence daemon will call those fence devices, via their fence agents, passing to the fence agent any configured arguments like username, password, port number and so on. If the first fence agent returns a failure, the next fence agent will be called. If the second fails, the third will be called, then the forth and so on. Once the last (or perhaps only) fence device fails, the fence daemon will retry again, starting back at the start of the list. It will do this indefinitely until one of the fence devices succeeds.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow, in point form:&lt;br /&gt;
&lt;br /&gt;
* The totem token moves around the cluster members. As each member gets the token, it sends sequenced messages to the CPG members.&lt;br /&gt;
* The token is passed from one node to the next, in order and continuously during normal operation.&lt;br /&gt;
* Suddenly, one node stops responding.&lt;br /&gt;
** A timeout starts (~&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238&amp;lt;/span&amp;gt;ms by default), and each time the timeout is hit, and error counter increments and a replacement token is created.&lt;br /&gt;
** The silent node responds before the failure counter reaches the limit.&lt;br /&gt;
*** The failure counter is reset to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
*** The cluster operates normally again.&lt;br /&gt;
* Again, one node stops responding.&lt;br /&gt;
** Again, the timeout begins. As each totem token times out, a new packet is sent and the error count increments.&lt;br /&gt;
** The error counts exceed the limit (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; errors is the default); Roughly one second has passed (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238ms * 4&amp;lt;/span&amp;gt; plus some overhead).&lt;br /&gt;
** The node is declared dead.&lt;br /&gt;
** The cluster checks which members it still has, and if that provides enough votes for quorum.&lt;br /&gt;
*** If there are too few votes for quorum, the cluster software freezes and the node(s) withdraw from the cluster.&lt;br /&gt;
*** If there are enough votes for quorum, the silent node is declared dead.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, telling it to fence the node.&lt;br /&gt;
**** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon notifies [[DLM]] and locks are blocked.&lt;br /&gt;
**** Which fence device(s) to use, that is, what &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to call and what arguments to pass, is gathered.&lt;br /&gt;
**** For each configured fence device:&lt;br /&gt;
***** The agent is called and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; waits for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to exit.&lt;br /&gt;
***** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt;&#039;s exit code is examined. If it&#039;s a success, recovery starts. If it failed, the next configured fence agent is called.&lt;br /&gt;
**** If all (or the only) configured fence fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will start over.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will wait and loop forever until a fence agent succeeds. During this time, &#039;&#039;&#039;the cluster is effectively hung&#039;&#039;&#039;.&lt;br /&gt;
*** Once a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; succeeds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; notifies DLM and lost locks are recovered.&lt;br /&gt;
**** [[GFS2]] partitions recover using their journal.&lt;br /&gt;
**** Lost cluster resources are recovered as per &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;&#039;s configuration (including file system recovery as needed).&lt;br /&gt;
* Normal cluster operation is restored, minus the lost node.&lt;br /&gt;
&lt;br /&gt;
This skipped a few key things, but the general flow of logic should be there.&lt;br /&gt;
&lt;br /&gt;
This is why fencing is so important. Without a properly configured and tested fence device or devices, the cluster will never successfully fence and the cluster will remain hung until a human can intervene.&lt;br /&gt;
&lt;br /&gt;
=== Is &amp;quot;Fencing&amp;quot; the same as STONITH? ===&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
In the old days, there were two distinct open-source HA clustering stacks. The Linux-HA&#039;s project used the term &amp;quot;STONITH&amp;quot;, an acronym for &amp;quot;Shoot The Other Node In The Head&amp;quot;, for fencing. Red Hat&#039;s cluster stack used the term &amp;quot;fencing&amp;quot; for the same concept.&lt;br /&gt;
&lt;br /&gt;
We prefer the term &amp;quot;fencing&amp;quot; because the fundamental goal is to put the target node into a state where it can not effect cluster resources or provide clustered services. This can be accomplished by powering it off, called &amp;quot;power fencing&amp;quot;, or by disconnecting it from SAN storage and/or network, a process called &amp;quot;fabric fencing&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;STONITH&amp;quot;, based on its acronym, implies power fencing. This is not a big deal, but it is the reason this tutorial sticks with the term &amp;quot;fencing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Component; Totem ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; protocol defines message passing within the cluster and it is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;. A token is passed around all the nodes in the cluster, and nodes can only send messages while they have the token. A node will keep its messages in memory until it gets the token back with no &amp;quot;not ack&amp;quot; messages. This way, if a node missed a message, it can request it be resent when it gets its token. If a node isn&#039;t up, it will simply miss the messages.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt; protocol supports something called &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;&#039;, &#039;&#039;&#039;R&#039;&#039;&#039;edundant &#039;&#039;&#039;R&#039;&#039;&#039;ing &#039;&#039;&#039;P&#039;&#039;&#039;rotocol. Through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;, you can add a second backup ring on a separate network to take over in the event of a failure in the first ring. In RHCS, these rings are known as &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 0&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 1&amp;lt;/span&amp;gt;&amp;quot;. The RRP is being re-introduced in RHCS version 3. Its use is experimental and should only be used with plenty of testing.&lt;br /&gt;
&lt;br /&gt;
== Component; Rgmanager ==&lt;br /&gt;
&lt;br /&gt;
When the cluster membership changes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; that it needs to recheck its services. It will examine what changed and then will start, stop, migrate or recover cluster resources as needed.&lt;br /&gt;
&lt;br /&gt;
Within &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, one or more &#039;&#039;resources&#039;&#039; are brought together as a &#039;&#039;service&#039;&#039;. This service is then optionally assigned to a &#039;&#039;failover domain&#039;&#039;, an subset of nodes that can have preferential ordering.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; daemon runs separately from the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. This means that, to fully start the cluster, we need to start both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What about Pacemaker? ===&lt;br /&gt;
&lt;br /&gt;
[[Pacemaker]] is also a resource manager, like rgmanager. You can not use both in the same cluster.&lt;br /&gt;
&lt;br /&gt;
Back prior to 2008, there were two distinct open-source cluster projects:&lt;br /&gt;
&lt;br /&gt;
* Red Hat&#039;s Cluster Service&lt;br /&gt;
* Linux-HA&#039;s Heartbeat&lt;br /&gt;
&lt;br /&gt;
Pacemaker was born out of the Linux-HA project as an advanced resource manager that could use either heartbeat or openais for cluster membership and communication. Unlike RHCS and heartbeat, its sole focus was resource management.&lt;br /&gt;
&lt;br /&gt;
In 2008, plans were made to begin the slow process of merging the two independent stacks into one. As mentioned in the corosync overview, it replaced openais and became the default cluster membership and communication layer for both RHCS and Pacemaker. Development of heartbeat was ended, though [http://www.linbit.com/en/company/news/125-linbit-takes-over-heartbeat-maintenance Linbit] continues to maintain the heartbeat code to this day.&lt;br /&gt;
&lt;br /&gt;
The fence and resource agents, software that acts as a glue between the cluster and the devices and resource they manage, were merged next. You can now use the same set of agents on both pacemaker and RHCS.&lt;br /&gt;
&lt;br /&gt;
Red Hat introduced pacemaker as &amp;quot;Tech Preview&amp;quot; in [[RHEL]] 6.0. It has been available beside RHCS ever since, though support is not offered yet[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6-Beta/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ *].&lt;br /&gt;
&lt;br /&gt;
{{note|1=Pacemaker entered full support with the release of RHEL 6.5. It is also the only available HA stack on RHEL 7 beta. This is a strong indication that, indeed, corosync and pacemaker will be the future HA stack on RHEL.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat has a strict policy of not saying what will happen in the future. That said, the speculation is that Pacemaker will become supported soon and will replace rgmanager entirely in RHEL 7, given that cman and rgmanager no longer exist upstream in Fedora.&lt;br /&gt;
&lt;br /&gt;
So why don&#039;t we use pacemaker here?&lt;br /&gt;
&lt;br /&gt;
We believe that, no matter how promising software looks, stability is king. Pacemaker on other distributions has been stable and supported for a long time. However, on RHEL, it&#039;s a recent addition and the developers have been doing a tremendous amount of work on pacemaker and associated tools. For this reason, we feel that on RHEL 6, pacemaker is too much of a moving target at this time. That said, we do intend to switch to pacemaker some time in the next year or two, depending on how the Red Hat stack evolves.&lt;br /&gt;
&lt;br /&gt;
== Component; Qdisk ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; does not work reliably on a DRBD resource, so we will not be using it in this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
A Quorum disk, known as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; is small partition on [[SAN]] storage used to enhance quorum. It generally carries enough votes to allow even a single node to take quorum during a cluster partition. It does this by using configured heuristics, that is custom tests, to decided which node or partition is best suited for providing clustered services during a cluster reconfiguration. These heuristics can be simple, like testing which partition has access to a given router, or they can be as complex as the administrator wishes using custom scripts.&lt;br /&gt;
&lt;br /&gt;
Though we won&#039;t be using it here, it is well worth knowing about when you move to a cluster with [[SAN]] storage.&lt;br /&gt;
&lt;br /&gt;
== Component; DRBD ==&lt;br /&gt;
&lt;br /&gt;
[[DRBD]]; Distributed Replicating Block Device, is a technology that takes raw storage from two nodes and keeps their data synchronized in real time. It is sometimes described as &amp;quot;network [[RAID_level_5#Level_1|RAID Level 1]]&amp;quot;, and that is conceptually accurate. In this tutorial&#039;s cluster, DRBD will be used to provide that back-end storage as a cost-effective alternative to a traditional [[SAN]] device.&lt;br /&gt;
&lt;br /&gt;
DRBD is, fundamentally, a raw block device. If you&#039;ve ever used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[mdadm]]&amp;lt;/span&amp;gt; to create a software RAID array, then you will be familiar with this.&lt;br /&gt;
&lt;br /&gt;
Think of it this way;&lt;br /&gt;
&lt;br /&gt;
With traditional software raid, you would take:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sdb5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With DRBD, you have this:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node1:/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node2:/dev/sda5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;both:/dev/drbd0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, as soon as you create the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;md0&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd0&amp;lt;/span&amp;gt; device, you pretend like the member devices no longer exist. You format a [[filesystem]] onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;, use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; as an [[LVM]] physical volume, and so on.&lt;br /&gt;
&lt;br /&gt;
The main difference with DRBD is that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; will always be the same on both nodes. If you write something to node 1, it&#039;s instantly available on node 2, and vice versa. Of course, this means that what ever you put on top of DRBD has to be &amp;quot;cluster aware&amp;quot;. That is to say, the program or file system using the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; device has to understand that the contents of the disk might change because of another node.&lt;br /&gt;
&lt;br /&gt;
== Component; Clustered LVM ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the raw storage for the cluster, we must next consider partitions. This is where Clustered [[LVM]], known as [[CLVM]], comes into play.&lt;br /&gt;
&lt;br /&gt;
CLVM is ideal in that by using [[DLM]], the distributed lock manager. It won&#039;t allow access to cluster members outside of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;&#039;s closed process group, which, in turn, requires quorum.&lt;br /&gt;
&lt;br /&gt;
It is ideal because it can take one or more raw devices, known as &amp;quot;physical volumes&amp;quot;, or simple as [[PV]]s, and combine their raw space into one or more &amp;quot;volume groups&amp;quot;, known as [[VG]]s. These volume groups then act just like a typical hard drive and can be &amp;quot;partitioned&amp;quot; into one or more &amp;quot;logical volumes&amp;quot;, known as [[LV]]s. These LVs are where [[KVM]]&#039;s virtual machine guests will exist and where we will create our [[GFS2]] clustered file system.&lt;br /&gt;
&lt;br /&gt;
LVM is particularly attractive because of how flexible it is. We can easily add new physical volumes later, and then grow an existing volume group to use the new space. This new space can then be given to existing logical volumes, or entirely new logical volumes can be created. This can all be done while the cluster is online offering an upgrade path with no down time.&lt;br /&gt;
&lt;br /&gt;
== Component; GFS2 ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the clusters raw storage space, and [[Clustered LVM]] providing the logical partitions, we can now look at the clustered file system. This is the role of the Global File System version 2, known simply as [[GFS2]].&lt;br /&gt;
&lt;br /&gt;
It works much like standard filesystem, with user-land tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck.gfs2&amp;lt;/span&amp;gt; and so on. The major difference is that it and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; use the cluster&#039;s [[DLM|distributed locking mechanism]] provided by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; daemon. Once formatted, the GFS2-formatted partition can be mounted and used by any node in the cluster&#039;s [[CPG|closed process group]]. All nodes can then safely read from and write to the data on the partition simultaneously.&lt;br /&gt;
&lt;br /&gt;
{{note|1=GFS2 is &#039;&#039;&#039;only&#039;&#039;&#039; supported when run on top of Clustered LVM [[LV]]s. This is because, in certain error states, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_controld&amp;lt;/span&amp;gt; will call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to disconnect the GFS2 partition from its storage in certain failure states.}}&lt;br /&gt;
&lt;br /&gt;
== Component; DLM ==&lt;br /&gt;
&lt;br /&gt;
One of the major roles of a cluster is to provide [[DLM|distributed locking]] for clustered storage and resource management.&lt;br /&gt;
&lt;br /&gt;
Whenever a resource, GFS2 filesystem or clustered LVM LV needs a lock, it sends a request to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; which runs in userspace. This communicates with DLM in kernel. If the lockspace does not yet exist, DLM will create it and then give the lock to the requester. Should a subsequant lock request come in for the same lockspace, it will be rejected. Once the application using the lock is finished with it, it will release the lock. After this, another node may request and receive a lock for the lockspace.&lt;br /&gt;
&lt;br /&gt;
If a node fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; that a fence is pending and new lock requests will block. After a successful fence, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert DLM that the node is gone and any locks the victim node held are released. At this time, other nodes may request a lock on the lockspaces the lost node held and can perform recovery, like replaying a GFS2 filesystem journal, prior to resuming normal operation.&lt;br /&gt;
&lt;br /&gt;
Note that DLM locks are not used for actually locking the file system. That job is still handled by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;plock()&amp;lt;/span&amp;gt; calls ([[POSIX]] locks).&lt;br /&gt;
&lt;br /&gt;
== Component; KVM ==&lt;br /&gt;
&lt;br /&gt;
Two of the most popular open-source virtualization platforms available in the Linux world today and [[Xen]] and [[KVM]]. The former is maintained by [http://www.citrix.com/xenserver Citrix] and the other by [http://www.redhat.com/solutions/virtualization/ Redhat]. It would be difficult to say which is &amp;quot;better&amp;quot;, as they&#039;re both very good. Xen can be argued to be more mature where KVM is the &amp;quot;official&amp;quot; solution supported by Red Hat in [[EL6]].&lt;br /&gt;
&lt;br /&gt;
We will be using the KVM [[hypervisor]] within which our highly-available virtual machine guests will reside. It is a type-1 hypervisor, which means that the host operating system runs directly on the bare hardware. Contrasted against Xen, which is a type-2 hypervisor where even the installed OS is itself just another virtual machine.&lt;br /&gt;
&lt;br /&gt;
= Node Installation =&lt;br /&gt;
&lt;br /&gt;
We need a baseline, a minimum system requirement of sorts. I will refer fairly frequently to the specific setup I used. Please don&#039;t take this as &amp;quot;the ideal setup&amp;quot; though... Every cluster will have its own needs, and you should plan and purchase for your particular needs.&lt;br /&gt;
&lt;br /&gt;
== Node Host Names ==&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&lt;br /&gt;
&lt;br /&gt;
We need to decide what naming convention and IP ranges to use for our nodes and their networks.&lt;br /&gt;
&lt;br /&gt;
The IP addresses and subnets you decide to use are completely up to you. The host names though need to follow a certain standard, &#039;&#039;&#039;if&#039;&#039;&#039; you wish to use the [[AN!CDB]] dashboard, as we will do here. Specifically, the node names on your nodes must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; for node #1 and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for node #2. The reason for this will be discussed later. &lt;br /&gt;
&lt;br /&gt;
The node host name convention that we&#039;ve created is this:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-cYYn0{1,2}&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; is a two or three letter prefix used to denote the company, group or person who owns the &#039;&#039;Anvil!&#039;&#039;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cYY&amp;lt;/span&amp;gt; is a simple zero-padded sequence number number.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n0{1,2}&amp;lt;/span&amp;gt; indicated the node in the cluster.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, the &#039;&#039;Anvil!&#039;&#039; is owned and operated by &amp;quot;Alteeve&#039;s Niche!&amp;quot;, so the prefix &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an&amp;lt;/span&amp;gt;&amp;quot; is used. This is the fifth cluster we&#039;ve got, so the cluster name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;, so the host name&#039;s cluster number is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c05&amp;lt;/span&amp;gt;. Thus, node #1 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and node #2 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we have three distinct networks, we have three network-specific suffixes we apply to these host names which we will map to subnets in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; later.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.bcn&amp;lt;/span&amp;gt;; Back-Channel Network host name.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.sn&amp;lt;/span&amp;gt;; Storage Network hostname.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.ifn&amp;lt;/span&amp;gt;; Internet-Facing Network host name.&lt;br /&gt;
&lt;br /&gt;
Again, what you use is entirely up to you. Just remember that the node&#039;s host name must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for AN!CDB to work.&lt;br /&gt;
&lt;br /&gt;
== Foundation Pack Host Names ==&lt;br /&gt;
&lt;br /&gt;
The foundation pack devices, switches, PDUs and UPSes, can support multiple &#039;&#039;Anvil!&#039;&#039; platforms. Likewise, the [[AN!CDB|dashboard]] servers support multiple &#039;&#039;Anvil!&#039;&#039;s as well. For this reason, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cXX&amp;lt;/span&amp;gt; portion of the host name does not make sense when choosing host names for these devices.&lt;br /&gt;
&lt;br /&gt;
As always, you are free to choose host names that make sense to you. For this tutorial, the following host names are used;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device&lt;br /&gt;
!Host name&lt;br /&gt;
!Examples&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|Network Switches&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-sYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Switch #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Switch #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Switched [[PDU]]s&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-pYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* PDU #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p01&amp;lt;/span&amp;gt;&lt;br /&gt;
* PDU #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Network Managed [[UPS]]es&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-uYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* UPS #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
* UPS #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Dashboard Servers&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-mYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Dashboard #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dashboard #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number. Note that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; letter was chosen for historical reasons. The dashboard used to be called &amp;quot;monitoring servers&amp;quot;. For consistency with existing dashboards, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; has remained. Note also that the dashboards will connect to both the [[BCN]] and [[SN]], so like the nodes, host names with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.bcn&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.ifn&amp;lt;/span&amp;gt; suffixes will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OS Installation ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=[[EL6]].1 shipped with a version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[corosync]]&amp;lt;/span&amp;gt; that had a token retransmit bug. On slower systems, there would be a form of race condition which would cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; tokens the be retransmitted and cause significant performance problems. This has been resolved in [[EL6]].2 so please be sure to upgrade.}}&lt;br /&gt;
&lt;br /&gt;
Beyond being based on [[RHEL]] 6, there are no requirements for how the operating system is installed. This tutorial is written using &amp;quot;minimal&amp;quot; installs, and as such, installation instructions will be provided that will install all needed packages if they aren&#039;t already installed on your nodes.&lt;br /&gt;
&lt;br /&gt;
== Network Security Considerations ==&lt;br /&gt;
&lt;br /&gt;
When building production clusters, you will want to consider two options with regard to network security.&lt;br /&gt;
&lt;br /&gt;
First, the interfaces connected to an untrusted network, like the Internet, should not have an IP address, though the interfaces themselves will need to be up so that virtual machines can route through them to the outside world. Alternatively, anything inbound from the virtual machines or inbound from the untrusted network should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt;ed by the firewall.&lt;br /&gt;
&lt;br /&gt;
Second, if you can not run the cluster communications or storage traffic on dedicated network connections over isolated subnets, you will need to configure the firewall to block everything except the ports needed by storage and cluster traffic.&lt;br /&gt;
&lt;br /&gt;
{{note|1=As of [[EL6]].2, you can now use [[unicast]] for totem communication instead of multicast. This is &#039;&#039;&#039;not&#039;&#039;&#039; advised, and should only be used for clusters of two or three nodes on networks where unresolvable [[multicast]] issues exist. If using [[gfs2]], as we do here, using unicast for totem is strongly discouraged.}}&lt;br /&gt;
&lt;br /&gt;
== SELinux Considerations ==&lt;br /&gt;
&lt;br /&gt;
There are two important changes needed to make our &#039;&#039;Anvil!&#039;&#039; work with [[SELinux]]. Both are presented in this tutorial when they&#039;re first needed. If you do not plan to follow this tutorial linearly, please be sure to read:&lt;br /&gt;
&lt;br /&gt;
* [[#SELinux and apcupsd|SELinux and apcupsd]]&lt;br /&gt;
* [[#Solving_vm01-win2008_.22Failure_to_Enable.22_Error|Solving vm01-win2008 &amp;quot;Failure to Enable Error&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&#039;s take a look at a block diagram of what we&#039;re going to build. This will help when trying to see what we&#039;ll be talking about.&lt;br /&gt;
&lt;br /&gt;
== A Map! ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Nodes                                                                                        \_/                                                                                           &lt;br /&gt;
  ____________________________________________________________________________             _____|____              ____________________________________________________________________________ &lt;br /&gt;
 | an-c05n01.alteeve.ca                                                       |  /--------{_Internet_}---------\  |                                                       an-c05n02.alteeve.ca |&lt;br /&gt;
 |                                 Network:                                   |  |                             |  |                                   Network:                                 |&lt;br /&gt;
 |                                 _________________     _____________________|  |  _________________________  |  |_____________________     _________________                                 |&lt;br /&gt;
 |      Servers:                  |      vbr2       |---| bond2               |  | | an-s01         Switch 1 | |  |               bond2 |---|      vbr2       |                  Servers:      |&lt;br /&gt;
 |      _______________________   |   10.255.50.1   |   | ____________________|  | |____ Internet-Facing ____| |  |____________________ |   |   10.255.50.2   |  .........................     |&lt;br /&gt;
 |     | [ vm01-win2008 ]      |  |_________________|   || eth2               =----=_01_]    Network    [_02_=----=               eth2 ||   |_________________|  :      [ vm01-win2008 ] :     |&lt;br /&gt;
 |     |   ____________________|    | : | | : : | |     || 00:1B:21:81:C3:34 ||  | |____________________[_24_=-/  || 00:1B:21:81:C2:EA ||     : : | | : : | :    :____________________   :     |&lt;br /&gt;
 |     |  | NIC 1              =----/ : | | : : | |     ||___________________||  | | an-s02         Switch 2 |    ||___________________||     : : | | : : | :----=              NIC 1 |  :     |&lt;br /&gt;
 |     |  | 10.255.1.1        ||      : | | : : | |     | ____________________|  | |____                 ____|    |____________________ |     : : | | : : |      :|        10.255.1.1 |  :     |&lt;br /&gt;
 |     |  | ..:..:..:..:..:.. ||      : | | : : | |     || eth5               =----=_01_]  VLAN ID 300  [_02_=----=               eth5 ||     : : | | : : |      :| ..:..:..:..:..:.. |  :     |&lt;br /&gt;
 |     |  |___________________||      : | | : : | |     || A0:36:9F:02:E0:05 ||  | |____________________[_24_=-\  || A0:36:9F:07:D6:2F ||     : : | | : : |      :|___________________|  :     |&lt;br /&gt;
 |     |   ____                |      : | | : : | |     ||___________________||  |                             |  ||___________________||     : : | | : : |      :                ____   :     |&lt;br /&gt;
 |  /--=--[_c:_]               |      : | | : : | |     |_____________________|  \-----------------------------/  |_____________________|     : : | | : : |      :               [_c:_]--=--\  |&lt;br /&gt;
 |  |  |_______________________|      : | | : : | |      _____________________|                                   |_____________________      : : | | : : |      :.......................:  |  |&lt;br /&gt;
 |  |                                 : | | : : | |     | bond1               |     _________________________     |               bond1 |     : : | | : : |                                 |  |&lt;br /&gt;
 |  |     .........................   : | | : : | |     | 10.10.50.1          |    | an-s01         Switch 1 |    |          10.10.50.2 |     : : | | : : |    _______________________      |  |&lt;br /&gt;
 |  |     : [ vm02-win2012 ]      :   : | | : : | |     | ____________________|    |____     Storage     ____|    |____________________ |     : : | | : : |   |      [ vm02-win2012 ] |     |  |&lt;br /&gt;
 |  |     :   ____________________:   : | | : : | |     || eth1               =----=_09_]    Network    [_10_=----=               eth1 ||     : : | | : : |   |____________________   |     |  |&lt;br /&gt;
 |  |     :  | NIC 1              =---: | | : : | |     || 00:19:99:9C:9B:9F ||    |_________________________|    || 00:19:99:9C:A0:6D ||     : : | | : : \---=              NIC 1 |  |     |  |&lt;br /&gt;
 |  |     :  | 10.255.1.2        |:     | | : : | |     ||___________________||    | an-s02         Switch 2 |    ||___________________||     : : | | : :     ||        10.255.1.2 |  |     |  |&lt;br /&gt;
 |  |     :  | ..:..:..:..:..:.. |:     | | : : | |     | ____________________|    |____                 ____|    |____________________ |     : : | | : :     || ..:..:..:..:..:.. |  |     |  |&lt;br /&gt;
 |  |     :  |___________________|:     | | : : | |     || eth4               =----=_09_]  VLAN ID 200  [_10_=----=               eth4 ||     : : | | : :     ||___________________|  |     |  |&lt;br /&gt;
 |  |     :   ____                :     | | : : | |     || A0:36:9F:02:E0:04 ||    |_________________________|    || A0:36:9F:07:D6:2E ||     : : | | : :     |                ____   |     |  |&lt;br /&gt;
 |  |  /--=--[_c:_]               :     | | : : | |     ||___________________||                                   ||___________________||     : : | | : :     |               [_c:_]--=--\  |  |&lt;br /&gt;
 |  |  |  :.......................:     | | : : | |  /--|_____________________|                                   |_____________________|--\  : : | | : :     |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                | | : : | |  |   _____________________|                                   |_____________________   |  : : | | : :                                |  |  |&lt;br /&gt;
 |  |  |   _______________________      | | : : | |  |  | bond0               |     _________________________     |               bond0 |  |  : : | | : :     .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm03-win7 ]         |     | | : : | |  |  | 10.20.50.1          |    | an-s01         Switch 1 |    |          10.20.50.2 |  |  : : | | : :     :      [ vm02-win2012 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|     | | : : | |  |  | ____________________|    |____  Back-Channel   ____|    |____________________ |  |  : : | | : :     :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-----/ | : : | |  |  || eth0               =----=_13_]    Network    [_14_=----=               eth0 ||  |  : : | | : :-----=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.3        ||       | : : | |  |  || 00:19:99:9C:9B:9E ||    |_________________________|    || 00:19:99:9C:A0:6C ||  |  : : | | :       :|        10.255.1.3 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||       | : : | |  |  ||___________________||    | an-s02         Switch 2 |    ||___________________||  |  : : | | :       :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||       | : : | |  |  || eth3               =----=_13_]  VLAN ID 100  [_14_=----=               eth3 ||  |  : : | | :       :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |       | : : | |  |  || 00:1B:21:81:C3:35 ||    |_________________________|    || 00:1B:21:81:C2:EB ||  |  : : | | :       :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |       | : : | |  |  ||___________________||                                   ||___________________||  |  : : | | :       :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|       | : : | |  |  |_____________________|                                   |_____________________|  |  : : | | :       :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                  | : : | |  |                        |                                   |                        |  : : | | :                                  |  |  |&lt;br /&gt;
 |  |  |   _______________________        | : : | |  |                        |                                   |                        |  : : | | :       .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm04-win8 ]         |       | : : | |  \                        |                                   |                       /   : : | | :       :         [ vm04-win8 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|       | : : | |   \                       |                                   |                      /    : : | | :       :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-------/ : : | |    |                      |                                   |                      |    : : | | :-------=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.4        ||         : : | |    |                      |                                   |                      |    : : | |         :|        10.255.1.4 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||         : : | |    |                      |                                   |                      |    : : | |         :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||         : : | |    |                      |                                   |                      |    : : | |         :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |         : : | |    |                      |                                   |                      |    : : | |         :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |         : : | |    |                      |                                   |                      |    : : | |         :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|         : : | |    |                      |                                   |                      |    : : | |         :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                    : : | |    |                      |                                   |                      |    : : | |                                    |  |  |&lt;br /&gt;
 |  |  |  .........................         : : | |    |                      |                                   |                      |    : : | |          _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm05-freebsd9 ]     :         : : | |    |                      |                                   |                      |    : : | |         |     [ vm05-freebsd9 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:         : : | |    |                      |                                   |                      |    : : | |         |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | em0                =---------: : | |    |                      |                                   |                      |    : : | \---------=                em0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.5        |:           : | |    |                      |                                   |                      |    : : |           ||        10.255.1.5 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:           : | |    |                      |                                   |                      |    : : |           || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:           : | |    |                      |                                   |                      |    : : |           ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :           : | |    |                      |                                   |                      |    : : |           |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_ada0_]             :           : | |    |                      |                                   |                      |    : : |           |             [_ada0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:           : | |    |                      |                                   |                      |    : : |           |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                      : | |    |                      |                                   |                      |    : : |                                      |  |  |&lt;br /&gt;
 |  |  |  .........................           : | |    |                      |                                   |                      |    : : |            _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm06-solaris11 ]    :           : | |    |                      |                                   |                      |    : : |           |    [ vm06-solaris11 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:           : | |    |                      |                                   |                      |    : : |           |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | net0               =-----------: | |    |                      |                                   |                      |    : : \-----------=               net0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.6        |:             | |    |                      |                                   |                      |    : :             ||        10.255.1.6 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:             | |    |                      |                                   |                      |    : :             || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:             | |    |                      |                                   |                      |    : :             ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :             | |    |                      |                                   |                      |    : :             |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_c3d0_]             :             | |    |                      |                                   |                      |    : :             |             [_c3d0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:             | |    |                      |                                   |                      |    : :             |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                        | |    |                      |                                   |                      |    : :                                        |  |  |&lt;br /&gt;
 |  |  |   _______________________              | |    |                      |                                   |                      |    : :             .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm07-rhel6 ]        |             | |    |                      |                                   |                      |    : :             :        [ vm07-rhel6 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|             | |    |                      |                                   |                      |    : :             :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =-------------/ |    |                      |                                   |                      |    : :-------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.7        ||               |    |                      |                                   |                      |    :               :|        10.255.1.7 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||               |    |                      |                                   |                      |    :               :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||               |    |                      |                                   |                      |    :               :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |               |    |                      |                                   |                      |    :               :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |               |    |                      |                                   |                      |    :               :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|               |    |                      |                                   |                      |    :               :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                          |    |                      |                                   |                      |    :                                          |  |  |&lt;br /&gt;
 |  |  |   _______________________                |    |                      |                                   |                      |    :               .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm08-sles11 ]       |               |    |                      |                                   |                      |    :               :       [ vm08-sles11 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|               |    |                      |                                   |                      |    :               :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =---------------/    |                      |                                   |                      |    :---------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.8        ||                    |                      |                                   |                      |                    :|        10.255.1.8 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||                    |                      |                                   |                      |                    :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||                    |                      |                                   |                      |                    :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |                    |                      |                                   |                      |                    :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |                    |                      |                                   |                      |                    :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|                    |                      |                                   |                      |                    :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |    Storage:                                   |                      |                                   |                      |                                   Storage:    |  |  |&lt;br /&gt;
 |  |  |    __________                                 |                      |                                   |                      |                                 __________    |  |  |&lt;br /&gt;
 |  |  |   [_/dev/sda_]                                |                      |                                   |                      |                                [_/dev/sda_]   |  |  |&lt;br /&gt;
 |  |  |     |   ___________    _______                |                      |                                   |                      |                _______    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda1_]--[_/boot_]               |                      |                                   |                      |               [_/boot_]--[_/dev/sda1_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ________               |                      |                                   |                      |               ________    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda2_]--[_&amp;lt;swap&amp;gt;_]              |                      |                                   |                      |              [_&amp;lt;swap&amp;gt;_]--[_/dev/sda2_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ___                    |                      |                                   |                      |                    ___    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda3_]--[_/_]                   |                      |                                   |                      |                   [_/_]--[_/dev/sda3_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |                      |                                   |                      |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda5_]--[_r0_]--[_/dev/drbd0_]--+                      |                                   |                      +--[_/dev/drbd0_]--[_r0_]--[_/dev/sda5_]--+     |  |  |&lt;br /&gt;
 |  |  |     |                                    |    |                      |                                   |                      |    |                                    |     |  |  |&lt;br /&gt;
 |  |  |     |                                    \----|--\                   |                                   |                   /--|----/                                    |     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |  |                   |                                   |                   |  |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     \--[_/dev/sda6_]--[_r1_]--[_/dev/drbd1_]--/  |                   |                                   |                   |  \--[_/dev/drbd1_]--[_r1_]--[_/dev/sda6_]--/     |  |  |&lt;br /&gt;
 |  |  |                                          |       |                   |                                   |                   |       |                                          |  |  |&lt;br /&gt;
 |  |  |   Clustered LVM:                         |       |                   |                                   |                   |       |                      Clustered LVM:      |  |  |&lt;br /&gt;
 |  |  |   _________________________________      |       |                   |                                   |                   |       |   _________________________________      |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+  |  |&lt;br /&gt;
 |  |  |   __________________________________     |       |                   |                                   |                   |       |   __________________________________     |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+  |  |&lt;br /&gt;
 |  |  |   ___________________________________    |       |                   |                                   |                   |       |   ___________________________________    |  |  |&lt;br /&gt;
 |  |  \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/       |                   |                                   |                   |       \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/  |  |&lt;br /&gt;
 |  |                                                     |                   |                                   |                   |                                                     |  |&lt;br /&gt;
 |  |      _________________________________              |                   |                                   |                   |           _________________________________         |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm01-win2008_]-------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm01-win2008_]--------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm03-win7_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm03-win7_]-----------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm04-win8_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm04-win8_]-----------+  |&lt;br /&gt;
 |  |      _______________________________                |                   |                                   |                   |           _______________________________           |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm07-rhel6_]---------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm07-rhel6_]----------+  |&lt;br /&gt;
 |  |      ________________________________               |                   |                                   |                   |           ________________________________          |  |&lt;br /&gt;
 |  \-----[_/dev/an-c05n02_vg0/vm08-sles11_]--------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm08-sles11_]---------/  |&lt;br /&gt;
 |         ___________________________                    |                   |                                   |                   |           ___________________________                  |&lt;br /&gt;
 |     /--[_/dev/an-c05n01_vg0/shared_]-------------------/                   |                                   |                   \----------[_/dev/an-c05n01_vg0/shared_]--\              |&lt;br /&gt;
 |     |   _________                                                          |     _________________________     |                                                  ________   |              |&lt;br /&gt;
 |     \--[_/shared_]                                                         |    | an-s01         Switch 1 |    |                                                 [_shared_]--/              |&lt;br /&gt;
 |                                                        ____________________|    |____  Back-Channel   ____|    |____________________                                                        |&lt;br /&gt;
 |                                                       | IPMI               =----=_03_]    Network    [_04_=----=               IPMI |                                                       |&lt;br /&gt;
 |                                                       | 10.20.51.1        ||    |_________________________|    ||        10.20.51.2 |                                                       |&lt;br /&gt;
 |                                  _________    _____   | 00:19:99:9C:9B:9E ||    | an-s02         Switch 2 |    || 00:19:99:9A:D8:E8 |   _____    _________                                  |&lt;br /&gt;
 |                                 {_sensors_}--[_BMC_]--|___________________||    |                         |    ||___________________|--[_BMC_]--{_sensors_}                                 |&lt;br /&gt;
 |                                                             ______ ______  |    |       VLAN ID 100       |    |  ______ ______                                                             |&lt;br /&gt;
 |                                                            | PSU1 | PSU2 | |    |____   ____   ____   ____|    | | PSU1 | PSU2 |                                                            |&lt;br /&gt;
 |____________________________________________________________|______|______|_|    |_03_]_[_07_]_[_08_]_[_04_|    |_|______|______|____________________________________________________________|&lt;br /&gt;
                                                                   || ||             |      |      |       |             || ||                                                                  &lt;br /&gt;
                                       /---------------------------||-||-------------|------/      \-------|-------------||-||---------------------------\                                      &lt;br /&gt;
                                       |                           || ||             |                     |             || ||                           |                                      &lt;br /&gt;
                        _______________|___                        || ||   __________|________     ________|__________   || ||                        ___|_______________                       &lt;br /&gt;
                       |             UPS 1 |                       || ||  |             PDU 1 |   |             PDU 2 |  || ||                       |             UPS 2 |                      &lt;br /&gt;
                       | an-u01            |                       || ||  | an-p01            |   | an-p02            |  || ||                       | an-u02            |                      &lt;br /&gt;
             _______   | 10.20.3.1         |                       || ||  | 10.20.2.1         |   | 10.20.2.2         |  || ||                       | 10.20.3.1         |   _______            &lt;br /&gt;
            {_Mains_}==| 00:C0:B7:58:3A:5A |=======================||=||==| 00:C0:B7:56:2D:AC |   | 00:C0:B7:59:55:7C |==||=||=======================| 00:C0:B7:C8:1C:B4 |=={_Mains_}           &lt;br /&gt;
                       |___________________|                       || ||  |___________________|   |___________________|  || ||                       |___________________|                      &lt;br /&gt;
                                                                   || ||                 || ||     || ||                 || ||                                                                  &lt;br /&gt;
                                                                   || \\===[ Port 1 ]====// ||     || \\====[ Port 2 ]===// ||                                                                  &lt;br /&gt;
                                                                   \\======[ Port 1 ]=======||=====//                       ||                                                                  &lt;br /&gt;
                                                                                            \\==============[ Port 2 ]======//                                                                  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:keanu-woah_01.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Subnets ==&lt;br /&gt;
&lt;br /&gt;
The cluster will use three separate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/16&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;255.255.0.0&amp;lt;/span&amp;gt;) networks;&lt;br /&gt;
&lt;br /&gt;
{{note|1=There are situations where it is not possible to add additional network cards, blades being a prime example. In these cases it will be up to the admin to decide how to proceed. If there is sufficient bandwidth, you can merge all networks, but it is advised in such cases to isolate IFN traffic from the SN/BCN traffic using [[VLAN]]s.}}&lt;br /&gt;
&lt;br /&gt;
If you plan to have two or more &#039;&#039;Anvil!&#039;&#039; platforms on the same network, then it is recommended that you use the third octal of the IP addresses to identify the cluster. We&#039;ve found the following works well:&lt;br /&gt;
&lt;br /&gt;
* Third octal is the cluster ID times 10&lt;br /&gt;
* Fourth octal is the node ID.&lt;br /&gt;
&lt;br /&gt;
In our case, we&#039;re building our fifth cluster, so node #1 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.1&amp;lt;/span&amp;gt; and node #2 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.2&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Purpose&lt;br /&gt;
!Subnet&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Internet-Facing Network ([[IFN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Servers hosted by the &#039;&#039;Anvil!&#039;&#039; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.1.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the server&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Storage Network ([[SN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
|-&lt;br /&gt;
|Back-Channel Network ([[BCN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Node-specific [[IPMI]] or other out-of-band management devices will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Network switches will use the IP addresses &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.1.x&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the switch&#039;s sequence number.&lt;br /&gt;
* Switched [[PDU]]s, which we will use as backup fence devices, will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.2.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the PDU&#039;s sequence number.&lt;br /&gt;
* Network-managed [[UPS]]es with use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.3.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the UPS&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We will be using six interfaces, bonded into three pairs of two NICs in Active/Passive (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) configuration. Each link of each bond will be on alternate switches. We will also configure affinity by specifying interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; as primary for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; interfaces, respectively. This way, when everything is working fine, all traffic is routed through the same switch for maximum performance.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Red Hat supports bonding modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; as of [[RHEL]] 6.4. We do not recommend these bonding modes as we&#039;ve found the most reliable and consistent ability to survive switch failure and recovery with mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; only. If you wish to use a different bonding more, please be sure to test various failure modes extensively!}}&lt;br /&gt;
&lt;br /&gt;
If you can not install six interfaces in your server, then four interfaces will do with the [[SN]] and [[BCN]] networks merged.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you wish to merge the [[SN]] and [[BCN]] onto one interface, test to ensure that the storage traffic will not block cluster communication. Test by forming your cluster and then pushing your storage to maximum read and write performance for an extended period of time (minimum of several seconds). If the cluster partitions, you will need to do some advanced quality-of-service or other network configuration to ensure reliable delivery of cluster network traffic.}}&lt;br /&gt;
&lt;br /&gt;
[[image:brocade_icx6610_stock_01.jpg|thumb|right|375px|Brocade [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page ICX6610] switches. Photo by Brocade.]]&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use two [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page Brocade ICX6610] switches, stacked.&lt;br /&gt;
&lt;br /&gt;
* Brocade ICX6610 [[Brocade Notes|stack switch configuration]].&lt;br /&gt;
&lt;br /&gt;
We will be using three [[VLAN]]s to isolate the three networks:&lt;br /&gt;
&lt;br /&gt;
* [[BCN]] will have VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[SN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[IFN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All other unassigned ports will be in the default VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, effectively disabling those ports.&lt;br /&gt;
&lt;br /&gt;
The actual mapping of interfaces to bonds to networks will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Subnet&lt;br /&gt;
!Cable Colour&lt;br /&gt;
![[VLAN]] ID&lt;br /&gt;
!Link 1&lt;br /&gt;
!Link 2&lt;br /&gt;
!Bond&lt;br /&gt;
!IP&lt;br /&gt;
|-&lt;br /&gt;
|[[BCN]]&lt;br /&gt;
|White&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[SN]]&lt;br /&gt;
|Green&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[IFN]]&lt;br /&gt;
|Black&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== A Note on STP ===&lt;br /&gt;
&lt;br /&gt;
Scanning Tree Protocol, [[STP]], is a protocol used for detecting and protecting against switch loops. Without it, if both ends of the same cable plugged into the same switch or VLAN, or if two cables run between the same pair of switches, a [[broadcast storm]] could cause the switches to hang and traffic would stop routing.&lt;br /&gt;
&lt;br /&gt;
The problem with STP in HA clusters though is that the attempt to detect loops requires blocking all other traffic for a short time. Though this is short, it is usually long enough to cause corosync to think that the peer node has failed, triggering a fence action. &lt;br /&gt;
&lt;br /&gt;
For this reason, we need to disable STP, either globally or at least on the ports used by corosync and drbd. How you actually do this will depend on the make and model of switch you have.&lt;br /&gt;
&lt;br /&gt;
With STP disabled, at least partially, the onus does fall on you to ensure that no one causes a switch loop. Please be sure to inform anyone who might plug things into the cluster&#039;s switches about this issue. Ensure that people are careful about what they plug into the switches and that new connections will not trigger a loop.&lt;br /&gt;
&lt;br /&gt;
== Setting Up the Network ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The following steps can easily get confusing, given how many files we need to edit. Losing access to your server&#039;s network is a very real possibility! &#039;&#039;&#039;Do not continue without direct access to your servers!&#039;&#039;&#039; If you have out-of-band access via [[iKVM]], console redirection or similar, be sure to test that it is working before proceeding.}}&lt;br /&gt;
&lt;br /&gt;
=== Planning The Use of Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
In production clusters, I generally intentionally get three separate dual-port controllers (two on-board interfaces plus two separate dual-port PCIe cards). I then ensure that no bond uses two interfaces on the same physical board. Thus, should a card or its bus interface fail, none of the bonds will fail completely.&lt;br /&gt;
&lt;br /&gt;
Lets take a look at an example layout;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ____________________                            &lt;br /&gt;
| [ an-c05n01 ]      |                           &lt;br /&gt;
|         ___________|            _______              &lt;br /&gt;
|        |     ______|           | bond0 |             &lt;br /&gt;
|        | O  | eth0 =-----------=---.---=------{&lt;br /&gt;
|        | n  |_____||  /--------=--/    |             &lt;br /&gt;
|        | b         |  |        |_______|             &lt;br /&gt;
|        | o   ______|  |         _______        &lt;br /&gt;
|        | a  | eth1 =--|--\     | bond1 |      &lt;br /&gt;
|        | r  |_____||  |   \----=--.----=------{&lt;br /&gt;
|        | d         |  |  /-----=--/    |       &lt;br /&gt;
|        |___________|  |  |     |_______|       &lt;br /&gt;
|         ___________|  |  |      _______        &lt;br /&gt;
|        |     ______|  |  |     | bond2 |       &lt;br /&gt;
|        | P  | eth2 =--|--|-----=---.---=------{&lt;br /&gt;
|        | C  |_____||  |  |  /--=--/    |       &lt;br /&gt;
|        | I         |  |  |  |  |_______|       &lt;br /&gt;
|        | e   ______|  |  |  |                  &lt;br /&gt;
|        |    | eth3 =--/  |  |                  &lt;br /&gt;
|        | 1  |_____||     |  |                  &lt;br /&gt;
|        |___________|     |  |                  &lt;br /&gt;
|         ___________|     |  |                  &lt;br /&gt;
|        |     ______|     |  |                  &lt;br /&gt;
|        | P  | eth4 =-----/  |                  &lt;br /&gt;
|        | C  |_____||        |                  &lt;br /&gt;
|        | I         |        |                  &lt;br /&gt;
|        | e   ______|        |                  &lt;br /&gt;
|        |    | eth5 =--------/                  &lt;br /&gt;
|        | 2  |_____||                           &lt;br /&gt;
|        |___________|                           &lt;br /&gt;
|____________________|                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the possible failure scenarios:&lt;br /&gt;
&lt;br /&gt;
* The on-board controllers fail;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 1&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
* The PCIe #1 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
* The PCIe #2 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
&lt;br /&gt;
In all three failure scenarios, no network interruption occurs making for the most robust configuration possible.&lt;br /&gt;
&lt;br /&gt;
=== Connecting Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
As we will see soon, each node can be fenced either by calling its [[IPMI]] interface or by calling the [[PDU]] and cutting the node&#039;s power. Each of these methods are inherently single points of failure as each has only one network connection. To work around this concern, we will connect all IPMI interfaces to one switch and the PDUs to the secondary switch. This way, should a switch fail, only one of the two fence devices will fail and fencing in general will still be possible via the alternate fence device.&lt;br /&gt;
&lt;br /&gt;
By convention, we always connect the IPMI interfaces to the primary switch and the PDUs to the second switch.&lt;br /&gt;
&lt;br /&gt;
= Let&#039;s Build! =&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to need to install a bunch of programs, and one of those programs is needed before we can reconfigure the network. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge-utils&amp;lt;/span&amp;gt; has to be installed right away, so now is a good time to just install everything we need.&lt;br /&gt;
&lt;br /&gt;
== Why so Much Duplication of Commands? ==&lt;br /&gt;
&lt;br /&gt;
Most, but &#039;&#039;&#039;not&#039;&#039;&#039; all, commands will be issues equally on both nodes. At least up until we start configuring the cluster. To make it clear what to run on which node, all commands are defined either beside or under the node name on which to run the command.&lt;br /&gt;
&lt;br /&gt;
This does lead to a lot of duplication, but it&#039;s important to make sure it is clear when some command runs only on one node or the other. So please be careful, particularly later on, that you don&#039;t accidentally run a command on the wrong node.&lt;br /&gt;
&lt;br /&gt;
== Red Hat Enterprise Linux Specific Steps ==&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux is a commercial operating system that includes access to their repositories. This requires purchasing [http://www.redhat.com/products/enterprise-linux/server/ entitlements] and then [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/entitlements.html registering] machines with their [https://rhn.redhat.com Red Hat Network].&lt;br /&gt;
&lt;br /&gt;
This tutorial uses [[GFS2]], which is provided by their [http://www.redhat.com/products/enterprise-linux-add-ons/resilient-storage/ Resilient Storage Add-On]. The includes the [http://www.redhat.com/products/enterprise-linux-add-ons/high-availability/ High-Availability Add-On] which provides the rest of the HA cluster stack. &lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve finished your install, you can quickly register your node with RHN and add the resilient storage add-on with the following two commands.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You need to replace &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$user&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$pass&amp;lt;/span&amp;gt; with your RHN account details.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n01.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n02.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get any errors from the above commands, please contact your support representative. They will be able to help sort out any account or entitlement issues.&lt;br /&gt;
&lt;br /&gt;
== Update the OS ==&lt;br /&gt;
&lt;br /&gt;
Before we begin at all, let&#039;s update our OS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Required Programs ==&lt;br /&gt;
&lt;br /&gt;
This will install all the software needed to run the &#039;&#039;Anvil!&#039;&#039; and configure [[IPMI]] for use as a fence device. This won&#039;t cover [[DRBD]] or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; which will be covered in dedicated sections below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we go any further, we&#039;ll want to destroy the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge. We&#039;re going to be creating our own bridge that gives our servers direct access to the outside network.&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; does &#039;&#039;&#039;not&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you already see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; when you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;, the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge has already started. You can stop and disable it with the following commands;&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; &#039;&#039;&#039;does&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; should be gone now and it won&#039;t return.&lt;br /&gt;
&lt;br /&gt;
== Installing Programs Needed for Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Sep. 01, 2014; As of a recent update, the perl modules installed in this section no longer work. The most recent release of the monitoring and alert system has been changed to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;postfix&amp;lt;/span&amp;gt; running as a secured local relay to the desired mail server. This section of the tutorial will be rewritten as soon as possible to reflect the new mail system.}}&lt;br /&gt;
&lt;br /&gt;
The alert system will be using is written in perl. Some modules need to be installed from source, which requires the develop environment group and some development libraries to be installed. If you prefer to monitor your nodes another way, then you can skip this section.&lt;br /&gt;
&lt;br /&gt;
This installs a group of programs used for development environments.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need a few more packages still. This steps adds those packages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next stage installs some perl modules that are not available as RPM packages. Specifically, it tells perl to not prompt for input and just do the install. This saves a lot of questions and answers. If you need to do a non-standard [[CPAN]] install, skip the first line and you will run interactively.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The most recent version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YAML&amp;lt;/span&amp;gt; fails to install because it depends on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Module::Install::TestBase&amp;lt;/span&amp;gt;, which in turn depends on itself, and so fails to install. Please skip this part for now. If you need assistance, please feel free to [[Support|contact us]] and we will be happy to assist.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... No seriously, go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done! &lt;br /&gt;
&lt;br /&gt;
We&#039;ll setup the alert system a little later on. Now though, all the dependencies will have been met.&lt;br /&gt;
&lt;br /&gt;
== Switch Network Daemons ==&lt;br /&gt;
&lt;br /&gt;
The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; daemon is much more flexible and is perfect for machines like laptops which move around networks a lot. However, it does this by making a lot of decisions for you and changing the network as it sees fit. As good as this is for laptops and the like, it&#039;s not appropriate for servers. We will want to use the traditional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; to start with the system.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Altering Which Daemons Start on Boot ==&lt;br /&gt;
&lt;br /&gt;
Several of the applications we installed above include [[daemon]]s that either start on boot or stay off on boot. Likewise, some daemons remain stopped after they&#039;re installed, and we want to start them now.&lt;br /&gt;
&lt;br /&gt;
As we work on each component, we&#039;ll discuss in more detail why we want each to either start or stop on boot. For now, let&#039;s just make the changes.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt; command to make sure the daemons we want to start on boot do so.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next, we&#039;ll tell the system what daemons to leave off on boot.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now start the daemons we&#039;ve installed and want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, stop the daemons we don&#039;t want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can verify that the services you want to start will and the ones you don&#039;t want to won&#039;t using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you did a minimal OS install, or any install without a graphical interface, you will be booting into [https://en.wikipedia.org/wiki/Runlevel#Red_Hat_Linux_and_Fedora run-level] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;. If you did install a graphical interface, which is not wise, then your default run-level will either be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;. You can determine which by looking in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/inittab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once you know the run-level you&#039;re using, look for the daemon you are interested in and the see if it&#039;s set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:on&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:off&amp;lt;/span&amp;gt;. That will confirm that the associated daemon is set to start on boot or not, respectively.&lt;br /&gt;
&lt;br /&gt;
== Network Security ==&lt;br /&gt;
&lt;br /&gt;
The interfaces connected to the [[IFN]] are usually connected to an untrusted network, like the Internet. If you do not need access to the IFN from the nodes themselves, you can increase security by not assigning an IP address to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; interface which we will configure shortly. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge device will need to be up so that virtual machines can route through it to the outside world, of course.&lt;br /&gt;
&lt;br /&gt;
If you do decide to assign an IP to the nodes&#039; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;, you will want to restrict inbound access as much as possible. A good policy is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt; all traffic inbound from the hosted servers, unless you trust them specifically. &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to open ports for both Red Hat&#039;s high-availability add-on components and LinBit&#039;s DRBD software. You can find details here:&lt;br /&gt;
&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html#s1-iptables_firewall-CA RHEL 6 Cluster Configuration, Firewall Setup]&lt;br /&gt;
* [http://www.drbd.org/users-guide-8.3/s-prepare-network.html Linbit&#039;s DRBD, Firewall Configuration]&lt;br /&gt;
&lt;br /&gt;
Specifically, we&#039;ll be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ACCEPT&amp;lt;/span&amp;gt;ing the ports listed below on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Component&lt;br /&gt;
!Protocol&lt;br /&gt;
!Port&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[dlm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;21064&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[drbd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;+&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[luci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8084&amp;lt;/span&amp;gt;&lt;br /&gt;
|&#039;&#039;Optional&#039;&#039; web-based configuration tool, not used in this tutorial but documented for reference.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[modclusterd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16851&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ricci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11111&amp;lt;/span&amp;gt;&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7791&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[UDP]]/[[multicast]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5404&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5405&amp;lt;/span&amp;gt;&lt;br /&gt;
|Uses a multicast group for cluster communications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuring iptables ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; is an entire topic on its own. There are many good tutorials on the Internet discussing it, including an [[TLUG Talk: Netfilter|older introduction to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; tutorial]] hosted here. If you are unfamiliar with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt;, it is well worth taking a break from this tutorial and getting familiar with it, in concept if nothing else.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This opens up enough ports for 100 virtual servers. This is entirely arbitrary range, which you probably want to reduce (or possibly increase). This also allows incoming connections from both the [[BCN]] and [[IFN]], which you may want to change. Please look below for the &#039;remote desktop&#039; rules comment.}}&lt;br /&gt;
&lt;br /&gt;
The first thing we want to do is see what the current firewall policy is. We can do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt;, a tool designed to backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; but also very useful for seeing what configuration is currently in memory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:17 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [440:262242]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:17 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:51 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [336:129880]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:51 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This tutorial will create two DRBD resources. Each resource will use a different [[TCP]] port. By convention, they start at port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and increment up per resource. So we will be opening ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Open ports;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [52:8454]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [16:5452]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, the cluster stack should work, but we&#039;re not done yet. The changes we made above altered packet filtering in memory, but the configuration has not been saved to disk. This configuration is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/iptables&amp;lt;/span&amp;gt;. You could pipe the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt; to it, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; initialization script provides a facility to save the configuration, so we will use it instead.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; and check that the changes stuck.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:06:43 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41947:617170766]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:06:43 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:07:00 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41570:54856696]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:07:00 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to enable any other kind of access or otherwise modify the firewall on each node, please do so now. This way, as you proceed with building the &#039;&#039;Anvil!&#039;&#039;, you&#039;ll hit firewall problems as soon as they arise.&lt;br /&gt;
&lt;br /&gt;
== Mapping Physical Network Interfaces to ethX Device Names ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This process is a little lengthy and it would add a fair amount of length to document the process on both nodes. So for this section, only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will be shown. Please repeat this process for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:an-c05n01_crappy_back_pic_showing_NIC_names_01.jpg|thumb|500px|right|Awesome quality picture of labelled interfaces.]]&lt;br /&gt;
&lt;br /&gt;
Consistency is the mother of stability.&lt;br /&gt;
&lt;br /&gt;
When you install [[RHEL]], it somewhat randomly assigns an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ethX&amp;lt;/span&amp;gt; device to each physical network interfaces. Purely technically speaking, this is fine. So long as you know which interface has which device name, you can setup the node&#039;s networking.&lt;br /&gt;
&lt;br /&gt;
However!&lt;br /&gt;
&lt;br /&gt;
Consistently assigning the same device names to physical interfaces makes supporting and maintaining nodes a lot easier!&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got six physical network interfaces, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. As you recall from earlier, we want to make sure that each pair of interfaces for each network spans two physical network cards. &lt;br /&gt;
&lt;br /&gt;
Most servers have at least two on-board network cards labelled &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;quot;. These tend to correspond to lights on the front of the server, so we will start by naming these interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;, respectively. After that, you are largely free to assign names to interfaces however you see fit.&lt;br /&gt;
&lt;br /&gt;
What matters most of all is that, whatever order you choose, it&#039;s consistent across your &#039;&#039;Anvil!&#039;&#039; nodes.&lt;br /&gt;
&lt;br /&gt;
Before we touch anything, let&#039;s make a backup of what we have. This way, we have an easy out in case we &amp;quot;oops&amp;quot; a files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /root/backups/&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
created directory /root/backups&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
network-scripts/ifcfg-lo&lt;br /&gt;
network-scripts/ifdown -&amp;gt; ../../../sbin/ifdown&lt;br /&gt;
network-scripts/ifdown-bnep&lt;br /&gt;
network-scripts/ifdown-eth&lt;br /&gt;
network-scripts/ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-ipv6&lt;br /&gt;
network-scripts/ifdown-isdn -&amp;gt; ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-post&lt;br /&gt;
network-scripts/ifdown-ppp&lt;br /&gt;
network-scripts/ifdown-routes&lt;br /&gt;
network-scripts/ifdown-sit&lt;br /&gt;
network-scripts/ifdown-tunnel&lt;br /&gt;
network-scripts/ifup -&amp;gt; ../../../sbin/ifup&lt;br /&gt;
network-scripts/ifup-aliases&lt;br /&gt;
network-scripts/ifup-bnep&lt;br /&gt;
network-scripts/ifup-eth&lt;br /&gt;
network-scripts/ifup-ippp&lt;br /&gt;
network-scripts/ifup-ipv6&lt;br /&gt;
network-scripts/ifup-isdn -&amp;gt; ifup-ippp&lt;br /&gt;
network-scripts/ifup-plip&lt;br /&gt;
network-scripts/ifup-plusb&lt;br /&gt;
network-scripts/ifup-post&lt;br /&gt;
network-scripts/ifup-ppp&lt;br /&gt;
network-scripts/ifup-routes&lt;br /&gt;
network-scripts/ifup-sit&lt;br /&gt;
network-scripts/ifup-tunnel&lt;br /&gt;
network-scripts/ifup-wireless&lt;br /&gt;
network-scripts/init.ipv6-global&lt;br /&gt;
network-scripts/net.hotplug&lt;br /&gt;
network-scripts/network-functions&lt;br /&gt;
network-scripts/network-functions-ipv6&lt;br /&gt;
&lt;br /&gt;
sent 134870 bytes  received 655 bytes  271050.00 bytes/sec&lt;br /&gt;
total size is 132706  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Making Sure All Network Interfaces are Started ===&lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;, unplug each cable and see which interface shows a lost link. This will tell us what &#039;&#039;current&#039;&#039; name is given to a particular physical interface. We&#039;ll write the current name down beside the name of the interface we want. Once we&#039;ve done this to all interfaces, we&#039;ll now how we have to move names around.&lt;br /&gt;
&lt;br /&gt;
Before we can pull cables though, we have to tell the system to start all of the interfaces. By default, all but one or two interfaces will be disabled on boot.&lt;br /&gt;
&lt;br /&gt;
Run this to see which interfaces are up;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:303118 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:152952 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:344900765 (328.9 MiB)  TX bytes:14424290 (13.7 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, only the interface currently named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; was started. We&#039;ll need to edit the other interface configuration files to tell them to start when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; starts. To do this, we edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-ethX&amp;lt;/span&amp;gt; files and change &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT&amp;lt;/span&amp;gt; variable to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT=&amp;quot;yes&amp;quot;&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
By default, most interfaces will be set to try and acquire an IP address from a [[DHCP on an RPM-based OS|DHCP]] server, We can see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; already has an IP address, so to save time, we&#039;re going to tell the other interfaces to start without an IP address at all. If we didn&#039;t do this, restarting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; would take a long time waiting for DHCP requests to time out.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We skip &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth4&amp;lt;/span&amp;gt; in the next step because it&#039;s already up.}}&lt;br /&gt;
&lt;br /&gt;
Now we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the files. This is a lot faster and easier than editing each file by hand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Change eth0 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&lt;br /&gt;
# Change eth1 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&lt;br /&gt;
# Change eth2 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&lt;br /&gt;
# Change eth3 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&lt;br /&gt;
# Change eth5 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see how the file was changed by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to compare the backed up version against the edited one. Let&#039;s look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt; to see this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-28 17:20:38.978458128 -0400&lt;br /&gt;
@@ -2 +2 @@&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -5 +5 @@&lt;br /&gt;
-ONBOOT=&amp;quot;no&amp;quot;&lt;br /&gt;
+ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent. You can check the other files as well to confirm that they were edited as well, if you wish. Once you are happy with the changes, restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; initialization script.&lt;br /&gt;
&lt;br /&gt;
{{note|1= You may see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[FAILED]&amp;lt;/span&amp;gt; while stopping some interfaces, this is not a concern.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Determining IP information for eth4... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, we&#039;ll see all six interfaces have been started!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2433 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:150042 (146.5 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:35  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c335/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2416 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:148176 (144.7 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:04  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e004/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:36 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1026 (1.0 KiB)  TX bytes:5976 (5.8 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:05  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e005/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:1606 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:98242 (95.9 KiB)  TX bytes:2102 (2.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:308572 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153402 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345254511 (329.2 MiB)  TX bytes:14520378 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:2052 (2.0 KiB)  TX bytes:3114 (3.0 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can start creating the list of what physical interfaces have what current names.&lt;br /&gt;
&lt;br /&gt;
=== Finding Current Names for Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Once you know how you want your interfaces, create a little table like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we want to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; to watch the system log file &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; and print to screen messages as they&#039;re written to the log. To do this, run;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run this, the cursor will just sit there and nothing will be printed to screen at first. This is fine, this tells us that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; is waiting for new records. We&#039;re now going to methodically unplug each network cable, wait a moment and then plug it back in. Each time we do this, we&#039;ll write down the interface name that was reported as going down and then coming back up. &lt;br /&gt;
&lt;br /&gt;
The first cable we&#039;re going to unplug is the one in the physical interface we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:36:06 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 17:36:19 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see that the physical interface that we &#039;&#039;want&#039;&#039; to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; is currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;. So we&#039;ll add that to our chart.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll unplug the cable we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:38:01 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 17:38:04 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;, so we&#039;ll write that in beside the &amp;quot;Want&amp;quot; column&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep doing this for the other four cables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:39:28 an-c05n01 kernel: e1000e: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:30 an-c05n01 kernel: e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:35 an-c05n01 kernel: e1000e: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:37 an-c05n01 kernel: e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:40 an-c05n01 kernel: igb: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:43 an-c05n01 kernel: igb: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 17:39:47 an-c05n01 kernel: igb: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:51 an-c05n01 kernel: igb: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The finished table is this;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we know how we want to move the names around!&lt;br /&gt;
&lt;br /&gt;
=== Building the MAC Address List ===&lt;br /&gt;
&lt;br /&gt;
Every network interface has a unique [[MAC]] address assigned to it when it is built. Think of this sort of like a globally unique serial number. Because it&#039;s guaranteed to be unique, it&#039;s a convenient way for the [[operating system]] to create a persistent map between real interfaces and names. If we didn&#039;t use these, then each time you rebooted your node, it would possibly mean that the names get juggled. Not very good.&lt;br /&gt;
&lt;br /&gt;
[[RHEL]] uses two files for creating this map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-eth*&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt; can be rebuilt by running a command, so we&#039;re not going to worry about it. We&#039;ll just delete in a little bit and then recreate it.&lt;br /&gt;
&lt;br /&gt;
The files we care about are the six &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files. Inside each of these is a variable named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt;. The value set here will tell the OS what physical network interface the given file is configuring. We know from the list we created how we want to move the files around. &lt;br /&gt;
&lt;br /&gt;
To recap:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So lets create a new table. This one we will use to write down the MAC addresses we want to set for each device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we know that the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is the one we want to move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; to show the information for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; interface only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:315979 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153610 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345711965 (329.6 MiB)  TX bytes:14555290 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We want the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; value, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;. This will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, so lets write that down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; to be the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, but this time we&#039;ll do a little [[bash]]-fu to reduce the output to just the MAC address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth5 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:19:99:9C:9B:9F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This simply reduced the output to just the line with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; line in it, then it split the line on spaces and printed just the fifth value, which is the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. We&#039;ll write this down beside &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;. So lets get the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; MAC address and add it to the list as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth0 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:34&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth1 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:35&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second to last one is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;, which will move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth2 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:04&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; moves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth3 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:05&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our complete list of new MAC address is;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:34&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:04&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
=== Changing the Interface Device Names ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step is best done when you have direct access to the node. The reason is that the following changes require the network to be totally stopped in order to work without a reboot. If you can&#039;t get physical access, then when we get to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start_udev&amp;lt;/span&amp;gt; step, reboot the node instead.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re about to change which physical interfaces have which device names. If we don&#039;t stop the network first, we won&#039;t be able to restart them later. If we waited until later, the kernel would see a conflict between what it thinks the MAC-to-name mapping should be compared to what it sees in the configuration. The only way around this is a reboot, which is kind of a waste. So by stopping the network now, we clear the kernel&#039;s view of the network and avoid the problem entirely.&lt;br /&gt;
&lt;br /&gt;
So, stop the network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm that it&#039;s stopped by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;. It should return nothing at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;No output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Next, delete the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt; file. We&#039;ll regenerate it after we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/udev/rules.d/70-persistent-net.rules &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
rm: remove regular file `/etc/udev/rules.d/70-persistent-net.rules&#039;? y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to edit each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files and change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; value to the new addresses we wrote down in our list. Let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the new value from our list;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the file and then move on to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&amp;lt;/span&amp;gt; entry to the new MAC address;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Continue editing the other four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth{2..5}&amp;lt;/span&amp;gt; files in the same manner.&lt;br /&gt;
&lt;br /&gt;
Once all the files have been edited, we will regenerate the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
start_udev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting udev:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Test the New Network Name Mapping ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start networking again and see if the remapping worked!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Bringing up interface eth4:&lt;br /&gt;
Determining IP information for eth4...PING 10.255.255.254 (10.255.255.254) from 10.255.0.33 eth4: 56(84) bytes of data.&lt;br /&gt;
&lt;br /&gt;
--- 10.255.255.254 ping statistics ---&lt;br /&gt;
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3000ms&lt;br /&gt;
pipe 3&lt;br /&gt;
 failed.&lt;br /&gt;
                                                           [FAILED]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What happened!?&lt;br /&gt;
&lt;br /&gt;
If you recall, the old &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; device was the interface we moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is not plugged into a network with access to our DHCP server, so it failed to get an IP address. To fix this, we&#039;ll disable DHCP on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; and enable it on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; (which used to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;dhcp&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll restart the network and this time we should be good.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:&lt;br /&gt;
Determining IP information for eth0... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last step is to again &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system log and then unplug and plug-in the cables. If everything went well, they should be in the right order now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 18:44:24 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:27 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:31 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:34 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:35 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:38 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:39 an-c05n01 kernel: e1000e: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:42 an-c05n01 kernel: e1000e: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:45 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:49 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:50 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:54 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo! Done!&lt;br /&gt;
&lt;br /&gt;
At this point, I like to refresh the backup. We&#039;re going to be making more changes later at it would be nice to not have to redo this step again, should something go wrong.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
&lt;br /&gt;
sent 1955 bytes  received 130 bytes  4170.00 bytes/sec&lt;br /&gt;
total size is 132711  speedup is 63.65&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Repeat this process for the other node. Once both nodes have the matching physical interface to device names, we&#039;ll be ready to move on to the next step!&lt;br /&gt;
&lt;br /&gt;
== Configuring our Bridge, Bonds and Interfaces ==&lt;br /&gt;
&lt;br /&gt;
To setup our network, we will need to edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-bondX&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; scripts.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; device is a bridge, like a virtual network switch, which will be used to route network connections between the virtual machines and the outside world, via the [[IFN]]. If you look in the [[#Network|network map]], you will see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; virtual interface connects to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, which links to the outside world, and it connects to all servers. Just like a normal switch does. You will also note that the bridge will have the [[IP]] addresses, not the bonded interface &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;. It will instead be slaved to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; virtual devices work a lot like the network version of [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] arrays. They take two real links and turn them into one redundant link. In our case, each link in the bond will go to a different switch, protecting our links for interface, cable, port or entire switch failures. Should any of these fail, the bond will switch to the backup link so quickly that the applications on the nodes will not notice anything happened.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Bridge configuration files &#039;&#039;&#039;must&#039;&#039;&#039; have a file name which will sort &#039;&#039;&#039;after&#039;&#039;&#039; the interface and bridge files. The actual device name can be whatever you want though. If the system tries to start a bridge before its slaved interface is up, it will fail. I personally like to use the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbrX&amp;lt;/span&amp;gt; for &amp;quot;&#039;&#039;&#039;v&#039;&#039;&#039;irtual machine &#039;&#039;&#039;br&#039;&#039;&#039;idge&amp;quot;. You can use whatever makes sense to you, with the above concern in mind.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to be editing a lot of files. It&#039;s best to lay out what we&#039;ll be doing in a chart. So our setup will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Node&lt;br /&gt;
!BCN IP and Device&lt;br /&gt;
!SN IP and Device&lt;br /&gt;
!IFN IP and Device&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating New Network Configuration Files ===&lt;br /&gt;
&lt;br /&gt;
The new bond and bridge devices we want to create do not exist at all yet. So we will start by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt;ing the configuration files we will need.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Bridge ===&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start in reverse order, crafting the bridge&#039;s script first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you have a Red Hat account, you can read up on what the [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html option above] mean, and specifics of [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html bridge] devices. In case you don&#039;t though, here is a summary:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the actual name given to this device. Generally is matches the file name. In this case, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; and the file name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt;. This matching of file name to device name is by convention and not strictly required.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Ethernet&amp;lt;/span&amp;gt;, the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bridge&amp;lt;/span&amp;gt;, as we use here. Note that these values are &#039;&#039;&#039;case-sensitive&#039;&#039;&#039;! By setting this here, we&#039;re telling the [[OS]] that we&#039;re creating a bridge device.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NM_CONTROLLED&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, which is the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;, as we set here. This tells [[Network Manager]] that it is not allowed to manage this device. We&#039;ve removed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; package, so this is not strictly needed, but we&#039;ll add it just in case it gets installed in the future.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BOOTPROTO&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;, which we&#039;re using here, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dhcp&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bootp&amp;lt;/span&amp;gt; if you want the interface to get an IP from a DHCP or BOOTP server, respectively. We&#039;re setting it to static, so we want this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPADDR&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the [[dotted-decimal]] IP address we&#039;re assigning to this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NETMASK&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the dotted-decimal [[subnet mask]] for this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GATEWAY&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address the node will contact when we it needs to send traffic to other networks, like the Internet.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS1&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the primary domain name server to use when the node needs to translate a host or domain name into an IP address which wasn&#039;t found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the backup domain name server, should the primary DNS server specified above fail.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, as we&#039;ve set it here, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;. If two or more interfaces has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt; set, the interface with this variable set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating the Bonded Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;ll can create the three bonding configuration files. This is where two physical network interfaces are tied together to work like a single, highly available network interface. You can think of a bonded interface as being akin to [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]]; A new virtual device is created out of two real devices.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to see a long line called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html BONDING_OPTS]&amp;lt;/span&amp;gt;&amp;quot;. Let&#039;s look at the meaning of these options before we look at the configuration; &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the Linux kernel what kind of bond we&#039;re creating here. There are [https://www.kernel.org/doc/Documentation/networking/bonding.txt seven modes] available, each with a numeric value representing them. We&#039;re going use the &amp;quot;Active/Passive&amp;quot; mode, known as mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active-backup&amp;lt;/span&amp;gt;). As of [[RHEL]] 6.4, modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-rr&amp;lt;/span&amp;gt;) and mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-xor&amp;lt;/span&amp;gt;) are supported for use with [[corosync]]. Given the proven reliability of surviving numerous tested failure and recovery tests though, AN! still strongly recommends mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;miimon&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the kernel how often, in milliseconds, to check for unreported link failures. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt; which tells the bonding driver to check if the network cable has been unplugged or plugged in every 100 milliseconds. Most modern drivers will report link state via their driver, so this option is not strictly required, but it is recommended for extra safety.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;use_carrier&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; tells the driver to use the driver to maintain the link state. Some drivers don&#039;t support that. If you run into trouble where the link shows as up when it&#039;s actually down, get a new network card or try changing this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120000&amp;lt;/span&amp;gt; tells the driver to delay switching back to the primary interface for 120,000 milliseconds (120 seconds / 2 minutes). This is designed to give the switch connected to the primary interface time to finish booting. Setting this too low may cause the bonding driver to switch back before the network switch is ready to actually move data. Some switches will not provide a link until it is fully booted, so please experiment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;downdelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; tells the driver not to wait before changing the state of an interface when the link goes down. That is, when the driver detects a fault, it will switch to the backup interface immediately. This is the default behaviour, but setting this here insures that it is reset when the interface is reset, should the delay be somehow set elsewhere.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first bond we&#039;ll configure is for the Back-Channel Network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up is the bond for the Storage Network;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, we setup the bond for the Internet-Facing Network.&lt;br /&gt;
&lt;br /&gt;
Here we see a new option:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BRIDGE=&amp;quot;vbr2&amp;quot;&amp;lt;/span&amp;gt;; This tells the system that this bond is to be connected to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge when it is started.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with the bonds!&lt;br /&gt;
&lt;br /&gt;
=== Alter the Interface Configurations ===&lt;br /&gt;
&lt;br /&gt;
With the bridge and bonds in place, we can now alter the interface configurations.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve already edited these back when we were remapping the physical interface to device names. This time, we&#039;re going to clean them up, add a comment and slave them to their parent bonds. Note that the only difference between each node&#039;s given config file will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; variable&#039;s value. &lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 1;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6C&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6D&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EA&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EB&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:04&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:05&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2F&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the variables is not really important, from a technical perspective. However, we&#039;ve found that having the order consistent as possible between configs and nodes goes a long way to simplifying support and problem solving. It certainly helps reduce human error as well.&lt;br /&gt;
&lt;br /&gt;
If we compare the newly updated configs with one of the backups, we&#039;ll see a couple interesting things;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 18:39:59.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-29 13:25:03.443343494 -0400&lt;br /&gt;
@@ -1,2 +1 @@&lt;br /&gt;
-DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+# Back-Channel Network - Link 1&lt;br /&gt;
@@ -4 +3,3 @@&lt;br /&gt;
-NM_CONTROLLED=&amp;quot;yes&amp;quot;&lt;br /&gt;
+DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
+NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -6,2 +7,2 @@&lt;br /&gt;
-TYPE=&amp;quot;Ethernet&amp;quot;&lt;br /&gt;
-UUID=&amp;quot;ea03dc97-019c-4acc-b4d6-bc42d30d9e36&amp;quot;&lt;br /&gt;
+MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
+SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The notable part is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID&amp;lt;/span&amp;gt; where removed. These are not required, so we generally remove them. If you prefer to keep them, that is fine, too.&lt;br /&gt;
&lt;br /&gt;
== Loading the New Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you&#039;re connected to the nodes over the network and if the current IP was assigned by DHCP (or is otherwise different from the IP set in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;), your network connection will break. You will need to reconnect with the IP address you set.}}&lt;br /&gt;
&lt;br /&gt;
Simply restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth1:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth2:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth3:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth4:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth5:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface bond0:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond1:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond2:                               [  OK  ]&lt;br /&gt;
Bringing up interface vbr2:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These errors are normal. They&#039;re caused because we changed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; configuration files to reference bonded interfaces that, at the time we restarted the network, did not yet exist. If you restart the network again, you will see that the errors no longer appear.&lt;br /&gt;
&lt;br /&gt;
=== Verifying the New Network Config ===&lt;br /&gt;
&lt;br /&gt;
The first check to make sure everything works is to simply run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; and make sure everything we expect to be there is, in fact, there.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.20.50.1  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:821080 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160713 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:392278922 (374.1 MiB)  TX bytes:15344030 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet addr:10.10.50.1  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:6030 (5.8 KiB)  TX bytes:13752 (13.4 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:512206 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:222 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:34650974 (33.0 MiB)  TX bytes:25375 (24.7 KiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:570073 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160669 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:377010981 (359.5 MiB)  TX bytes:15339986 (14.6 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:4644 (4.5 KiB)  TX bytes:4602 (4.4 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:262105 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:19438941 (18.5 MiB)  TX bytes:22295 (21.7 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:251007 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15267941 (14.5 MiB)  TX bytes:4044 (3.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1386 (1.3 KiB)  TX bytes:9150 (8.9 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:250101 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:34 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15212033 (14.5 MiB)  TX bytes:3080 (3.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3543 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3543 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652772 (2.5 MiB)  TX bytes:2652772 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet addr:10.255.50.1  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4425 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:127 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:225580 (220.2 KiB)  TX bytes:17449 (17.0 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          inet addr:10.20.50.2  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06c/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:485064 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:29542689 (28.1 MiB)  TX bytes:3060 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          inet addr:10.10.50.2  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06d/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:420 (420.0 b)  TX bytes:3018 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING PROMISC MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:884093 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161539 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:414267432 (395.0 MiB)  TX bytes:15355495 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242549 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14772701 (14.0 MiB)  TX bytes:2082 (2.0 KiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:180 (180.0 b)  TX bytes:2040 (1.9 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:641600 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161526 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:399497547 (380.9 MiB)  TX bytes:15354517 (14.6 MiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242515 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769988 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:240 (240.0 b)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242493 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769885 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3545 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3545 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2658626 (2.5 MiB)  TX bytes:2658626 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet addr:10.255.50.2  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:16091 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:777873 (759.6 KiB)  TX bytes:20304 (19.8 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, everything is there!&lt;br /&gt;
&lt;br /&gt;
Next up is to verify the bonds. To do this, we can examine special files in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; virtual file system. These expose the kernel&#039;s view of things as if they were tradition files. So by reading these files, we can see how the bonded interfaces are operating in real time.&lt;br /&gt;
&lt;br /&gt;
There are three, one for each bond. Let&#039;s start by looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt; &amp;quot;file&amp;quot;, then we&#039;ll look at the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6c&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:eb&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the variables and values we see for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above:&lt;br /&gt;
&lt;br /&gt;
* Bond variables;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bonding Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which bonding mode is currently active. Here we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fault-tolerance (active-backup)&amp;lt;/span&amp;gt;, which is exactly what we wanted when we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt; in the bond&#039;s configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; if it is available. Recall that we set a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary&amp;lt;/span&amp;gt; interface to ensure that, when everything is working properly, all network traffic goes through the same switch to avoid congestion on the stack/uplink cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Currently Active Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which interface is being used at this time. If this shows the secondary interface, then either the primary has failed, or the primary has recovered by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer hasn&#039;t yet expired.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the effective link state of the bond. If either one of the slaved interfaces is active, this will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Polling Interval (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|If you recall, this was set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;ms, which tells the bond driver to verify the link state of the slaved interfaces.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Up Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us how long the bond driver will wait before switching to the secondary interface. We want immediate fail-over, so we have this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Down Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will wait for two minutes after a slaved interface comes up before it will consider it ready for use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Slaved interface variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave Interface&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name of the slaved device. The values below this reflect that named interface&#039;s state.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the current link state of the interface. Values you will see are: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt;. The first two are obvious. The third is the link state between when the link comes up and before the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer expires.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Speed&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you the link speed that the current interface is operating at. If it&#039;s ever lower than you expect, look in the switch configuration for statically set speeds. If that&#039;s not it, try another network cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Duplex&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you whether the given interface can send and receive network traffic at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;, or not, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;. All modern devices should support full duplex, so if you see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;, examine your switch and cables.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Link Failure Count&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|When the bond driver starts, this is set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Each time the link &amp;quot;fails&amp;quot;, which includes an intentional unplugging of the cable, this counter increments. There is no hard in this increasing if the &amp;quot;errors&amp;quot; where intentional or known. It can be useful in detecting flaky connections though, should you find this number to be higher than expected.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Permanent HW addr&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9c:9b:9e&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1b:21:81:c3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the real MAC address of the slaved interface. Those who are particularly observant will have noticed that, in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; output above, both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; showed the same MAC address. This is partly how active-passive bonding is able to fail over so extremely quickly. The MAC address of which ever interface is active will appear in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; address of both bond members.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave queue ID&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|In other bonding modes, this can be used to help direct certain traffic down certain slaved interface links. We won&#039;t use this so it should always be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:04&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6d&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last bond is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:34&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:05&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:ea&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That covers the bonds! The last thing to look at are the bridges. We can check them using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;brctl&amp;lt;/span&amp;gt; (bridge control) tool;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name	bridge id		STP enabled	interfaces&lt;br /&gt;
vbr2		8000.001b2181c334	no		bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name     bridge id               STP enabled     interfaces&lt;br /&gt;
vbr2            8000.001b2181c2ea       no              bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are four variables; Let&#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge name&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the device name we set when we created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge id&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c334&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c2ea&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is an automatically create unique ID for the given bridge.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;STP enabled&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us where [https://en.wikipedia.org/wiki/Spanning_Tree_Protocol spanning tree protocol] is enabled or not. Default is to be disabled, which is fine. If you enable it, it will help protect against loops that can cause broadcast storms and flood your network. Given how difficult it is to accidentally &amp;quot;plug both ends of a cable into the same switch&amp;quot;, it&#039;s generally safe to leave off.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;interfaces&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which network interfaces are &amp;quot;plugged into&amp;quot; the bridge. We don&#039;t have any servers yet, so only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is plugged in, which is the link that provides a route out to the real world. Later, when we create our servers, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; file will be created for each server&#039;s interface. These are the virtual &amp;quot;network cables&amp;quot; providing a link between the servers and the bridge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
== Adding Everything to /etc/hosts ==&lt;br /&gt;
&lt;br /&gt;
If you recall from the [[AN!Cluster Tutorial 2#Network]] section, we&#039;ve got two nodes, each with three networks and an IPMI interface, two network switches, two switched PDUs and two UPSes. We&#039;re also going to create two dashboard servers, each of which will have a connection to the [[BCN]] and the [[IFN]]. &lt;br /&gt;
&lt;br /&gt;
All of these have IP addresses. We want to be able to address them by names, which we can do by adding them to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file. If you prefer to have this centralized, you can always use internal DNS servers instead, but that is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
The format of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ip_addres&amp;gt;	&amp;lt;name&amp;gt;[ &amp;lt;name2&amp;gt; &amp;lt;name...&amp;gt; &amp;lt;nameN&amp;gt;]&amp;lt;/span&amp;gt;. We want the short domain and full domain name to resolve to the [[BCN]] IP address on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network. For this, we&#039;ll have multiple names on the BCN entry and then a single name for the [[SN]] and [[IFN]] entries.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save this to both nodes and then you can test that the names resolve properly using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gethostip -d $name&amp;lt;/span&amp;gt;. Lets look at the names we gave to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and verify they resolve to the desired IP addresses.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Test resolution of the foundation pack devices and the monitor packs as well. If they all resolve properly, we&#039;re ready to move on.&lt;br /&gt;
&lt;br /&gt;
== What is IPMI ==&lt;br /&gt;
&lt;br /&gt;
[[IPMI]], short for &amp;quot;Intelligent Platform Management Interface&amp;quot;, is a standardized network-attched device built in to many servers. It is a stand-alone device which allows external people and devices the ability to log in and check the state of the host server. It can read the various sensor values, press the power and reset switches, report whether the host node is powered on or not and so forth.&lt;br /&gt;
&lt;br /&gt;
Many companies build on the basic IPMI standard by adding advanced features like remote console access over the network, ability to monitor devices plugged into the server like the RAID controller and its hard drives and so on. Each vendor generally has a name for their implementation of IPMI;&lt;br /&gt;
&lt;br /&gt;
* Fujitsu calls theirs [http://globalsp.ts.fujitsu.com/dmsp/Publications/public/ds-iRMC-S3.pdf iRMC]&lt;br /&gt;
* HP calls theirs [https://en.wikipedia.org/wiki/HP_Integrated_Lights-Out iLO]&lt;br /&gt;
* Dell calls theirs [https://en.wikipedia.org/wiki/Dell_DRAC DRAC]&lt;br /&gt;
* IBM calls their [https://en.wikipedia.org/wiki/Remote_Supervisor_Adapter RSA]&lt;br /&gt;
&lt;br /&gt;
Various other vendors will have different names as well. In most cases though, they will all support the generic IPMI interface and Linux tools. We&#039;re going to use these tools to configure each node&#039;s IPMI &amp;quot;BMC&amp;quot;, Baseboard Management Controller, for use as a fence device.&lt;br /&gt;
&lt;br /&gt;
The idea here is this;&lt;br /&gt;
&lt;br /&gt;
If a node stops responding, the remaining surviving node can&#039;t simply assume the peer is off. We&#039;ll go into the details of &amp;quot;why not?&amp;quot; later in the fencing section. The remaining node will log into the peer&#039;s IPMI BMC and ask it to power off the host. Once off, the surviving node will verify that the power is off, confirming that the peer is certainly no longer alive and offering clustered services. With this known, recovery can safely begin.&lt;br /&gt;
&lt;br /&gt;
We need to assign an IP address to each IPMI BMC and then configure the user name and password to use later when connecting.&lt;br /&gt;
&lt;br /&gt;
We will also use the sensor values reported by the IPMI BMC in our monitoring and alert system. If, for example, a temperate climbs too high or too fast, the alert system will be able to see this and fire off an alert. &lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section walks through configuring IPMI on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. Please repeat for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We installed the needed IPMI tools earlier and we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; to start on boot. Verify that it&#039;s running now;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ipmi status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ipmi_msghandler module loaded.&lt;br /&gt;
ipmi_si module loaded.&lt;br /&gt;
ipmi_devintf module loaded.&lt;br /&gt;
/dev/ipmi0 exists.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; daemon is running and it was able to talk to the BMC. If this failed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/ipmi0&amp;lt;/span&amp;gt; would not exist. If this is the case for you, please find what make and model of IPMI BMC is used in your server and look for known issues with that chip.&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;ll check is that we can query IPMI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chassis&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool chassis status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
System Power         : on&lt;br /&gt;
Power Overload       : false&lt;br /&gt;
Power Interlock      : inactive&lt;br /&gt;
Main Power Fault     : false&lt;br /&gt;
Power Control Fault  : false&lt;br /&gt;
Power Restore Policy : previous&lt;br /&gt;
Last Power Event     : &lt;br /&gt;
Chassis Intrusion    : inactive&lt;br /&gt;
Front-Panel Lockout  : inactive&lt;br /&gt;
Drive Fault          : false&lt;br /&gt;
Cooling/Fan Fault    : false&lt;br /&gt;
Sleep Button Disable : not allowed&lt;br /&gt;
Diag Button Disable  : allowed&lt;br /&gt;
Reset Button Disable : allowed&lt;br /&gt;
Power Button Disable : allowed&lt;br /&gt;
Sleep Button Disabled: false&lt;br /&gt;
Diag Button Disabled : false&lt;br /&gt;
Reset Button Disabled: false&lt;br /&gt;
Power Button Disabled: false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! If you get something like this, you&#039;re past 90% of the potential problems.&lt;br /&gt;
&lt;br /&gt;
We can check more information on the hosts using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mc&amp;lt;/span&amp;gt; to query the management controller.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool mc info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device ID                 : 2&lt;br /&gt;
Device Revision           : 2&lt;br /&gt;
Firmware Revision         : 1.1&lt;br /&gt;
IPMI Version              : 2.0&lt;br /&gt;
Manufacturer ID           : 10368&lt;br /&gt;
Manufacturer Name         : Fujitsu Siemens&lt;br /&gt;
Product ID                : 611 (0x0263)&lt;br /&gt;
Product Name              : Unknown (0x263)&lt;br /&gt;
Device Available          : yes&lt;br /&gt;
Provides Device SDRs      : no&lt;br /&gt;
Additional Device Support :&lt;br /&gt;
    Sensor Device&lt;br /&gt;
    SDR Repository Device&lt;br /&gt;
    SEL Device&lt;br /&gt;
    FRU Inventory Device&lt;br /&gt;
    IPMB Event Receiver&lt;br /&gt;
    Bridge&lt;br /&gt;
    Chassis Device&lt;br /&gt;
Aux Firmware Rev Info     : &lt;br /&gt;
    0x05&lt;br /&gt;
    0x08&lt;br /&gt;
    0x00&lt;br /&gt;
    0x41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some servers will report the details of &amp;quot;field replaceable units&amp;quot;; components than can be swapped out as needed. Every server will report different data here, but you can see what our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://manuals.ts.fujitsu.com/file/10963/rx300s6-ba-en.pdf RX300 S6]&amp;lt;/span&amp;gt; returns below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool fru print&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
FRU Device Description : Builtin FRU Device (ID 0)&lt;br /&gt;
 Device not present (Requested sensor, data, or record not found)&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : Chassis (ID 2)&lt;br /&gt;
 Chassis Type			 : Rack Mount Chassis&lt;br /&gt;
 Chassis Extra			 : RX300S6R1&lt;br /&gt;
 Product Manufacturer  : FUJITSU&lt;br /&gt;
 Product Name          : PRIMERGY RX300 S6&lt;br /&gt;
 Product Part Number   : ABN:K1344-V101-2204&lt;br /&gt;
 Product Version       : GS01&lt;br /&gt;
 Product Serial        : xxxxxxxxxx&lt;br /&gt;
 Product Asset Tag     : 15&lt;br /&gt;
 Product Extra         : 25a978&lt;br /&gt;
 Product Extra         : 0263&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : MainBoard (ID 3)&lt;br /&gt;
 Board Mfg Date        : Wed Dec 22 07:36:00 2010&lt;br /&gt;
 Board Mfg             : FUJITSU&lt;br /&gt;
 Board Product         : D2619&lt;br /&gt;
 Board Serial          : xxxxxxxx&lt;br /&gt;
 Board Part Number     : S26361-D2619-N15&lt;br /&gt;
 Board Extra           : WGS10 GS02&lt;br /&gt;
 Board Extra           : 02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU1 (ID 7)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU2 (ID 8)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can check all the sensor value using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; as well. This is actually what the cluster monitor we&#039;ll install later does.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool sdr list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ambient          | 27.50 degrees C   | ok&lt;br /&gt;
Systemboard      | 43 degrees C      | ok&lt;br /&gt;
CPU1             | 34 degrees C      | ok&lt;br /&gt;
CPU2             | 37 degrees C      | ok&lt;br /&gt;
DIMM-1A          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2A          | disabled          | ns&lt;br /&gt;
DIMM-3A          | disabled          | ns&lt;br /&gt;
DIMM-1B          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2B          | disabled          | ns&lt;br /&gt;
DIMM-3B          | disabled          | ns&lt;br /&gt;
DIMM-1C          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2C          | disabled          | ns&lt;br /&gt;
DIMM-3C          | disabled          | ns&lt;br /&gt;
DIMM-1D          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2D          | disabled          | ns&lt;br /&gt;
DIMM-3D          | disabled          | ns&lt;br /&gt;
DIMM-1E          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2E          | disabled          | ns&lt;br /&gt;
DIMM-3E          | disabled          | ns&lt;br /&gt;
DIMM-1F          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2F          | disabled          | ns&lt;br /&gt;
DIMM-3F          | disabled          | ns&lt;br /&gt;
BATT 3.0V        | 3.13 Volts        | ok&lt;br /&gt;
STBY 3.3V        | 3.35 Volts        | ok&lt;br /&gt;
iRMC 1.2V STBY   | 1.19 Volts        | ok&lt;br /&gt;
iRMC 1.8V STBY   | 1.80 Volts        | ok&lt;br /&gt;
LAN 1.0V STBY    | 1.01 Volts        | ok&lt;br /&gt;
LAN 1.8V STBY    | 1.81 Volts        | ok&lt;br /&gt;
MAIN 12V         | 12 Volts          | ok&lt;br /&gt;
MAIN 5.15V       | 5.18 Volts        | ok&lt;br /&gt;
MAIN 3.3V        | 3.37 Volts        | ok&lt;br /&gt;
IOH 1.1V         | 1.10 Volts        | ok&lt;br /&gt;
IOH 1.8V         | 1.80 Volts        | ok&lt;br /&gt;
ICH 1.5V         | 1.50 Volts        | ok&lt;br /&gt;
IOH 1.1V AUX     | 1.09 Volts        | ok&lt;br /&gt;
CPU1 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
CPU2 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
Total Power      | 190 Watts         | ok&lt;br /&gt;
PSU1 Power       | 100 Watts         | ok&lt;br /&gt;
PSU2 Power       | 80 Watts          | ok&lt;br /&gt;
CPU1 Power       | 5.50 Watts        | ok&lt;br /&gt;
CPU2 Power       | 4.40 Watts        | ok&lt;br /&gt;
Fan Power        | 15.84 Watts       | ok&lt;br /&gt;
Memory Power     | 8 Watts           | ok&lt;br /&gt;
HDD Power        | 45 Watts          | ok&lt;br /&gt;
FAN1 SYS         | 5340 RPM          | ok&lt;br /&gt;
FAN2 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN3 SYS         | 4920 RPM          | ok&lt;br /&gt;
FAN4 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN5 SYS         | 5100 RPM          | ok&lt;br /&gt;
FAN1 PSU1        | 6360 RPM          | ok&lt;br /&gt;
FAN2 PSU1        | 6480 RPM          | ok&lt;br /&gt;
FAN1 PSU2        | 6480 RPM          | ok&lt;br /&gt;
FAN2 PSU2        | 6240 RPM          | ok&lt;br /&gt;
I2C1 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C2 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C3 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C4 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C5 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C6 error ratio | 0 unspecified     | ok&lt;br /&gt;
SEL Level        | 0 unspecified     | ok&lt;br /&gt;
Ambient          | 0x02              | ok&lt;br /&gt;
CPU1             | 0x80              | ok&lt;br /&gt;
CPU2             | 0x80              | ok&lt;br /&gt;
Power Unit       | 0x01              | ok&lt;br /&gt;
PSU              | Not Readable      | ns&lt;br /&gt;
PSU1             | 0x02              | ok&lt;br /&gt;
PSU2             | 0x02              | ok&lt;br /&gt;
Fanboard Row 2   | 0x00              | ok&lt;br /&gt;
FAN1 SYS         | 0x01              | ok&lt;br /&gt;
FAN2 SYS         | 0x01              | ok&lt;br /&gt;
FAN3 SYS         | 0x01              | ok&lt;br /&gt;
FAN4 SYS         | 0x01              | ok&lt;br /&gt;
FAN5 SYS         | 0x01              | ok&lt;br /&gt;
FAN1 PSU1        | 0x01              | ok&lt;br /&gt;
FAN2 PSU1        | 0x01              | ok&lt;br /&gt;
FAN1 PSU2        | 0x01              | ok&lt;br /&gt;
FAN2 PSU2        | 0x01              | ok&lt;br /&gt;
FanBoard         | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-1B          | 0x02              | ok&lt;br /&gt;
DIMM-1B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-1C          | 0x02              | ok&lt;br /&gt;
DIMM-1C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-1D          | 0x02              | ok&lt;br /&gt;
DIMM-1D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-1E          | 0x02              | ok&lt;br /&gt;
DIMM-1E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-1F          | 0x02              | ok&lt;br /&gt;
DIMM-1F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
Watchdog         | 0x00              | ok&lt;br /&gt;
iRMC request     | 0x00              | ok&lt;br /&gt;
I2C1             | 0x02              | ok&lt;br /&gt;
I2C2             | 0x02              | ok&lt;br /&gt;
I2C3             | 0x02              | ok&lt;br /&gt;
I2C4             | 0x02              | ok&lt;br /&gt;
I2C5             | 0x02              | ok&lt;br /&gt;
I2C6             | 0x02              | ok&lt;br /&gt;
Config backup    | 0x00              | ok&lt;br /&gt;
Total Power      | 0x01              | ok&lt;br /&gt;
PSU1 Power       | 0x01              | ok&lt;br /&gt;
PSU2 Power       | 0x01              | ok&lt;br /&gt;
CPU1 Power       | 0x01              | ok&lt;br /&gt;
CPU2 Power       | 0x01              | ok&lt;br /&gt;
Memory Power     | 0x01              | ok&lt;br /&gt;
Fan Power        | 0x01              | ok&lt;br /&gt;
HDD Power        | 0x01              | ok&lt;br /&gt;
Power Level      | 0x01              | ok&lt;br /&gt;
Power Level      | 0x08              | ok&lt;br /&gt;
CPU detection    | 0x00              | ok&lt;br /&gt;
System Mgmt SW   | Not Readable      | ns&lt;br /&gt;
NMI              | 0x00              | ok&lt;br /&gt;
Local Monitor    | 0x02              | ok&lt;br /&gt;
Pwr Btn override | 0x00              | ok&lt;br /&gt;
System BIOS      | Not Readable      | ns&lt;br /&gt;
iRMC             | Not Readable      | ns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can narrow that call down to just see temperature, power consumption and what not. That&#039;s beyond the scope of this tutorial though. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; is great for seeing all the neat stuff you can do.&lt;br /&gt;
&lt;br /&gt;
=== Finding our IPMI LAN Channel ===&lt;br /&gt;
&lt;br /&gt;
Before we can configure it though, we need to find our &amp;quot;LAN channel&amp;quot;. Different manufacturers will use different channels, so we need to be able to find the one we&#039;re using.&lt;br /&gt;
&lt;br /&gt;
To find it, simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool lan print X&amp;lt;/span&amp;gt;. Increment &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, until you get a response.&lt;br /&gt;
&lt;br /&gt;
So first, let&#039;s query LAN channel 1.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Channel 1 is not a LAN channel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
No luck; Let&#039;s try channel 2.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Found it! So we know that this server uses LAN channel 2. We&#039;ll need to use this for the next steps.&lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
Now that we can read our IPMI data, it&#039;s time to set some values.&lt;br /&gt;
&lt;br /&gt;
We know that we want to set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI interface to have the IP &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.1/16&amp;lt;/span&amp;gt;. We also need to setup a user on the IPMI BMC so that we can log in from other nodes.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s set the IP address. Remember to use the LAN channel you found on your server. We don&#039;t actually have a gateway on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network, but some devices insist on a default gateway being set. For this reason, we&#039;ll always set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.255.254&amp;lt;/span&amp;gt; as the gateway server. You will want to adjust this (or not use it at all) for your network.&lt;br /&gt;
&lt;br /&gt;
This requires four calls;&lt;br /&gt;
&lt;br /&gt;
# Tell the interface to use a static IP address.&lt;br /&gt;
# Set the IP address&lt;br /&gt;
# Set the subnet mask&lt;br /&gt;
# (optional) Set the default gateway&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 ipsrc static&lt;br /&gt;
ipmitool lan set 2 ipaddr 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN IP Address to 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 netmask 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Subnet Mask to 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 defgw ipaddr 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Default Gateway IP to 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll again print the LAN channel information and we should see that the IP address has been set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Find the IPMI User ID ===&lt;br /&gt;
&lt;br /&gt;
Next up is to find the IPMI administrative user name and user ID. We&#039;ll record the name for later use in the cluster setup. We&#039;ll use the ID to update the user&#039;s password.&lt;br /&gt;
&lt;br /&gt;
To see the list of users, run the following.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user list 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ID  Name	     Callin  Link Auth	IPMI Msg   Channel Priv Limit&lt;br /&gt;
1                    true    true       true       Unknown (0x00)&lt;br /&gt;
2   admin            true    true       true       OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you see an error like &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Get User Access command failed (channel 2, user 3): Unknown (0x32)&amp;lt;/span&amp;gt;&amp;quot;, it is safe to ignore.}}&lt;br /&gt;
&lt;br /&gt;
Normally you should see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ADMINISTRATOR&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Channel Priv Limit&amp;lt;/span&amp;gt; column. Above we see that the user named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; with ID &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt;, so that is the user we will use.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; in the next argument corresponds to the user ID, not the LAN channel!}}&lt;br /&gt;
&lt;br /&gt;
To set the password to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt;, run the following command and then enter the word &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt; twice.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user set password 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password for user 2: &lt;br /&gt;
Password for user 2: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Testing the IPMI Connection From the Peer ===&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;ve set each node&#039;s IPMI BMC network address and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; user&#039;s password. Now it&#039;s time to make sure it works.&lt;br /&gt;
&lt;br /&gt;
In the example above, we walked through setting up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI BMC. So here, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and try to connect to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ipmi&amp;lt;/span&amp;gt; to make sure everything works.&lt;br /&gt;
&lt;br /&gt;
* From &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n01.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now let&#039;s test from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; connecting to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ipmi&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n02.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo!&lt;br /&gt;
&lt;br /&gt;
== Setting up SSH ==&lt;br /&gt;
&lt;br /&gt;
Setting up [[SSH]] shared keys will allow your nodes to pass files between one another and execute commands remotely without needing to enter a password. This will be needed later when we want to enable applications like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and its tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SSH is, on its own, a very big topic. If you are not familiar with SSH, please take some time to learn about it before proceeding. A great first step is the [http://en.wikipedia.org/wiki/Secure_Shell Wikipedia] entry on SSH, as well as the SSH [[man]] page; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man ssh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[SSH]] can be a bit confusing keeping connections straight in you head. When you connect to a remote machine, you start the connection on your machine as the user you are logged in as. This is the source user. When you call the remote machine, you tell the machine what user you want to log in as. This is the remote user.&lt;br /&gt;
&lt;br /&gt;
=== Create the RSA Keys ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section covers setting up [[SSH]] for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please be sure to follow these steps for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
You will need to create an SSH key for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on each node. Once created, we will need to copy the &amp;quot;public key&amp;quot; into a special file on both nodes to enable connecting to either node without a password.&lt;br /&gt;
&lt;br /&gt;
Lets start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The &#039;4095&#039; is just to screw with brute-forces a bit. :)&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 root@an-c05n01.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|     .E.         |&lt;br /&gt;
|     .o.         |&lt;br /&gt;
|      .o. .      |&lt;br /&gt;
|      ...*       |&lt;br /&gt;
|     .. S o      |&lt;br /&gt;
|    .  = o       |&lt;br /&gt;
|   . ...+ .      |&lt;br /&gt;
|    o ++ +       |&lt;br /&gt;
|     ++.+        |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will create two files: the private key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa&amp;lt;/span&amp;gt; and the public key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa.pub&amp;lt;/span&amp;gt;. The private &#039;&#039;&#039;&#039;&#039;must never&#039;&#039;&#039;&#039;&#039; be group or world readable! That is, it should be set to mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0600&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you look closely when you created the ssh key, the node&#039;s fingerprint is show (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40&amp;lt;/span&amp;gt; for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above). Make a note of the fingerprint for each machine, and then compare it to the one presented to you when you ssh to a machine for the first time. If you are presented with a fingerprint that doesn&#039;t match, you could be facing a &amp;quot;man in the middle&amp;quot; attack. &lt;br /&gt;
&lt;br /&gt;
To look up a fingerprint in the future, you can run the following;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -l -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
4095 1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 /root/.ssh/id_rsa.pub (RSA)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two newly generated files should look like;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Private key&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
MIIJIwIBAAKCAgBk3o54tw1f0BJ0UOp/OWpLa5VaKDIKKmwe7Um6kcmDVBO8Itbg&lt;br /&gt;
7FxXHxX6Xi/CqoqjPEwvpjSgBVSGF5IkSAcAdyKEmqJ0pM3A4Hg+g1JehQLx3k2v&lt;br /&gt;
DPfIcTvsIGEkS63XZiOs6t1sPubgjKw9encpYHq4s2Z26Ux/w85FbIMCR3oNroG2&lt;br /&gt;
scU4OJnICosoibsEXheaDzUl8fIpEkIHGVK4iOy2Y2CoxEKw5bE1yBv0KlRKrN9i&lt;br /&gt;
jFvoq2eAUG+NtjOxaG9DK3IgITQVd1PDgoBqEvEJK/kdfckGQu47cKGJS8bzgWLD&lt;br /&gt;
vXprg9OsXBu/MZSVK1AjvL3pfZEOT/k1B6gWu2ww7hGWVZj2IXnFcRv4TMs+DXg2&lt;br /&gt;
xZm7pWTkPLNxFzqtAZH60jXZmbPAFNDNS7M3Qs6oBCFlvUL00vFNu3uoM2NARG0V&lt;br /&gt;
bvLT0zb8dhQDpV2KoGsKUFGsDo773rH7AtBBPEzODgxjTk7rH+0Rt38JLN8T5XeO&lt;br /&gt;
RUitX9MS5abjis6DZ5agm8Swd3cpAK7g5yeKdxmUA774i+BlkkH1VdsdBT9RImvc&lt;br /&gt;
/OfVly208jpNRisCQgP4FTlEFG9YOeQ416euJ6xX5oP+I6z9f0rMzQEprh0WgT5r&lt;br /&gt;
/oIKfjwF3v109rquUZLxrLYb8qkomwWnxPD4VL7GPUU0hzgr+h+xRWI0nQIBIwKC&lt;br /&gt;
AgBfGvtb38rIDVM6eC2N5a1dDaoTLTZ+nQbbVMHby0j4KrOFf+8r14pDg7Wi6xcW&lt;br /&gt;
oMvbvIJYz+h5nqAmqIJ5+sTF7KuEV0i3HwsjkdB1dIDcxo2/edQ3VV6nC62G3LNc&lt;br /&gt;
vGIUO7s8ou4G+XqZNC1eiWkJwV3EFtzzxgZMlAugiuHsNMOJPiKHru0mYUCJaQbd&lt;br /&gt;
FCVb46/aZhwrF1IJd51XJoExpav8bFPSUqVHs/7a79/XlZ/uov6BfQYzJURUaRi4&lt;br /&gt;
0Fyf9MCtC7S/NT+8d9KiZRn9nNSiP2c5EDKQ4AUwuqbvKjCccq2T+8syK9Y0y9+l&lt;br /&gt;
o8abRhhcNZ0d+gxslIvhiuBOtTTV7Fy6zYyhSkAOzF33kl+jDDm2nNvxjxFU3Lo1&lt;br /&gt;
qSP7n2yedz5QKOvwykmwN/uzn5FWSmKc5GdL/t+yu94zf0eR9pDhkg0u9dXFkim0&lt;br /&gt;
Hq8RsW1vH4aD0BBMiBn34EbnaQaotX7lAUxfTjG0iZ9z8T48NIqPf/66evqUk3bx&lt;br /&gt;
VoFS79GkW8yWrXQX6B3oUAtm10aeP9Htz+AQIPdatO9pREIzE6UbEnc2kSrzFcJh&lt;br /&gt;
4hmarrQgJq7qzFjgRLBgjiOsdEo5SGLTFh17UIh5k/deeTxLsGSFuBbpz5+jr4tt&lt;br /&gt;
0s4wcmamTR8ruURGh+4i/Px6F9QsechnIMKGNthWVxhEawKCAQEA2kCH/FL/A7Ib&lt;br /&gt;
fCt0PFvCKWeF1V+PhdzEdkIRvS3OusWP9Z+py6agh3kAFWjOZT16WgYPeftMKYaE&lt;br /&gt;
3Wiixfx+99ta0eQiKqozYgB3pg5UWdxsXv30jrTyRuhhEBId2lGV6/eHgGYs48s1&lt;br /&gt;
oCCrljsVmWd+p4uSAplIBewCv7YPsxl3DZJTV6DFRD9mnuqjrqozSM+UsoMPRTPZ&lt;br /&gt;
7AyaDxeb63LiWTq6T/gLHptmu8K0SLvDkzA5LeBWKUNFcMHpWODpzjPj5J4Mtulr&lt;br /&gt;
R8oLtEy/2ZyWi7n8JuOt+swTsZDN0Qzcpzw9MU1RWs0sqGvTO91bMjc+FYew7wuZ&lt;br /&gt;
CEZxX4VxSQKCAQB2ULaKc4Oersq7Z3fQXIynLNT8lZ/AKQaAH/SdLL7IGKWRZ9eA&lt;br /&gt;
VOQNnZnThnKMDbDS8GPOpjzfjPDP8L7Y6NOVgc6ETGEdvoXomZv+sqpwx3BWszNK&lt;br /&gt;
18FfV0HhLv0MFHAPfMIqPqhhYUDnDAt/yWFViujIIrllmXjH9JGZDdPgzsupPToZ&lt;br /&gt;
FKC5UAYeAZwpaX2AROrfACscn99kNsTE7F8HtMQ//iT+M0rHVTzhVBnm1/e3eY1J&lt;br /&gt;
9L6WUbCPzBeiNFNC+y9+0nZk0tkgJk+qUPYdnaQL44TtlZMT1iWKg3C6dgrjbbaG&lt;br /&gt;
tFZmwh2/hf0Aovycpn/Fm2PKwxved64FnDy1AoIBABK1Evhe4qiLm/SzRHozwC9v&lt;br /&gt;
RfxYpebnCYZ6sRA3IFkm4HQjoNbxBnIDDqK/1y0/yKihbwp0oCDRBBL6VxhI167Y&lt;br /&gt;
SZz2TBJJGljbd/hKXwBjWb7/0yIsxE84fVkmH9Dia++ngKSbCyl30WV/JKZ6F8tS&lt;br /&gt;
A4q0MRYqZUJWDt07fbBEAuPn+IPalJDSO/7+K0l8TYnl6CyO5A0+9WwBFITzZSLP&lt;br /&gt;
VTrZJemY6wKfmxdoddpZPKY3VVu0JKRzevsJToP2BWlyKXn+6yWe+pEf8l/pUkXa&lt;br /&gt;
OMol4mm7vnSVJkJrf1sPuyRG/e5IdLAC9TMB7YjJ1J3nelmd6pglkMYx7HXm3dMC&lt;br /&gt;
ggEAUSFnOl3WmLJfIWuFW60tP28y9lf4g8RcOpmRytzal9Zi510mDtsgCVYgVogU&lt;br /&gt;
CEPm9ws9H/z2iqnJsyi9YYm1qFkCo9yaXYn1bEwTMk6gwlzfUWTv+M51+DvVZzYp&lt;br /&gt;
3GXJLzD6K5it+aHGGsZuSP8eLAd7DOScYuzlG2XgLm/hvrmwOYkR5U/5Lp1GBfJ5&lt;br /&gt;
tf8xfIcHdFfjDFBeqx49yNyY71dh//66R+ioTivR+ZjBTdXrsQLkinvwZxNxwbCF&lt;br /&gt;
PAaffmMZQQVYf6aGQe5ig2q3ZMPeNAm6PIPSkUJi4qNF/DOvseTU7qeLtC1WOi/9&lt;br /&gt;
8c7ZGvXT9TdaXya0BkNwA9jZKwKCAQBUDqjJ7Q/nlxLifyOInW1RbwbUFzh7mdfC&lt;br /&gt;
w6362II2gIz0JRg7HQHMwfbY5t+ELi9Rsdn90wlPQ08cK42goKW46Nt30g+AoQ/N&lt;br /&gt;
0maLzbrn5BffAtI7XM0a4i3dZ/yjS0/NW39km0YnTe49W6CBBf91fChIfm+jvYna&lt;br /&gt;
ihA9x/SgyuBUvQ1bCrMzMM024TxhCkvvKI2MDmJNJHOeqovYFAXiHFGPmftunu1K&lt;br /&gt;
oDRUPb6j5gTBhxAV1ZPHKCee7EIFwi/jJ/31oMLEJp5RnAdrW+FitPjQ7hcoRStm&lt;br /&gt;
VZAoapBJb37xa1kq/7hHYf2bPVdrcO8AeStpjEh6GbtYmy2pWlFy&lt;br /&gt;
-----END RSA PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is line-wrapped to make it easier to read. Real keys should be a single line.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public key&#039;&#039;&#039; (single line, but wrapped here to make it more readable):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa.pub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgBKYiBxI06RGiar5rt121+tO1crpa9MwL+K5qtlx0IrL7QUDxi+hvdXg3sTS6+R/mnLDE8eS&lt;br /&gt;
ulgRX4fHweNbM96wnl2N9mOnODLJftWPbPUHFpTc/0bDRcXq4rB+V+NvXG1i74W1si8Fp/R5wnPmF7yo/ZjN2zXLhwesOVY3Cnmur+O19&lt;br /&gt;
80O4lT7Zl5Q0mALNkriouhD+FzQZnMky8X2MM4dmnYqctCI54jbgD0vN09uUu8KyGycV9BFW7ScfGBEvow4/+8YW+my4bG0SBjJki7eOK&lt;br /&gt;
W3fvr58cybXO+UBqLFO7yMe5jf0fClyz6MFn+PRPR37QQy4GIC+4MCaYaiCx2P/K+K/ZxH621Q8nBE9TdNCw6iVqlt5Si3x2UzxOlrYLZ&lt;br /&gt;
nvB1BfzY92Rd/RNP5bz17PapaOMLjkx6iIAEDbp2lL5vzGp+1S30SX956sX/4CYWVTg+MAwok9mUcyj60VU+ldlPDuN7UYUi8Wmoa6Jsu&lt;br /&gt;
ozstUNBCsUcKzt5FEBy4vOwOMtyu3cD4rQrn3eGXfZ1a4QpLnR2H9y7EnM4nfGdQ/OVjMecAtHUxx3FDltHgiSkQDEF9R4s3z6NLZ2mda&lt;br /&gt;
TU9A5zm+1rMW1ZLhGkfna/h2KV9o8ZNx79WyKMheajL4lgi495D7c6fF4GBgX7u7qrdZyCj2cXgrgT4nGwM2Z81Q== root@an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now do the same thing on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to generate its key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
68:71:fb:87:88:e3:c2:89:49:ad:d0:55:7d:1c:05:b6 root@an-c05n02.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|       . .++.    |&lt;br /&gt;
|      . ..o.     |&lt;br /&gt;
|     .. ..E      |&lt;br /&gt;
|    .  + .       |&lt;br /&gt;
| . o  o S        |&lt;br /&gt;
|. o .. . o .     |&lt;br /&gt;
| o = .o . o .    |&lt;br /&gt;
|  + +. .   .     |&lt;br /&gt;
|     ..          |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Populate known_hosts ===&lt;br /&gt;
&lt;br /&gt;
Normally, the first time you try to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; into a computer, you will be asked to verify that the fingerprint reported by the target server is valid. We just created our nodes, so we can trust that we&#039;re connecting to the actual target machine we think we are.&lt;br /&gt;
&lt;br /&gt;
Seeing as we&#039;re comfortable with this, we can use a nifty program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh-keyscan&amp;lt;/span&amp;gt; to read the fingerprint of the target machine and copy the resulting key to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file. We&#039;ll need to do this for all variations of the host names for each node. This alone means that we need to add ten fingerprints, five for the five names of each node.&lt;br /&gt;
&lt;br /&gt;
This is somewhat tedious, so we&#039;ll do this once on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy the populated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; later.&lt;br /&gt;
&lt;br /&gt;
If you recall from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; section, we&#039;ve got five possible host names per node. We&#039;ll call all of them now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with [[bash]] redirections, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt; ~/.ssh/known_hosts&amp;lt;/span&amp;gt; file tells the OS, &amp;quot;Take the returned text that would have been printed to screen and instead append it to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt;&amp;quot;. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; didn&#039;t exist yet, so it was created.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll repeat this, once for each host name for either node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all the host names for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Now we&#039;ll repeat the steps for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now we won&#039;t get asked to verify the target machine&#039;s RSA fingerprint when we try to connect later. More importantly, if the fingerprint ever changes, it will generate a very noisy alert telling us that something nasty, like a fake target having replaced our peer, might have happened.&lt;br /&gt;
&lt;br /&gt;
The last step is to copy this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, saving us the hassle of running all those commands a second time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/known_hosts root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: Permanently added the RSA host key for IP address &#039;10.20.50.2&#039; to the list of known hosts.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that warning, it&#039;s a one time thing. Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
known_hosts&lt;br /&gt;
&lt;br /&gt;
sent 4817 bytes  received 31 bytes  1077.33 bytes/sec&lt;br /&gt;
total size is 4738  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Copy Public Keys to Enable SSH Without a Password ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This only disabled the need for passwords when connecting from one node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; use to the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user. It does not remove the need for passwords from any other machines or users!}}&lt;br /&gt;
&lt;br /&gt;
In order to enable password-less login, we need to create a file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; and put both nodes&#039; public key in it. We will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll copy the local &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; file. This will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file and add the local public RSA in one step.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; to print the contents of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s public key to screen, but redirect the key to the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02 &amp;quot;cat /root/.ssh/id_rsa.pub&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done. Now we can verify that both keys have been added to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I&#039;m truncating the output below to make it more readable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n01.alteeve.ca&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and, with luck, enter the password one last time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/authorized_keys root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
authorized_keys&lt;br /&gt;
&lt;br /&gt;
sent 1577 bytes  received 31 bytes  643.20 bytes/sec&lt;br /&gt;
total size is 1494  speedup is 0.93&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to test connecting from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should not get any prompt at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Last login: Tue Oct 29 14:02:19 2013 from ...cable.user.start.ca&lt;br /&gt;
[root@an-c05n02 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice! Just type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exit&amp;lt;/span&amp;gt; to return to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
logout&lt;br /&gt;
Connection to an-c05n02 closed.&lt;br /&gt;
[root@an-c05n01 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; from either node to connect to the other node using any of the host names we set! Note that the physical network you use for the connection will depend on the host name you use. When you used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; above, you connect using the [[BCN]]. Had you instead used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;, we would have connected over the [[SN]].&lt;br /&gt;
&lt;br /&gt;
== Setting Up UPS Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that you are using [http://www.apc.com/site/apc/index.cfm?ISOCountryCode=ca APC] brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] network management cards. If you use another make or model, please be sure that it uses a network connection, not USB or serial, and that it is supported by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://www.apcupsd.com/ apcupsd]&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We always recommend that you have two network-managed [[UPS]]es backing either switched [[PDU]]. This protects your &#039;&#039;Anvil!&#039;&#039; against power outages, of course, but they can also protect against distorted input power, under and over voltage events and other power anomalies. &lt;br /&gt;
&lt;br /&gt;
The reason we recommend network managed UPSes, instead of passive UPSes, is that it allows for monitoring incoming power and alerting on notable events. We have found that power events are the most common issues in production. Being alerted to power events can allow you to deal with issues that might otherwise effect other equipment in your facility that isn&#039;t or can&#039;t be protected by UPSes.&lt;br /&gt;
&lt;br /&gt;
=== Installing apcupsd ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; program is not available in the normal [[RHEL]] or [[CentOS]] repositories. So you can either [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Build_From_Source|build it yourself]] or install a version pre-built by us. In production, it certainly makes sense to build your own as it&#039;s most secure. If you wish, you could also [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Installing_on_CentOS|install from ELRepo]].&lt;br /&gt;
&lt;br /&gt;
For the purpose of this tutorial, we&#039;ll download the version from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; servers as it&#039;s the simplest option.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring Apcupsd For Two UPSes ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Much of the credit for this section belongs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s [http://www.apcupsd.org/manual/manual.html#controlling-multiple-upses-on-one-machine project documentation] on the topic. It&#039;s been edited somewhat to better suit our needs.}}&lt;br /&gt;
&lt;br /&gt;
By default, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; only supports one UPS. The practical side effect of this is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will initiate a shut down as soon as the first UPS is low on batteries. This makes no sense if the second UPS is still full or running on AC.&lt;br /&gt;
&lt;br /&gt;
So we&#039;re going to make two main changes here;&lt;br /&gt;
&lt;br /&gt;
# Disable the ability for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down of the node.&lt;br /&gt;
# Configure &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to support two (or more) UPSes.&lt;br /&gt;
&lt;br /&gt;
Before we begin, we will make a backup of the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.conf&amp;lt;/span&amp;gt; file. Then we&#039;re going to rename it and configure it for the first UPS. Once it&#039;s configured, we will copy it for the second UPS and change just the variable values that differ.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once it&#039;s configured and working, we&#039;ll copy our new configuration to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
We [[#Foundation_Pack_Host_Names|decided earlier]] to name our UPSes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;. We&#039;re going to use these names in the configuration and log file names used for each UPS. So let&#039;s backup the original configuration file and then rename it to match our first UPS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.conf.anvil&lt;br /&gt;
mv /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
ls -lah /etc/apcupsd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 108K&lt;br /&gt;
drwxr-xr-x.  3 root root 4.0K Nov 26 17:34 .&lt;br /&gt;
drwxr-xr-x. 90 root root  12K Nov 25 17:28 ..&lt;br /&gt;
-rwxr--r--.  1 root root 3.9K Mar  4  2013 apccontrol&lt;br /&gt;
-rw-r--r--.  1 root root  13K Mar  4  2013 apcupsd.an-u01.conf&lt;br /&gt;
-rw-r--r--.  1 root root  13K Nov 26 15:49 apcupsd.conf.anvil&lt;br /&gt;
-rw-r--r--.  1 root root  607 Mar  4  2013 apcupsd.css&lt;br /&gt;
-rwxr--r--.  1 root root  460 Mar  4  2013 changeme&lt;br /&gt;
-rwxr--r--.  1 root root  487 Mar  4  2013 commfailure&lt;br /&gt;
-rwxr--r--.  1 root root  488 Mar  4  2013 commok&lt;br /&gt;
-rwxr-xr-x.  1 root root  17K Mar  4  2013 hid-ups&lt;br /&gt;
-rw-r--r--.  1 root root  662 Mar  4  2013 hosts.conf&lt;br /&gt;
-rwxr-xr-x.  1 root root  626 May 28  2002 make-hiddev&lt;br /&gt;
-rw-r--r--.  1 root root 2.3K Mar  4  2013 multimon.conf&lt;br /&gt;
-rwxr--r--.  1 root root  455 Mar  4  2013 offbattery&lt;br /&gt;
-rwxr--r--.  1 root root  420 Mar  4  2013 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;re going to create a new directory called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;. We&#039;ll copy some of the existing scripts into it and then create a new script that will disabled automatic shut down of the node. We&#039;re doing this so that future updates to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; won&#039;t replace our scripts. We&#039;ll see how we use this shortly.&lt;br /&gt;
&lt;br /&gt;
Once the directory is created, we&#039;ll copy the scripts we want. Next, we&#039;ll create a new script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;doshutdown&amp;lt;/span&amp;gt; which will do nothing expect exit with return code &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;99&amp;lt;/span&amp;gt;. This return code tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that the shut down action has been disabled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /etc/apcupsd/null&lt;br /&gt;
cp /etc/apcupsd/apccontrol /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/c* /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/o* /etc/apcupsd/null/&lt;br /&gt;
echo &amp;quot;exit 99&amp;quot; &amp;gt; /etc/apcupsd/null/doshutdown&lt;br /&gt;
chown root:root /etc/apcupsd/null/doshutdown&lt;br /&gt;
chmod 744 /etc/apcupsd/null/doshutdown&lt;br /&gt;
cat /etc/apcupsd/null/doshutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
exit 99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /etc/apcupsd/null/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 36K&lt;br /&gt;
drwxr-xr-x. 2 root root 4.0K Nov 26 17:39 .&lt;br /&gt;
drwxr-xr-x. 3 root root 4.0K Nov 26 17:34 ..&lt;br /&gt;
-rwxr--r--. 1 root root 3.9K Nov 26 17:35 apccontrol&lt;br /&gt;
-rwxr--r--. 1 root root  460 Nov 26 17:36 changeme&lt;br /&gt;
-rwxr--r--. 1 root root  487 Nov 26 17:36 commfailure&lt;br /&gt;
-rwxr--r--. 1 root root  488 Nov 26 17:36 commok&lt;br /&gt;
-rwxr--r--. 1 root root    8 Nov 26 17:39 doshutdown&lt;br /&gt;
-rwxr--r--. 1 root root  455 Nov 26 17:36 offbattery&lt;br /&gt;
-rwxr--r--. 1 root root  420 Nov 26 17:36 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now it&#039;s time to change the variables in the configuration file. Before we do though, lets look at the variables we&#039;re going to edit, what value we will set them to for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and what they do. We&#039;ll look at the specific variables we need to change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&#039;s configuration file later.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name to use for this UPS when writing log entries or reporting status information. It should be less than eight characters long. We&#039;re going to use the short host name for the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSTYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;snmp&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that we will communicate with this UPS using [[SNMP]] to talk to the network management card in the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the connection string needed for establishing the SNMP connection to the UPS. It&#039;s separated into four sections, each section separated by colons. The first value is the host name or IP address of the UPS. The second section is the [[TCP]] port to connect to, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;161&amp;lt;/span&amp;gt; on APC brand UPSes. The third and fourth sections are the vendor name and SNMP community, respectively. We&#039;re using the vendor name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;APC_NOTRAP&amp;lt;/span&amp;gt; in order to disable SNMP traps. The community should usually be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;private&amp;lt;/span&amp;gt;, unless you changed it in the network management card itself.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;POLLTIME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; how often, in seconds, to query the UPS status. The default is once per minute, but we will want twice per minute in order to match the scan frequency of the monitoring and alter system we will use later.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;SCRIPTDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to use the scripts in our new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory instead of the default ones.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PWRFAILDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|Some UPSes need to be powered off themselves when the power is about to run out of the batteries. This is controlled by a file written to this directory which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s shut down script looks for. We&#039;ve disabled shut down, but to be safe and thorough, we will disable this as well by pointing it at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BATTERYLEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this percentage left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MINUTES&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this many minutes of run time left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3551&amp;lt;/span&amp;gt;&lt;br /&gt;
|The default value here is fine for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, but it is important to highlight here. We will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; to query &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s data over the network, even though it&#039;s on the same machine. Each UPS we monitor will have an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon running and listening on a dedicated [[TCP]] port. The first UPS, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, will listen on the default port. Which port we specify when using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; later will determine which UPS status information is returned.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ANNOY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will start &amp;quot;annoying&amp;quot; the users of the system to save their work and log out five minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt; seconds) before calling the shut down of the server. We&#039;re disabling automatic shut down, so this needs to be disabled.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is where events related to this UPS are recorded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this in mind, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the file. If you are more comfortable with a text editor, please use that instead. You can refer to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; at the end of this section to see exactly what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the name of the UPS and domain once.&lt;br /&gt;
ups=&amp;quot;an-u01&amp;quot;&lt;br /&gt;
domain=&amp;quot;alteeve.ca&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS name. Note the odd syntax; There are two &#039;UPSNAME&#039; entries&lt;br /&gt;
# in the config and we only want to change the first instance.&lt;br /&gt;
sed -i &amp;quot;0,/#UPSNAME/s/^#UPSNAME/UPSNAME/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS access&lt;br /&gt;
sed -i &amp;quot;s/^UPSTYPE.*/UPSTYPE snmp/&amp;quot;                                  /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the poll time.&lt;br /&gt;
sed -i &amp;quot;s/^#POLLTIME/POLLTIME/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^POLLTIME.*/POLLTIME 30/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Update the script directories&lt;br /&gt;
sed -i &amp;quot;s/^SCRIPTDIR.*/SCRIPTDIR \/etc\/apcupsd\/null/&amp;quot;   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^PWRFAILDIR.*/PWRFAILDIR \/etc\/apcupsd\/null/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the shut down thresholds and disable the shut down annoy message&lt;br /&gt;
sed -i &amp;quot;s/^BATTERYLEVEL .*/BATTERYLEVEL 0/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^MINUTES .*/MINUTES 0/&amp;quot;           /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^ANNOY .*/ANNOY 0/&amp;quot;               /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# The NIS port isn&#039;t changing, but this makes sure it really is what we want.&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3551/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Finally, update the event log file name.&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# End with a &#039;diff&#039; of the updated configuration against the backup we made.&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.conf.anvil /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.conf.anvil	2013-11-26 15:49:47.852153374 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 19:58:17.810278390 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-#UPSNAME&lt;br /&gt;
+UPSNAME an-u01&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -76,8 +76,8 @@&lt;br /&gt;
 #                            3052. If this parameter is empty or missing, the &lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
-UPSTYPE apcsmart&lt;br /&gt;
-DEVICE /dev/ttyS0&lt;br /&gt;
+UPSTYPE snmp&lt;br /&gt;
+DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -86,7 +86,7 @@&lt;br /&gt;
 #   will improve apcupsd&#039;s responsiveness to certain events at the cost of&lt;br /&gt;
 #   higher CPU utilization. The default of 60 is appropriate for most&lt;br /&gt;
 #   situations.&lt;br /&gt;
-#POLLTIME 60&lt;br /&gt;
+POLLTIME 30&lt;br /&gt;
 &lt;br /&gt;
 # LOCKFILE &amp;lt;path to lockfile&amp;gt;&lt;br /&gt;
 #   Path for device lock file. Not used on Win32.&lt;br /&gt;
@@ -94,14 +94,14 @@&lt;br /&gt;
 &lt;br /&gt;
 # SCRIPTDIR &amp;lt;path to script directory&amp;gt;&lt;br /&gt;
 #   Directory in which apccontrol and event scripts are located.&lt;br /&gt;
-SCRIPTDIR /etc/apcupsd&lt;br /&gt;
+SCRIPTDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # PWRFAILDIR &amp;lt;path to powerfail directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the powerfail flag file. This file&lt;br /&gt;
 #   is created when apcupsd initiates a system shutdown and is&lt;br /&gt;
 #   checked in the OS halt scripts to determine if a killpower&lt;br /&gt;
 #   (turning off UPS output power) is required.&lt;br /&gt;
-PWRFAILDIR /etc/apcupsd&lt;br /&gt;
+PWRFAILDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # NOLOGINDIR &amp;lt;path to nologin directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the nologin file. The existence&lt;br /&gt;
@@ -132,12 +132,12 @@&lt;br /&gt;
 # If during a power failure, the remaining battery percentage&lt;br /&gt;
 # (as reported by the UPS) is below or equal to BATTERYLEVEL, &lt;br /&gt;
 # apcupsd will initiate a system shutdown.&lt;br /&gt;
-BATTERYLEVEL 5&lt;br /&gt;
+BATTERYLEVEL 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the remaining runtime in minutes &lt;br /&gt;
 # (as calculated internally by the UPS) is below or equal to MINUTES,&lt;br /&gt;
 # apcupsd, will initiate a system shutdown.&lt;br /&gt;
-MINUTES 3&lt;br /&gt;
+MINUTES 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the UPS has run on batteries for TIMEOUT&lt;br /&gt;
 # many seconds or longer, apcupsd will initiate a system shutdown.&lt;br /&gt;
@@ -155,7 +155,7 @@&lt;br /&gt;
 &lt;br /&gt;
 #  Time in seconds between annoying users to signoff prior to&lt;br /&gt;
 #  system shutdown. 0 disables.&lt;br /&gt;
-ANNOY 300&lt;br /&gt;
+ANNOY 0&lt;br /&gt;
 &lt;br /&gt;
 # Initial delay after power failure before warning users to get&lt;br /&gt;
 # off the system.&lt;br /&gt;
@@ -203,7 +203,7 @@&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; config file over to the one we&#039;ll use for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to change the following variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Changed value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to copy the configuration file and then use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; again to make these changes. We&#039;ll finish with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; showing the differences between the two configuration files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make a copy of the configuration file.&lt;br /&gt;
cp /etc/apcupsd/apcupsd.an-u01.conf /etc/apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
&lt;br /&gt;
# Set the name of this UPS. The &#039;domain&#039; variable should still be set.&lt;br /&gt;
ups=&amp;quot;an-u02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change the variables &lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;                                   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot;    /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3552/&amp;quot;                                     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.an-u02.conf /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.an-u02.conf	2013-11-26 20:09:18.884783551 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 20:13:20.273346652 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-UPSNAME an-u01&lt;br /&gt;
+UPSNAME an-u02&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -77,7 +77,7 @@&lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
 UPSTYPE snmp&lt;br /&gt;
-DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
+DEVICE an-u02.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -199,11 +199,11 @@&lt;br /&gt;
 #  It is not used unless NETSERVER is on. If you change this port,&lt;br /&gt;
 #  you will need to change the corresponding value in the cgi directory&lt;br /&gt;
 #  and rebuild the cgi programs.&lt;br /&gt;
-NISPORT 3551&lt;br /&gt;
+NISPORT 3552&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u02.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last change that is needed is to update the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; initialization script. We&#039;re going to copy a pre-edited one from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; server and then look at the differences. We could edit the file, but it would be a little more complex. So instead, lets look at the differences and then talk about what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv /etc/init.d/apcupsd /root/apcupsd.init.d.anvil&lt;br /&gt;
wget https://alteeve.ca/files/apcupsd/apcupsd -O /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-26 20:59:42--  https://alteeve.ca/files/apcupsd/apcupsd&lt;br /&gt;
Resolving alteeve.ca... 65.39.153.64&lt;br /&gt;
Connecting to alteeve.ca|65.39.153.64|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 1759 (1.7K) [text/plain]&lt;br /&gt;
Saving to: `/etc/init.d/apcupsd&#039;&lt;br /&gt;
&lt;br /&gt;
100%[=========================================================================&amp;gt;] 1,759       --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-26 20:59:42 (5.10 MB/s) - `/etc/init.d/apcupsd&#039; saved [1759/1759]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 /etc/init.d/apcupsd &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 1.8K Aug 19  2012 /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -u /root/apcupsd.init.d.anvil /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/apcupsd.init.d.anvil	2013-03-04 23:32:43.000000000 -0500&lt;br /&gt;
+++ /etc/init.d/apcupsd	2012-08-19 18:36:33.000000000 -0400&lt;br /&gt;
@@ -1,7 +1,7 @@&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # apcupsd      This shell script takes care of starting and stopping&lt;br /&gt;
-#	       the apcupsd UPS monitoring daemon.&lt;br /&gt;
+#	       the apcupsd UPS monitoring daemon. Multi-UPS version.&lt;br /&gt;
 #&lt;br /&gt;
 # chkconfig: 2345 60 99&lt;br /&gt;
 # description: apcupsd monitors power and takes action if necessary&lt;br /&gt;
@@ -15,18 +15,24 @@&lt;br /&gt;
     start)&lt;br /&gt;
        rm -f /etc/apcupsd/powerfail&lt;br /&gt;
        rm -f /etc/nologin&lt;br /&gt;
-       echo -n &amp;quot;Starting UPS monitoring:&amp;quot; &lt;br /&gt;
-       daemon /sbin/apcupsd -f /etc/apcupsd/apcupsd.conf&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       echo&lt;br /&gt;
-       [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Starting UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          daemon /sbin/apcupsd -f $conf -P /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          echo&lt;br /&gt;
+          [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     stop)&lt;br /&gt;
-       echo -n &amp;quot;Shutting down UPS monitoring:&amp;quot;&lt;br /&gt;
-       killproc apcupsd&lt;br /&gt;
-       echo&lt;br /&gt;
-       rm -f $APCPID&lt;br /&gt;
-       rm -f /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Shutting down UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          killproc -p /var/run/apcupsd-$inst.pid apcupsd&lt;br /&gt;
+          echo&lt;br /&gt;
+          rm -f /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          rm -f /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     restart|force-reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
@@ -38,14 +44,16 @@&lt;br /&gt;
        exit 3&lt;br /&gt;
        ;;&lt;br /&gt;
     status)&lt;br /&gt;
-       status apcupsd&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       if [ $RETVAL -eq 0 ]&lt;br /&gt;
-       then&lt;br /&gt;
-          /sbin/apcaccess status&lt;br /&gt;
-       else&lt;br /&gt;
-          exit $RETVAL&lt;br /&gt;
-       fi&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          status -p /var/run/apcupsd-$inst.pid apcupsd-$inst&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          if [ $RETVAL -eq 0 ]&lt;br /&gt;
+          then&lt;br /&gt;
+             NISPORT=`grep ^NISPORT &amp;lt; $conf | sed -e &amp;quot;s/NISPORT *\([0-9]\)/\1/&amp;quot;`&lt;br /&gt;
+             /sbin/apcaccess status localhost:$NISPORT | egrep &amp;quot;(STATUS)|(UPSNAME)&amp;quot;&lt;br /&gt;
+          fi&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|status}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The main change here is that, for each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt; calls, we tell the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; script to loop one for each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.*.conf&amp;lt;/span&amp;gt; file it finds. The original script expected just one configuration file but was otherwise perfect for what we needed. So we shifted the existing calls into our loop. &lt;br /&gt;
&lt;br /&gt;
So all this new script does is repeat what the original did already, once for each configuration file.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s copy all of this over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; now!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/init.d/apcupsd root@an-c05n02:/etc/init.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd&lt;br /&gt;
&lt;br /&gt;
sent 1834 bytes  received 43 bytes  3754.00 bytes/sec&lt;br /&gt;
total size is 1759  speedup is 0.94&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/apcupsd root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd/&lt;br /&gt;
apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
apcupsd/apcupsd.conf.anvil&lt;br /&gt;
apcupsd/null/&lt;br /&gt;
apcupsd/null/apccontrol&lt;br /&gt;
apcupsd/null/changeme&lt;br /&gt;
apcupsd/null/commfailure&lt;br /&gt;
apcupsd/null/commok&lt;br /&gt;
apcupsd/null/doshutdown&lt;br /&gt;
apcupsd/null/offbattery&lt;br /&gt;
apcupsd/null/onbattery&lt;br /&gt;
&lt;br /&gt;
sent 44729 bytes  received 210 bytes  29959.33 bytes/sec&lt;br /&gt;
total size is 70943  speedup is 1.58&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /root/apcupsd.init.d.anvil root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd.init.d.anvil&lt;br /&gt;
&lt;br /&gt;
sent 1276 bytes  received 31 bytes  871.33 bytes/sec&lt;br /&gt;
total size is 1188  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SELinux and apcupsd ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section needs some clean-up.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got two [[SELinux]] issues to address:&lt;br /&gt;
&lt;br /&gt;
* Allow the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon to use [[TCP]] and [[UDP]] ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Allow both daemons to write to the non-standard log files.&lt;br /&gt;
&lt;br /&gt;
You can see what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;selinux&amp;lt;/span&amp;gt; allows various applications to use with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage port -l&amp;lt;/span&amp;gt;. This generates a lot of data, so we&#039;re interested just in seeing what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; is already allowed to use. So we&#039;ll pipe it through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;grep&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_port_t&amp;lt;/span&amp;gt; context is used for both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tcp&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;udp&amp;lt;/span&amp;gt;. With this, we can simply add port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=These commands can take a while to run. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, enabling the context for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt; log files.&lt;br /&gt;
&lt;br /&gt;
These files don&#039;t exist until the daemon starts for the first time. We&#039;ve not started it yet, so the first task is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt; to create these log files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have the default log file to check to see what context to use for our log files, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://mgrepl.fedorapeople.org/man_selinux/Fedora18/apcupsd.html apcupsd_selinux]&amp;lt;/span&amp;gt; manual tells us that we need to set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_log_t &amp;lt;/span&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, ready to test!&lt;br /&gt;
&lt;br /&gt;
=== Testing the Multi-UPS apcupds ===&lt;br /&gt;
&lt;br /&gt;
If our edits above worked properly, we should now be able to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon and query out UPSes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That looks good. Now the real test; Query the status of each UPS! &lt;br /&gt;
&lt;br /&gt;
This generates a fair bit of output, so lets just look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 21:21:20 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 121.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 21:21:29 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 21:21:48 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 31817744.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 31817744.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 31817744&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 21:21:57 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you notice the serial numbers, we see that they differ and match the ones we have on record. This confirms that we&#039;re talking to both UPSes!&lt;br /&gt;
&lt;br /&gt;
Before we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the keen observer will have noted that some of the sensor values are slightly unrealistic. Some UPSes optionally support environmental sensors and, without them, their values are not realistic at all. Those can be safely ignored and are not used by the monitoring and alert system.&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s confirm that the same calls from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; result in the same values!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 22:14:12 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 122.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 22:14:22 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 22:14:11 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 19898384.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 19898384.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 19898384&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 22:14:38 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Later, when we setup the monitoring and alert system, we&#039;ll take a closer look at some of the variables and their possible values.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Storage ==&lt;br /&gt;
&lt;br /&gt;
At this time, this section covers monitoring LSI-based [[RAID]] controllers. If you have a different RAID controller and wish to contribute, we&#039;d [[Contct us|love to hear from you]].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring LSI-Based RAID Controllers with MegaCli ===&lt;br /&gt;
&lt;br /&gt;
Many tier-1 hardware vendors as well as many mid-tier and in-house brand servers use controllers built by or based on [http://www.lsi.com LSI] [[RAID]] controller cards.&lt;br /&gt;
&lt;br /&gt;
==== Installing MegaCli ====&lt;br /&gt;
&lt;br /&gt;
In this section, we&#039;ll install LSI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; command-line tool for monitoring our storage. This is a commercial tool, so you must download it directly from LSI&#039;s website and agree to their license agreement.&lt;br /&gt;
&lt;br /&gt;
At the time of writing, you can download it [http://www.lsi.com/support/Pages/download-results.aspx?keyword=latest%20megacli%20for%20linux using this link]. Click on the orange &amp;quot;+&amp;quot; to the right of &amp;quot;&#039;&#039;Management Software and Tools&#039;&#039;&amp;quot; in the search results page.  Click on the &amp;quot;Download&amp;quot; icon and save the file to disk. Extract the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli_Linux.zip&amp;lt;/span&amp;gt; file and switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/MegaCli_Linux&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The version of the file name shown below may have changed.}}&lt;br /&gt;
&lt;br /&gt;
Copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli-8.07.08-1.noarch.rpm&amp;lt;/span&amp;gt; file to your nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n01:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can install the program on our nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By default, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; binary is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/opt/MegaRAID/MegaCli/MegaCli64&amp;lt;/span&amp;gt;. This isn&#039;t in [[RHEL]]&#039;s default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PATH&amp;lt;/span&amp;gt;, so we will want to make a symlink to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/sbin&amp;lt;/span&amp;gt;. This way, we can simply type &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;&#039; instead of the full path.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent.&lt;br /&gt;
&lt;br /&gt;
==== Checking Storage Health with MegaCli64 ====&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This tutorial was written using a development server and, as such, has only four drives in each array. All production servers should have a &#039;&#039;&#039;minimum&#039;&#039;&#039; of six drives to help ensure good storage response time under highly random reads and writes seen in virtualized environments.}}&lt;br /&gt;
&lt;br /&gt;
LSI RAID controllers are designed to work alone or in conjunction with other LSI controllers at the same time. For this reason, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; supports multiple controllers, virtual disks, physical disks and so on. We&#039;re going to be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;aAll&amp;lt;/span&amp;gt; a lot. This simply tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; to show whatever we&#039;re asking for from all found adapters.&lt;br /&gt;
&lt;br /&gt;
The program itself is extremely powerful. Trying to cover all the ways that it can be used would require a long tutorial in and of itself. So we&#039;re going to just look at some core tasks that we&#039;re interested in. If you want to experiment, there is a great [http://mycusthelp.info/LSI/_cs/AnswerDetail.aspx?sSessionID=1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB&amp;amp;inc=8040&amp;amp;caller=~%2fFindAnswers.aspx%3ftxtCriteria%3dmegacli%26sSessionid%3d1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB cheat-sheet here].&lt;br /&gt;
&lt;br /&gt;
Lets start by looking at the logical drive.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can see that the virtual disk has four real disks in RAID level 5, it is 836.625 [[GB]] in size and it&#039;s in [[WriteBack]] caching mode. This is pretty typical, save for the number of disks.&lt;br /&gt;
&lt;br /&gt;
Lets look now at the health of the RAID controller&#039;s battery.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4083 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 28 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 74 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Absolute State of charge: 74 %&lt;br /&gt;
  Remaining Capacity: 902 mAh&lt;br /&gt;
  Full Charge Capacity: 906 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 35&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/22, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 15686&lt;br /&gt;
  Pack Stat Configuration: 0x6490&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Wed Dec 18 16:47:41 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4048 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 27 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 68 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Absolute State of charge: 68 %&lt;br /&gt;
  Remaining Capacity: 821 mAh&lt;br /&gt;
  Full Charge Capacity: 841 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 31&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/23, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 18704&lt;br /&gt;
  Pack Stat Configuration: 0x64b0&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Mon Dec 23 05:29:33 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now this gives us quite a bit of data.&lt;br /&gt;
&lt;br /&gt;
The battery&#039;s principal job is to protect the data in the data stored in the [[RAM]] module used to buffer writes (and a certain amount of reads) that have not yet been flushed to the physical disks. This is critical because, if this data was lost, the contents of the disk could be corrupted. &lt;br /&gt;
&lt;br /&gt;
This battery is generally used when the node loses power. Depending on whether your node has battery-backed write-cache (BBU) or flash-backed write-cache (FBWC), the battery will be used to store the data in the RAM until power is restored (BBU) or just long enough to copy the data in the cache module to persistent solid-state storage build into the battery or RAID controller.&lt;br /&gt;
&lt;br /&gt;
If your server uses a BBU, then watching the &amp;quot;hold up time&amp;quot;. The controller above doesn&#039;t provide this because it is a flash-backed controller. If yours in a battery-backed controller, you will see a variable like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Battery backup charge time : 48 hours +&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells you that the node can protect the contents of the cache for greater than 48 hours. This means that, so long as power is restored to the server within two days, your data will be protected. Generally, if the hold up time falls below 24 hours, the BBU should be replaced. This happens because, as batteries age, they lose capacity. This is simple chemistry.&lt;br /&gt;
&lt;br /&gt;
Note that periodically, usually once per month, the controller intentionally drains and recharges the controller. This is called a &amp;quot;relearn cycle&amp;quot; (or simply a &amp;quot;learn cycle&amp;quot;). This is a way for the controller to verify the health of the battery. Should a battery fail to recharge, it will be declared dead and need to be replaced.&lt;br /&gt;
&lt;br /&gt;
Note that it is normal for the cache policy to switch from &amp;quot;write-back&amp;quot; to &amp;quot;write-through&amp;quot; once the battery is sufficiently drained. The controller should return to &amp;quot;write-back&amp;quot; mode once the learn cycle completes and the battery charges enough. During this time, the write speed will be reduced because all writes have to read the physical disks instead of just cache, which is slower.&lt;br /&gt;
&lt;br /&gt;
Lastly, lets look at the individual drives.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 7&lt;br /&gt;
WWN: 5000C50043EE29E0&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043ee29e1&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3T7X6    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 6&lt;br /&gt;
WWN: 5000C5004310F4B4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004310f4b5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CMMC    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :42C (107.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000C500430189E4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c500430189e5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CD2Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 11&lt;br /&gt;
WWN: 5000CCA00FAEC0BF&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00faec0bd&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVY33ARM            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 10&lt;br /&gt;
WWN: 5000C50043112280&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043112281&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DE9Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 9&lt;br /&gt;
WWN: 5000C5004312760C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004312760d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DNG7    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :40C (104.00 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 8&lt;br /&gt;
WWN: 5000C50043126B4C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043126b4d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3E01G    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000CCA00F5CA29F&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00f5ca29d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVWMYA6L            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows us two bits of information about each hard drive in the array. The main pieces to watch are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is normal for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Other Error Count&amp;lt;/span&amp;gt; to increment by 1 periodically. If it jumps by more than 1, or if it jumps multiple times within a few days, consult your system provider and inquire about replacing the drive.}}&lt;br /&gt;
&lt;br /&gt;
These values show us the overall health of the drive. For most hard drives, the temperature should stay below 55C at all times. Any temperature over 45C should be investigated. All other failure counts should stay at 0, save for the exception mentioned in the note above.&lt;br /&gt;
&lt;br /&gt;
As mentioned, there are many, many other ways to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;. If a drive ever fails, you can use it to prepare the drive for removal while the system is running. You can use it to adjust when the learn cycle runs, adjust cache policy and do many other things. It is well worth learning in more depth. However, that is outside the scope of this section.&lt;br /&gt;
&lt;br /&gt;
==== Managing MegaSAS.log ====&lt;br /&gt;
&lt;br /&gt;
Each time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; runs, it writes to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/MegaSAS.log&amp;lt;/span&amp;gt; file. Later, we&#039;re going to setup a monitoring and alert system that checks the health of each node every 30 seconds. This program calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; three times per pass, so the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file can grow to a decent size.&lt;br /&gt;
&lt;br /&gt;
To prevent this log file from getting too big, AN!CDB ships with a tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://github.com/digimer/an-cdb/blob/master/tools/archive_an-cm.log.sh archive_an-cm.log.sh]&amp;lt;/span&amp;gt;. This is a very simple bash script that is designed to run once per month to archive and compress the log file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:42:19--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:42:19 (7.86 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:42 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:47:53--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:47:54 (58.9 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:47 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll add it to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table. We&#039;ll set it to run at midnight on the first of each month.&lt;br /&gt;
&lt;br /&gt;
On both nodes;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirm the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
= Configuring The Cluster Foundation =&lt;br /&gt;
&lt;br /&gt;
We need to configure the cluster in two stages. This is because we have something of a chicken-and-egg problem:&lt;br /&gt;
&lt;br /&gt;
* We need clustered storage for our virtual machines.&lt;br /&gt;
* Our clustered storage needs the cluster for fencing.&lt;br /&gt;
&lt;br /&gt;
Conveniently, clustering has two logical parts:&lt;br /&gt;
&lt;br /&gt;
* Cluster communication and membership.&lt;br /&gt;
* Cluster resource management.&lt;br /&gt;
&lt;br /&gt;
The first, communication and membership, covers which nodes are part of the cluster and it is responsible for ejecting faulty nodes from the cluster, among other tasks. This is managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. The second part, resource management, is provided by a second tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It&#039;s this second part that we will set aside for later. In short though, it makes sure clustered services, storage and the virtual servers, are always running whenever possible.&lt;br /&gt;
&lt;br /&gt;
== Keeping Time in Sync ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is &#039;&#039;&#039;only relevant&#039;&#039;&#039; to networks that block access to external time sources, called &amp;quot;NTP servers&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
It is very important that time on both nodes be kept in sync. The way to do this is to setup [[[NTP]], the network time protocol. &lt;br /&gt;
&lt;br /&gt;
Earlier on, we setup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; to start on boot. For most people, that is enough and you can skip to the next section.&lt;br /&gt;
&lt;br /&gt;
However, some particularly restrictive networks will block access to external time servers. If you&#039;re on one of these networks, ask your admin (if you don&#039;t know already) what name or IP to use as a time source. Once you have this, you can enter the following command to add it to the name server configuration. We&#039;ll use the example time source &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntp.example.ca&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, add the time server to the NTP configuration file by appending the following lines to the end of it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon and your nodes should shortly update their times.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;date&amp;lt;/span&amp;gt; command on both nodes to ensure the times match. If they don&#039;t, give it a few minutes. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon sync every few minutes.&lt;br /&gt;
&lt;br /&gt;
== Alternate Configuration Methods ==&lt;br /&gt;
&lt;br /&gt;
In [[Red Hat]] Cluster Services, the heart of the cluster is found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|/etc/cluster/cluster.conf]]&amp;lt;/span&amp;gt; [[XML]] configuration file.&lt;br /&gt;
&lt;br /&gt;
There are three main ways of editing this file. Two are already well documented, so I won&#039;t bother discussing them, beyond introducing them. The third way is by directly hand-crafting the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. We&#039;ve found that directly editing configuration files is the best way to learn clustering at a deep level. For this reason, it is the method we&#039;ll use here.&lt;br /&gt;
&lt;br /&gt;
The two graphical tools are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-scc-CA.html system-config-cluster]&amp;lt;/span&amp;gt;, older GUI tool run directly from one of the cluster nodes.&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-conga-CA.html Conga], comprised of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; node-side client and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;luci&amp;lt;/span&amp;gt; web-based server (can be run on machines outside the cluster).&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve gotten comfortable with HA clustering, you may want to go back and play with these tools. They can certainly be time-savers.&lt;br /&gt;
&lt;br /&gt;
== The First cluster.conf Foundation Configuration ==&lt;br /&gt;
&lt;br /&gt;
The very first stage of building the cluster is to create a configuration file that is as minimal as possible. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and, when we&#039;re done, copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Name the Cluster and Set the Configuration Version ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cluster.3B_The_Parent_Tag|cluster]]&amp;lt;/span&amp;gt; tag is the parent tag for the entire cluster configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/cluster/cluster.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster&amp;lt;/span&amp;gt; element has two attributes that we need to set:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;config_version=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#name|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute defines the name of the cluster. It must be unique amongst the clusters on your network. It should be descriptive, but you will not want to make it too long, either. You will see this name in the various cluster tools and you will enter in, for example, when creating a [[GFS2]] partition later on. This tutorial uses the cluster name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#config_version|config_version]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute is an integer indicating the version of the configuration file. Whenever you make a change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, you will need to increment. If you don&#039;t increment this number, then the cluster tools will not know that the file needs to be reloaded. As this is the first version of this configuration file, it will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Note that this tutorial will increment the version after every change, regardless of whether it is explicitly pushed out to the other nodes and reloaded. The reason is to help get into the habit of always increasing this value.&lt;br /&gt;
&lt;br /&gt;
=== Configuring cman Options ===&lt;br /&gt;
&lt;br /&gt;
We are setting up a special kind of cluster, called a 2-Node cluster.&lt;br /&gt;
&lt;br /&gt;
This is a special case because traditional [[quorum]] will not be useful. With only two nodes, each having a vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the total votes is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. Quorum needs &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt;, which means that a single node failure would shut down the cluster, as the remaining node&#039;s vote is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; exactly. That kind of defeats the purpose to having a cluster at all.&lt;br /&gt;
&lt;br /&gt;
So to account for this special case, there is a special attribute called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt;. This tells the cluster manager to continue operating with only one vote. This option requires that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#expected_votes|expected_votes]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is set automatically to the total sum of the defined cluster nodes&#039; votes (which itself is a default of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;). This is the other half of the &amp;quot;trick&amp;quot;, as a single node&#039;s vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; now always provides quorum (that is, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; meets the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt; requirement).&lt;br /&gt;
&lt;br /&gt;
In short; this disables quorum.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the self-closing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;... /&amp;gt;&amp;lt;/span&amp;gt; tag. This is an [[XML]] syntax that tells the parser not to look for any child or a closing tags.&lt;br /&gt;
&lt;br /&gt;
=== Defining Cluster Nodes ===&lt;br /&gt;
&lt;br /&gt;
This example is a little artificial, please don&#039;t load it into your cluster as we will need to add a few child tags, but one thing at a time.&lt;br /&gt;
&lt;br /&gt;
This introduces two tags, the later a child tag of the former:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternodes&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first is the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternodes.3B_Defining_Cluster_Nodes|clusternodes]]&amp;lt;/span&amp;gt; tag, which takes no attributes of its own. Its sole purpose is to contain the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; child tags, of which there will be one per node. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; tag defines each cluster node. There are many attributes available, but we will look at just the two required ones. &lt;br /&gt;
&lt;br /&gt;
The first is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute. The value &#039;&#039;&#039;should&#039;&#039;&#039; match the fully qualified domain name, which you can check by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;uname -n&amp;lt;/span&amp;gt; on each node. This isn&#039;t strictly required, mind you, but for simplicity&#039;s sake, this is the name we will use.&lt;br /&gt;
&lt;br /&gt;
The cluster decides which network to use for cluster communication by resolving the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; value. It will take the returned [[IP]] address and try to match it to one of the IPs on the system. Once it finds a match, that becomes the network the cluster will use. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; resolves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt;, which is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syslinux&amp;lt;/span&amp;gt; with a little [[bash]] magic to verify which interface is going to be used for the cluster communication;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig |grep -B 1 $(gethostip -d $(uname -n)) | grep HWaddr | awk &#039;{ print $1 }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#name_3|name]]&amp;lt;/span&amp;gt; attribute document for details on how name to interface mapping is resolved.&lt;br /&gt;
&lt;br /&gt;
The second attribute is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_nodeid_attribute|nodeid]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;. This must be a unique integer amongst the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode ...&amp;gt;&amp;lt;/span&amp;gt; elements in the cluster. It is what the cluster itself uses to identify the node.&lt;br /&gt;
&lt;br /&gt;
=== Defining Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
[[2-Node_Red_Hat_KVM_Cluster_Tutorial#Concept.3B_Fencing|Fencing]] devices are used to forcible eject a node from a cluster if it stops responding. Said another way, fence devices put a node into a known state. &lt;br /&gt;
&lt;br /&gt;
There are many, many devices out there that can be used for fencing. We&#039;re going to be using two specific devices:&lt;br /&gt;
&lt;br /&gt;
* IPMI to press and hold the node&#039;s power button until the server powers down.&lt;br /&gt;
* Switched PDUs to cut the power feeding the node, if the IPMI device fails or can not be contacted.&lt;br /&gt;
&lt;br /&gt;
In the end, any device that can power off or isolate a lost node will do fine for fencing. The setup we will be using here uses very common components and it provides full redundancy, ensuring the ability to fence regardless of what might fail.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, our nodes support [[IPMI]], which we will use as the primary fence device. We also have an [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP7900 APC] brand switched PDU which will act as a backup fence device.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Not all brands of switched PDUs are supported as fence devices. Before you purchase a fence device, confirm that it is supported.}}&lt;br /&gt;
&lt;br /&gt;
All fence devices are contained within the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevices.3B_Defining_Fence_Devices|fencedevices]]&amp;lt;/span&amp;gt; tag, which has no attributes of its own. Within this parent tag are one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; child tags.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In our cluster, each fence device used will have its own &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; tag. If you are using [[IPMI]], this means you will have a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; entry for each node, as each physical IPMI [[BMC]] is a unique fence device. &lt;br /&gt;
&lt;br /&gt;
Our nodes have two power supplies each. Each power supply is plugged into a different switched PDU, which in turn in plugged into a dedicated UPS. So we have two physical PDUs, requiring two more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;fencedevice... /&amp;gt;&amp;lt;/span&amp;gt; entries.&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; tags share two basic attributes; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_agent_attribute|agent]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; attribute must be unique among all the fence devices in your cluster. As we will see in the next step, this name will be used within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode...&amp;gt;&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; tag tells the cluster which [[fence agent]] to use when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[fenced]]&amp;lt;/span&amp;gt; daemon needs to communicate with the physical fence device. A fence agent is simple a shell script that acts as a go-between layer between the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon and the fence hardware. This agent takes the arguments from the daemon, like what port to act on and what action to take, and performs the requested action against the target node. The agent is responsible for ensuring that the execution succeeded and returning an appropriate success or failure exit code. &lt;br /&gt;
&lt;br /&gt;
For those curious, the full details are described in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://fedorahosted.org/cluster/wiki/FenceAgentAPI FenceAgentAPI]&amp;lt;/span&amp;gt;. If you have two or more of the same fence device, like IPMI, then you will use the same fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; value a corresponding number of times.&lt;br /&gt;
&lt;br /&gt;
Beyond these two attributes, each fence agent will have its own subset of attributes. The scope of which is outside this tutorial, though we will see examples for IPMI and a switched PDU. All fence agents have a corresponding man page that will show you what attributes it accepts and how they are used. The two fence agents we will see here have their attributes defines in the following &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[man]]&amp;lt;/span&amp;gt; pages:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_ipmilan&amp;lt;/span&amp;gt; - IPMI fence agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_apc_snmp&amp;lt;/span&amp;gt; - APC-brand switched PDU using [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
The example above is what this tutorial will use.&lt;br /&gt;
&lt;br /&gt;
=== Using the Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
Now we have nodes and fence devices defined, we will go back and tie them together. This is done by:&lt;br /&gt;
&lt;br /&gt;
* Defining a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag containing all fence methods and devices.&lt;br /&gt;
** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; tag(s) containing the device call(s) needed for each fence attempt.&lt;br /&gt;
*** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tag(s) containing attributes describing how to call the fence device to kill this node.&lt;br /&gt;
&lt;br /&gt;
Here is how we implement [[IPMI]] as the primary fence device with the dual APC switched PDUs as the backup method.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First, notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag has no attributes. It&#039;s merely a parent for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]](s)&amp;lt;/span&amp;gt; child elements.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This next few paragraphs are very important! Please read it carefully!}}&lt;br /&gt;
&lt;br /&gt;
The second thing you will notice is that one method, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; method has a device with an extra argument. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; is needed because this is a 2-node cluster so quorum is not available. What this means is that, if the network breaks and both nodes are alive, both nodes will try to fence the other at nearly the same time. IPMI devices, being unique per node, can conceivable mean both nodes initiate a power down before either dies. This condition is called a &amp;quot;dual-fence&amp;quot; and leaves your cluster entirely powered down.&lt;br /&gt;
&lt;br /&gt;
There are two ways of dealing with this. The first is to make sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is turned off. When the power button is pressed when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is running, the system will begin a graceful shutdown. The IPMI BMC will continue to hold down the power button and after four seconds, the node should power off. However, this is four seconds where the fence daemon can initiate a fence against the peer. By disabling the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; daemon, the system will nearly instantly power off when the power button is pressed, drastically reducing the time between a node&#039;s power button being pressed and when the node actually shuts off.&lt;br /&gt;
&lt;br /&gt;
The second way to deal with this is to give one of the nodes a head start. That is what the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; does. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; goes to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05b02&amp;lt;/span&amp;gt;, it will not see a delay and it will initiate the fence action immediately. Meanwhile, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will gather up the information on fencing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, see the 15 second delay and wait. After 15 seconds, it will proceed with the fence action as it normally would.&lt;br /&gt;
&lt;br /&gt;
The idea here is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will have a 15 second head start in fencing its peer. These configuration changes should help ensure that one node always survives a fence call.&lt;br /&gt;
&lt;br /&gt;
Back to the main fence config!&lt;br /&gt;
&lt;br /&gt;
There are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; elements per node, one for each fence device, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. These names are merely descriptive and can be whatever you feel is most appropriate. &lt;br /&gt;
&lt;br /&gt;
Within each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; element is one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tags. For a given method to succeed, all defined &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; elements must themselves succeed. This is very useful for grouping calls to separate PDUs when dealing with nodes having redundant power supplies, as we have here.&lt;br /&gt;
&lt;br /&gt;
The actual fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; configuration is the final piece of the puzzle. It is here that you specify per-node configuration options and link these attributes to a given &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt;. Here, we see the link to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#device.27s_name_attribute|name]]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n01&amp;lt;/span&amp;gt; in this example.&lt;br /&gt;
&lt;br /&gt;
Note that the PDU definitions needs a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute where the IPMI fence devices do not. These are the sorts of differences you will find, varying depending on how the fence device agent works. IPMI devices only work on their host, so when you ask an IPMI device to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;&amp;quot;, it&#039;s obvious what the target is. With devices like PDUs, SAN switches and other multi-port devices, this is not the case. Our PDUs have eight ports each, so we need to tell the fence agent which ports we want acted on. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s power supplies are plugged into port #1 on both PDUs. For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, they&#039;re plugged into each PDU&#039;s port #2.&lt;br /&gt;
&lt;br /&gt;
When a fence call is needed, the fence devices will be called in the order they are found here. If both devices fail, the cluster will go back to the start and try again, looping indefinitely until one device succeeds.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s important to understand why we use IPMI as the primary fence device. The FenceAgentAPI specification suggests, but does not require, that a fence device confirm that the node is off. IPMI can do this, the switched PDU can not. Thus, IPMI won&#039;t return a success unless the node is truly off. The PDU, however, will return a success once the power is cut to the requested port. The risk is that a misconfigured node with redundant PSUs may in fact still be running if one of their cords was moved to a different port and the configuration wasn&#039;t updated, leading to disastrous consequences.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s step through an example fence call to help show how the per-cluster and fence device attributes are combined during a fence call:&lt;br /&gt;
&lt;br /&gt;
* The cluster manager decides that a node needs to be fenced. Let&#039;s say that the victim is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The first &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; section under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is consulted. Within it there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; entries, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. The IPMI method&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has one attribute while the PDU&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has two attributes;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;; only found in the PDU &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt;, this tells the cluster that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is connected to switched PDU&#039;s outlet number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;action&amp;lt;/span&amp;gt;; Found on both devices, this tells the cluster that the fence action to take is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;. How this action is actually interpreted depends on the fence device in use, though the name certainly implies that the node will be forced off and then restarted.&lt;br /&gt;
* The cluster searches in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevices&amp;lt;/span&amp;gt; for a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; matching the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n02&amp;lt;/span&amp;gt;. This fence device has four attributes; &lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt;; This tells the cluster to call the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent script, as we discussed earlier.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipaddr&amp;lt;/span&amp;gt;; This tells the fence agent where on the network to find this particular IPMI BMC. This is how multiple fence devices of the same type can be used in the cluster.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt;; This is the login user name to use when authenticating against the fence device.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passwd&amp;lt;/span&amp;gt;; This is the password to supply along with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt; name when authenticating against the fence device.&lt;br /&gt;
* Should the IPMI fence call fail for some reason, the cluster will move on to the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt; method, repeating the steps above but using the PDU values.&lt;br /&gt;
&lt;br /&gt;
When the cluster calls the fence agent, it does so by initially calling the fence agent script with no arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_ipmilan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-c05n02.ipmi&lt;br /&gt;
login=admin&lt;br /&gt;
passwd=secret&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see then, the first three arguments are from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; attributes and the last one is from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
If this method fails, then the PDU will be called in a very similar way, but with an extra argument from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_apc_snmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-p02.alteeve.ca&lt;br /&gt;
port=2&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should this fail, the cluster will go back and try the IPMI interface again. It will loop through the fence device methods forever until one of the methods succeeds.&lt;br /&gt;
Below are snippets from other clusters using different fence device configurations which might help you build your cluster.&lt;br /&gt;
&lt;br /&gt;
=== Giving Nodes More Time to Start and Avoiding &amp;quot;Fence Loops&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section also explains why we don&#039;t allow &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to start on boot. If we did, we&#039;d risk a &amp;quot;fence loop&amp;quot;, where a fenced node boots, tries to contact its peer, times out and fences it. The peer boot, starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, times out waiting and fenced the other peer. Not good.}}&lt;br /&gt;
&lt;br /&gt;
Clusters with more than three nodes will have to gain quorum before they can fence other nodes. As we discussed earlier though, this is not the case when using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cman.3B_The_Cluster_Manager|cman]]&amp;lt;/span&amp;gt; element. What this means in practice is that if you start the cluster on one node and then wait too long to start the cluster on the second node, the first will fence the second.&lt;br /&gt;
&lt;br /&gt;
The logic behind this is; When the cluster starts, it will try to talk to its fellow node and then fail. With the special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;two_node=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute set, the cluster knows that it is allowed to start clustered services, but it has no way to say for sure what state the other node is in. It could well be online and hosting services for all it knows. So it has to proceed on the assumption that the other node is alive and using shared resources. Given that, and given that it can not talk to the other node, its only safe option is to fence the other node. Only then can it be confident that it is safe to start providing clustered services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The new tag is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fence_daemon.3B_Fencing|fence_daemon]]&amp;lt;/span&amp;gt;, seen near the bottom if the file above. The change is made using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#post_join_delay|post_join_delay]]=&amp;quot;30&amp;quot;&amp;lt;/span&amp;gt; attribute. By default, the cluster will declare the other node dead after just &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; seconds. The reason is that the larger this value, the slower the start-up of the cluster services will be. During testing and development though, I find this value to be far too short and frequently led to unnecessary fencing. Once your cluster is setup and working, it&#039;s not a bad idea to reduce this value to the lowest value with which you are comfortable.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Totem ===&lt;br /&gt;
&lt;br /&gt;
There are many attributes for the [[totem]] element. For now though, we&#039;re only going to set two of them. We know that cluster communication will be travelling over our private, secured [[BCN]] network, so for the sake of simplicity, we&#039;re going to disable encryption. We are also offering network redundancy using the bonding drivers, so we&#039;re also going to disable totem&#039;s [[redundant ring protocol]].&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Corosync uses a concept called &amp;quot;token rings&amp;quot; for cluster communication. This is not to be confused with the old token ring network protocol, but the basic concept is the same. A token is passed from node to node, around and around the ring. A node can&#039;t send new messages or acknowledge old messages except when it has the token. By default, corosync uses a single &amp;quot;ring&amp;quot;. This means that, without network-level fault-tolerance, this ring becomes a single point of failure.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got bonded network connections backing our cluster communications, so we inherently have fault-tolerance built in to our network.&lt;br /&gt;
&lt;br /&gt;
For some though, bonded interfaces is not feasible, so starting in RHEL 6.3, &amp;quot;[[RRP|Redundant Ring Protocol]]&amp;quot; was made available as a supported option. This allows you to setup a second network to use as a backup in case the primary ring fails. We don&#039;t need this, so we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp_mode=&amp;quot;none&amp;quot;&amp;lt;/span&amp;gt;. If you want to use it, you can now though, but it&#039;s outside the scope of this tutorial. &lt;br /&gt;
&lt;br /&gt;
If you wish to explore it further, please take a look at the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt; element tag called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;[[RHCS_v3_cluster.conf#Tag.3B_altname|altname]]...&amp;gt;&amp;lt;/span&amp;gt;. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;altname&amp;lt;/span&amp;gt; is used though, then the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#rrp_mode|rrp_mode]]&amp;lt;/span&amp;gt; attribute will need to be changed to either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passive&amp;lt;/span&amp;gt; (the details of which are outside the scope of this tutorial).&lt;br /&gt;
&lt;br /&gt;
The second option we&#039;re looking at here is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#secauth|secauth]]=&amp;quot;off&amp;quot;&amp;lt;/span&amp;gt; attribute. This controls whether the cluster communications are encrypted or not. We can safely disable this because we&#039;re working on a known-private network, which yields two benefits; It&#039;s simpler to setup and it&#039;s a lot faster. If you must encrypt the cluster communications, then you can do so here. The details of which are also outside the scope of this tutorial though.&lt;br /&gt;
&lt;br /&gt;
=== Validating and Pushing the /etc/cluster/cluster.conf File ===&lt;br /&gt;
&lt;br /&gt;
One of the most noticeable changes in [[RHCS]] cluster stable 3 is that we no longer have to make a long, cryptic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xmllint&amp;lt;/span&amp;gt; call to validate our cluster configuration. Now we can simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ccs_config_validate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If there was a problem, you need to go back and fix it. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; proceed until your configuration validates. Once it does, we&#039;re ready to move on!&lt;br /&gt;
&lt;br /&gt;
With it validated, we need to push it to the other node. As the cluster is not running yet, we will push it out using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/cluster/cluster.conf root@an-c05n02:/etc/cluster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
cluster.conf&lt;br /&gt;
&lt;br /&gt;
sent 1393 bytes  received 43 bytes  2872.00 bytes/sec&lt;br /&gt;
total size is 1313  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the first and only time that we&#039;ll need to push the configuration file over manually.&lt;br /&gt;
&lt;br /&gt;
=== Setting up ricci ===&lt;br /&gt;
&lt;br /&gt;
Once the cluster is running, we can take advantage of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;modclusterd&amp;lt;/span&amp;gt; daemons to push all future updates out automatically. This is why we enabled these two daemons to start on boot earlier on.&lt;br /&gt;
&lt;br /&gt;
This requires setting a password for each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user first. Setting the password is exactly the same as setting the password on any other system user.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Later, when we make the next change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, we&#039;ll push the changes out using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; program. The first time this is used on each node, you will need to enter the local and the peer&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password. Once entered though, we&#039;ll not need to enter the password again.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The [[AN!CDB|dashboard]] we will install later expects the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password to be the same on both nodes. If you plan to use the dashboard, be sure to set the same password and then make note of it for later!}}&lt;br /&gt;
&lt;br /&gt;
=== Starting the Cluster for the First Time ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to open a second terminal on either node and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; [[syslog]] file. All cluster messages will be recorded here and it will help to debug problems if you can watch the logs. To do this, in the new terminal windows run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will clear the screen and start watching for new lines to be written to syslog. When you are done watching syslog, press the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; key combination.&lt;br /&gt;
&lt;br /&gt;
How you lay out your terminal windows is, obviously, up to your own preferences. Below is a configuration I have found very useful.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node-rhcs3_terminal-window-layout_01.png|thumb|center|700px|Terminal window layout for watching 2 nodes. Left windows are used for entering commands and the left windows are used for tailing syslog.]]&lt;br /&gt;
&lt;br /&gt;
With the terminals setup, lets start the cluster!&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you don&#039;t start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; on both nodes within 30 seconds, the slower node will be fenced.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is what you should see in syslog (this taken from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 kernel: DLM (built Sep 14 2013 05:33:35) installed&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync Cluster Engine (&#039;1.4.1&#039;): started and ready to provide service.&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync built-in features: nss dbus rdma snmp&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully read config from /etc/cluster/cluster.conf&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully parsed cman config&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transport (UDP/IP Multicast).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] The network interface [10.20.50.1] is now up.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] CMAN 3.0.12.1 (built Aug 29 2013 07:27:01) started&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync CMAN membership service 2.90&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: openais checkpoint service B.01.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync extended virtual synchrony service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync configuration service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster closed process group service v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster config database access v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync profile loading service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Compatibility mode set to whitetank.  Using V1 and V2 of the synchronization engine.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] quorum regained, resuming activity&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] This node is within the primary component and will provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:0 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:1 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 fenced[2902]: fenced 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 dlm_controld[2927]: dlm_controld 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:13 an-c05n01 gfs_controld[2977]: gfs_controld 3.0.12.1 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to confirm that the cluster is operating properly, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Version: 6.2.0&lt;br /&gt;
Config Version: 7&lt;br /&gt;
Cluster Name: an-cluster-05&lt;br /&gt;
Cluster Id: 42881&lt;br /&gt;
Cluster Member: Yes&lt;br /&gt;
Cluster Generation: 20&lt;br /&gt;
Membership state: Cluster-Member&lt;br /&gt;
Nodes: 2&lt;br /&gt;
Expected votes: 1&lt;br /&gt;
Total votes: 2&lt;br /&gt;
Node votes: 1&lt;br /&gt;
Quorum: 1  &lt;br /&gt;
Active subsystems: 7&lt;br /&gt;
Flags: 2node &lt;br /&gt;
Ports Bound: 0  &lt;br /&gt;
Node name: an-c05n01.alteeve.ca&lt;br /&gt;
Node ID: 1&lt;br /&gt;
Multicast addresses: 239.192.167.41 &lt;br /&gt;
Node addresses: 10.20.50.1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the both nodes are talking because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you have a managed switch that needs persistent multicast groups set, log into your switches now. We can see above that this cluster is using the multicast group &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;239.192.167.41&amp;lt;/span&amp;gt;, so find it in your switch config and ensure it&#039;s persistent.}}&lt;br /&gt;
&lt;br /&gt;
If you ever want to see the nitty-gritty configuration, you can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync-objctl&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
corosync-objctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cluster.name=an-cluster-05&lt;br /&gt;
cluster.config_version=7&lt;br /&gt;
cluster.cman.expected_votes=1&lt;br /&gt;
cluster.cman.two_node=1&lt;br /&gt;
cluster.cman.nodename=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.cman.cluster_id=42881&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n01&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.delay=15&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n02.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n02&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n01&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n01.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n02&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n02.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p01.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu1&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p02.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu2&lt;br /&gt;
cluster.fence_daemon.post_join_delay=30&lt;br /&gt;
cluster.totem.rrp_mode=none&lt;br /&gt;
cluster.totem.secauth=off&lt;br /&gt;
totem.rrp_mode=none&lt;br /&gt;
totem.secauth=off&lt;br /&gt;
totem.transport=udp&lt;br /&gt;
totem.version=2&lt;br /&gt;
totem.nodeid=1&lt;br /&gt;
totem.vsftype=none&lt;br /&gt;
totem.token=10000&lt;br /&gt;
totem.join=60&lt;br /&gt;
totem.fail_recv_const=2500&lt;br /&gt;
totem.consensus=2000&lt;br /&gt;
totem.key=an-cluster-05&lt;br /&gt;
totem.interface.ringnumber=0&lt;br /&gt;
totem.interface.bindnetaddr=10.20.50.1&lt;br /&gt;
totem.interface.mcastaddr=239.192.167.41&lt;br /&gt;
totem.interface.mcastport=5405&lt;br /&gt;
libccs.next_handle=7&lt;br /&gt;
libccs.connection.ccs_handle=3&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=4&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=5&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
logging.timestamp=on&lt;br /&gt;
logging.to_logfile=yes&lt;br /&gt;
logging.logfile=/var/log/cluster/corosync.log&lt;br /&gt;
logging.logfile_priority=info&lt;br /&gt;
logging.to_syslog=yes&lt;br /&gt;
logging.syslog_facility=local4&lt;br /&gt;
logging.syslog_priority=info&lt;br /&gt;
aisexec.user=ais&lt;br /&gt;
aisexec.group=ais&lt;br /&gt;
service.name=corosync_quorum&lt;br /&gt;
service.ver=0&lt;br /&gt;
service.name=corosync_cman&lt;br /&gt;
service.ver=0&lt;br /&gt;
quorum.provider=quorum_cman&lt;br /&gt;
service.name=openais_ckpt&lt;br /&gt;
service.ver=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.services.cman.service_id=9&lt;br /&gt;
runtime.services.ckpt.service_id=3&lt;br /&gt;
runtime.services.ckpt.0.tx=0&lt;br /&gt;
runtime.services.ckpt.0.rx=0&lt;br /&gt;
runtime.services.ckpt.1.tx=0&lt;br /&gt;
runtime.services.ckpt.1.rx=0&lt;br /&gt;
runtime.services.ckpt.2.tx=0&lt;br /&gt;
runtime.services.ckpt.2.rx=0&lt;br /&gt;
runtime.services.ckpt.3.tx=0&lt;br /&gt;
runtime.services.ckpt.3.rx=0&lt;br /&gt;
runtime.services.ckpt.4.tx=0&lt;br /&gt;
runtime.services.ckpt.4.rx=0&lt;br /&gt;
runtime.services.ckpt.5.tx=0&lt;br /&gt;
runtime.services.ckpt.5.rx=0&lt;br /&gt;
runtime.services.ckpt.6.tx=0&lt;br /&gt;
runtime.services.ckpt.6.rx=0&lt;br /&gt;
runtime.services.ckpt.7.tx=0&lt;br /&gt;
runtime.services.ckpt.7.rx=0&lt;br /&gt;
runtime.services.ckpt.8.tx=0&lt;br /&gt;
runtime.services.ckpt.8.rx=0&lt;br /&gt;
runtime.services.ckpt.9.tx=0&lt;br /&gt;
runtime.services.ckpt.9.rx=0&lt;br /&gt;
runtime.services.ckpt.10.tx=0&lt;br /&gt;
runtime.services.ckpt.10.rx=0&lt;br /&gt;
runtime.services.ckpt.11.tx=2&lt;br /&gt;
runtime.services.ckpt.11.rx=3&lt;br /&gt;
runtime.services.ckpt.12.tx=0&lt;br /&gt;
runtime.services.ckpt.12.rx=0&lt;br /&gt;
runtime.services.ckpt.13.tx=0&lt;br /&gt;
runtime.services.ckpt.13.rx=0&lt;br /&gt;
runtime.services.evs.service_id=0&lt;br /&gt;
runtime.services.evs.0.tx=0&lt;br /&gt;
runtime.services.evs.0.rx=0&lt;br /&gt;
runtime.services.cfg.service_id=7&lt;br /&gt;
runtime.services.cfg.0.tx=0&lt;br /&gt;
runtime.services.cfg.0.rx=0&lt;br /&gt;
runtime.services.cfg.1.tx=0&lt;br /&gt;
runtime.services.cfg.1.rx=0&lt;br /&gt;
runtime.services.cfg.2.tx=0&lt;br /&gt;
runtime.services.cfg.2.rx=0&lt;br /&gt;
runtime.services.cfg.3.tx=0&lt;br /&gt;
runtime.services.cfg.3.rx=0&lt;br /&gt;
runtime.services.cpg.service_id=8&lt;br /&gt;
runtime.services.cpg.0.tx=4&lt;br /&gt;
runtime.services.cpg.0.rx=8&lt;br /&gt;
runtime.services.cpg.1.tx=0&lt;br /&gt;
runtime.services.cpg.1.rx=0&lt;br /&gt;
runtime.services.cpg.2.tx=0&lt;br /&gt;
runtime.services.cpg.2.rx=0&lt;br /&gt;
runtime.services.cpg.3.tx=16&lt;br /&gt;
runtime.services.cpg.3.rx=23&lt;br /&gt;
runtime.services.cpg.4.tx=0&lt;br /&gt;
runtime.services.cpg.4.rx=0&lt;br /&gt;
runtime.services.cpg.5.tx=2&lt;br /&gt;
runtime.services.cpg.5.rx=3&lt;br /&gt;
runtime.services.confdb.service_id=11&lt;br /&gt;
runtime.services.pload.service_id=13&lt;br /&gt;
runtime.services.pload.0.tx=0&lt;br /&gt;
runtime.services.pload.0.rx=0&lt;br /&gt;
runtime.services.pload.1.tx=0&lt;br /&gt;
runtime.services.pload.1.rx=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.connections.active=6&lt;br /&gt;
runtime.connections.closed=111&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.dispatched=9&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.service_id=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.responses=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.dispatched=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.requests=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.service_id=3&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.responses=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.dispatched=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.requests=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.overload=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.service_id=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.client_pid=2977&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.responses=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.dispatched=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.requests=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.sem_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.send_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.recv_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.queue_size=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.invalid_request=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.overload=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.dispatched=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.overload=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.service_id=11&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.client_pid=3083&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.responses=463&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.dispatched=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.requests=466&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.sem_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.send_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.recv_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.queue_size=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.invalid_request=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.overload=0&lt;br /&gt;
runtime.totem.pg.msg_reserved=1&lt;br /&gt;
runtime.totem.pg.msg_queue_avail=761&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_tx=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_rx=437&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_tx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_rx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_tx=3&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_rx=5&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_tx=46&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_retx=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_rx=57&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_rx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_rx=8&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.consensus_timeouts=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mtt_rx_token=835&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_token_workload=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_backlog_calc=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.rx_msg_dropped=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_gather=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_sendmsg_failures=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.firewall_enabled_or_nic_failure=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.ip=r(0) ip(10.20.50.1) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.status=joined&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.ip=r(0) ip(10.20.50.2) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.status=joined&lt;br /&gt;
runtime.blackbox.dump_flight_data=no&lt;br /&gt;
runtime.blackbox.dump_state=no&lt;br /&gt;
cman_private.COROSYNC_DEFAULT_CONFIG_IFACE=xmlconfig:cmanpreconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want to check what [[DLM]] lockspaces, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; to list lock spaces. Given that we&#039;re not running and resources or clustered filesystems though, there won&#039;t be any at this time. We&#039;ll look at this again later.&lt;br /&gt;
&lt;br /&gt;
== Testing Fencing ==&lt;br /&gt;
&lt;br /&gt;
We need to thoroughly test our fence configuration and devices before we proceed. Should the cluster call a fence, and if the fence call fails, the cluster will hang until the fence finally succeeds. This effectively hangs the cluster, by design. The rationale is that, as bad as a hung cluster might be, it&#039;s better than risking data corruption. &lt;br /&gt;
&lt;br /&gt;
So if we have problems, we need to find them now.&lt;br /&gt;
&lt;br /&gt;
We need to run two tests from each node against the other node for a total of four tests.&lt;br /&gt;
&lt;br /&gt;
# The first test will verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; is working. To do this, we will hang the victim node by sending &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to the kernel&#039;s &amp;quot;[https://en.wikipedia.org/wiki/Magic_SysRq_key magic SysRq]&amp;quot; key. We do this by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt; which immediately and completely hangs the kernel. This does not effect the IPMI BMC, so if we&#039;ve configured everything properly, the surviving node should be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; to reboot the crashed node.&lt;br /&gt;
# Secondly, we will pull the power on the target node. This removes all power from the node, causing the IPMI BMC to also fail. You should see the other node try to fence the target using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;, see it fail and then try again using the second method, the switched PDUs via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt;. If you watch and listen to the PDUs, you should see the power indicator LED light up and hear the mechanical relays close the circuit when the fence completes.&lt;br /&gt;
&lt;br /&gt;
For the second test, you could just physically unplug the cables from the PDUs. We&#039;re going to cheat though and use the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence handler to manually turn off the target ports. This will help show that the fence agents are really just shell scripts. Used on their own, they do not talk to the cluster in any way. So despite using them to cut the power, the cluster will not know what state the lost node is in, requiring a fence call still.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Test&lt;br /&gt;
!Victim&lt;br /&gt;
!Pass?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=After the target node powers back up after each test, be sure to restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
=== Using Fence_check to Verify our Fencing Config ===&lt;br /&gt;
&lt;br /&gt;
In RHEL 6.4, a new tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; was added to the cluster toolbox. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, we can call it and it will gather up the data from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; and then call each defined fence device with the action &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;&amp;quot;. If everything is configured properly, all fence devices should exit with a return code of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt;) or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
If any fence device&#039;s agent exits with any other code, something has gone wrong and we need to fix it before proceeding.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to run this tool from both node. So let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:56:07 EDT 2013 pid: 3236&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is very promising! Now lets run it again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We want to do this because, for example, if the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file on the second node was bad, a fence may work on the first node but not this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:57:27 EDT 2013 pid: 28127&lt;br /&gt;
Unable to perform fence_check: node is not fence master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Well then, that&#039;s not what we expected.&lt;br /&gt;
&lt;br /&gt;
Actually, it is. When a cluster starts, one of the nodes in the cluster will be chosen to be the node which performs actual fence calls. This node (the one with the lowest node ID) is the only one that, by default, can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page, we see that we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-f&amp;lt;/span&amp;gt; switch to override this behaviour, but there is an important note:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man fence_check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       -f     Override checks and force execution. DO NOT USE ON PRODUCTION CLUSTERS!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason for this is that, while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; is running, should a node fail, it will not be able to fence until the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; finishes. In production, this can cause recovery post-failure to take a bit longer than it otherwise would.&lt;br /&gt;
&lt;br /&gt;
Good thing we&#039;re testing now, before the cluster is in production!&lt;br /&gt;
&lt;br /&gt;
So lets try again, this time forcing the issue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 11:02:35 EDT 2013 pid: 28222&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 for the First Time ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step will totally crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;! If fencing fails for some reason, you may need physical access to the node to recover it.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 11:05:46 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 11:06:21 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! The IPMI-based fencing worked! &lt;br /&gt;
&lt;br /&gt;
But why did it take 33 seconds?&lt;br /&gt;
&lt;br /&gt;
The current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; version works this way for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt; actions;&lt;br /&gt;
&lt;br /&gt;
# Check status&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks status again until the status shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power on&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks the status again&lt;br /&gt;
&lt;br /&gt;
If you tried doing these steps directly, you would find that it takes roughly 18 seconds to run. Add this to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; we set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; when using the IPMI fence device and you have the 33 seconds we see here.&lt;br /&gt;
&lt;br /&gt;
If you are watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s display, you should now see it starting to boot back up.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
As was discussed earlier, IPMI and other out-of-band management interfaces have a fatal flaw as a fence device. Their [[BMC]] draws its power from the same power supply as the node itself. Thus, when the power supply itself fails (for example, if an internal wire shorted against the chassis), fencing via IPMI will fail as well. This makes the power supply a single point of failure, which is what the PDU protects us against.&lt;br /&gt;
&lt;br /&gt;
In case you&#039;re wondering how likely failing a redundant PSU is...&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[image:lisa_seely-cable_fail-2.jpeg|thumb|300px|Cable short 1]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-3.jpeg|thumb|300px|Cable short 2]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-4.jpeg|thumb|300px|Cable short 3]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|Thanks to my very talented fellow admin, [https://twitter.com/thedoh Lisa Seelye], for this object lesson.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So to simulate a failed power supply, we&#039;re going to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to turn off the power to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Given that the node has two power supplies, one plugged in to each PDU, we&#039;ll need to make two calls to cut the power. &lt;br /&gt;
&lt;br /&gt;
Alternatively, you could also just unplug the power cables from the PDUs and the fence would still succeed. Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; confirms that the requested ports have no power, the fence action succeeds. Whether the nodes restart after the fence is not at all a factor.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the following two chained calls;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
Back on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:31:49 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoozah!&lt;br /&gt;
&lt;br /&gt;
Notice that there is an error from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;? This is exactly what we expected because of the IPMI&#039;s BMC lost power and couldn&#039;t respond. You will also notice the large delay, despite there not being a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; set for the PDU fence devices for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This was from the initial delay when trying to fence using IPMI. This is why we don&#039;t need to specify &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; on the PDUs as well. &lt;br /&gt;
&lt;br /&gt;
So now we know that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; can be fenced successfully from both fence devices. Now we need to run the same tests against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
=== Hanging an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=&#039;&#039;&#039;DO NOT ASSUME THAT &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; WILL FENCE PROPERLY JUST BECAUSE &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; PASSED!&#039;&#039;&#039;. There are many ways that a fence could fail; Bad password, misconfigured device, plugged into the wrong port on the PDU and so on. Always test all nodes using all methods!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;ing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
{{note|1=This command will not return and you will lose all ability to talk to this node until it is rebooted.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:40:29 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:40:48 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect!&lt;br /&gt;
&lt;br /&gt;
Notice this time that the fence action took 17 seconds, much less that it took to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c01n01&amp;lt;/span&amp;gt;. This is because, as you probably guessed, there is no &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; went to fence it, it proceeded immediately. This tells us that if both nodes try to fence each other at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should be left the winner.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Last fence test! Time to yank the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and make sure its power fencing works.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; with the following call;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:44:41 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:44:47 an-c05n01 ntpd[2298]: synchronized to 66.96.30.35, stratum 2&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woot!&lt;br /&gt;
&lt;br /&gt;
Only now can we safely say that our fencing is setup and working properly.&lt;br /&gt;
&lt;br /&gt;
= Installing DRBD =&lt;br /&gt;
&lt;br /&gt;
DRBD is an open-source application for real-time, block-level disk replication created and maintained by [http://linbit.com Linbit]. We will use this to keep the data on our cluster consistent between the two nodes.&lt;br /&gt;
&lt;br /&gt;
To install it, we have three choices;&lt;br /&gt;
# Purchase a Red Hat blessed, fully supported copy from [http://linbit.com Linbit].&lt;br /&gt;
# Install from the freely available, community maintained [http://elrepo.org/tiki/tiki-index.php ELRepo] repository.&lt;br /&gt;
# Install from source files.&lt;br /&gt;
&lt;br /&gt;
We will be using the 8.3.x version of DRBD. This tracts the Red Hat and Linbit supported versions, providing the most tested combination and providing a painless path to move to a fully supported version, should you decide to do so down the road.&lt;br /&gt;
&lt;br /&gt;
== Option 1 - Fully Supported by Red Hat and Linbit ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This shows how to install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please do this again for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat decided to no longer directly support [[DRBD]] in [[EL6]] to narrow down what applications they shipped and focus on improving those components. Given the popularity of DRBD, however, Red Hat struck a deal with [[Linbit]], the authors and maintainers of DRBD. You have the option of purchasing a fully supported version of DRBD that is blessed by Red Hat for use under Red Hat Enterprise Linux 6.&lt;br /&gt;
&lt;br /&gt;
If you are building a fully supported cluster, please [http://www.linbit.com/en/products-services/drbd/drbd-for-high-availability/ contact Linbit] to purchase DRBD. Once done, you will get an email with you login information and, most importantly here, the [[URL]] hash needed to access the official repositories.&lt;br /&gt;
&lt;br /&gt;
First you will need to add an entry in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/yum.repo.d/&amp;lt;/span&amp;gt; for DRBD, but this needs to be hand-crafted as you must specify the URL hash given to you in the email as part of the repo configuration.&lt;br /&gt;
&lt;br /&gt;
* Log into the [https://my.linbit.com Linbit portal].&lt;br /&gt;
* Click on &#039;&#039;Account&#039;&#039;.&lt;br /&gt;
* Under &#039;&#039;Your account details&#039;&#039;, click on the hash string to the right of &#039;&#039;URL hash:&#039;&#039;.&lt;br /&gt;
* Click on &#039;&#039;RHEL 6&#039;&#039; (even if you are using CentOS or another [[EL6]] distro.&lt;br /&gt;
&lt;br /&gt;
This will take you to a new page called &#039;&#039;Instructions for using the DRBD package repository&#039;&#039;. The details installation instruction are found here.&lt;br /&gt;
&lt;br /&gt;
Lets use the imaginative URL hash of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;abcdefghijklmnopqrstuvwxyz0123456789ABCD&amp;lt;/span&amp;gt; and we&#039;re are in fact using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x86_64&amp;lt;/span&amp;gt; architecture. Given this, we would create the following repository configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/yum.repos.d/linbit.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[drbd-8]&lt;br /&gt;
name=DRBD 8&lt;br /&gt;
baseurl=http://packages.linbit.com/abcdefghijklmnopqrstuvwxyz0123456789ABCD/rhel6/x86_64&lt;br /&gt;
gpgcheck=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once this is saved, you can install DRBD using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yum&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd kmod-drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 2 - Install From ELRepo ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is the method used for this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
[http://elrepo.org ELRepo] is a community-maintained repository of packages for &#039;&#039;&#039;E&#039;&#039;&#039;nterprise &#039;&#039;&#039;L&#039;&#039;&#039;inux; Red Hat Enterprise Linux and its derivatives like CentOS. This is the easiest option for a freely available DRBD package.&lt;br /&gt;
&lt;br /&gt;
The main concern with this option is that you are seceding control of DRBD to a community-controlled project. This is a trusted repo, but there are still undeniable security concerns. &lt;br /&gt;
&lt;br /&gt;
Check for the latest installation RPM and information:&lt;br /&gt;
&lt;br /&gt;
* [http://elrepo.org ELRepo Installation Page]&lt;br /&gt;
&lt;br /&gt;
Install the ELRepo GPG key, add the repo and install DRBD.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can install the DRBD 8.3 RPMs. &lt;br /&gt;
&lt;br /&gt;
Be warned; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kmod-drbd83&amp;lt;/span&amp;gt; can take some time to install. Please be patient!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 3 - Install From Source ==&lt;br /&gt;
&lt;br /&gt;
If you do not wish to pay for access to the official DRBD repository and do not feel comfortable adding a public repository, your last option is to install from Linbit&#039;s source code. The benefit of this is that you can vet the source before installing it, making it a more secure option. The downside is that you will need to manually install updates and security fixes as they are made available.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Both&#039;&#039;&#039; nodes run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output, it&#039;s really quite impressive&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hooking DRBD into the Cluster&#039;s Fencing ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=In older DRBD 8.3 releases, prior to 8.3.16, we needed to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt; from [https://raw.github.com/digimer/rhcs_fence/master/rhcs_fence github] as the shipped version had a bug. With the release of 8.3.16, this is no longer the case.}}&lt;br /&gt;
&lt;br /&gt;
DRBD is, effectively, a stand-alone application. You can use it on its own without any other software. For this reason, DRBD has its own fencing mechanism to avoid split-brains if the DRBD nodes lose contact with each other. &lt;br /&gt;
&lt;br /&gt;
It would be a replication of effort to setup actual fencing devices in DRBD, so instead we will use a &amp;quot;hook&amp;quot; script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. When DRBD loses contact with its peer, it will block and then call this script. In turn, this script calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and asks it to fence the peer. It then waits for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to respond with a success or failure.&lt;br /&gt;
&lt;br /&gt;
If the fence succeed, DRBD will resume normal operation, confident that the peer is not doing the same.&lt;br /&gt;
&lt;br /&gt;
If the fence fails, DRBD will continue to block and continue to try and fence the peer indefinitely. Thus, if a fence call fails, DRBD will remain blocked and all disk reads and writes will hang. This is by design as it is better to hang than to risk a split-brain, which can lead to data loss and corruption.&lt;br /&gt;
&lt;br /&gt;
By using this script, if the fence configuration ever changes, you only need to update the configuration in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, not also in DRBD as well.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;quot;Why&amp;quot; of our Layout - More Safety! ===&lt;br /&gt;
&lt;br /&gt;
We will be creating two separate DRBD resources. The reason for this is to minimize the chance of data loss in a [[split-brain]] event. We&#039;ve got to fairly great lengths to insure that a split-brain never occurs, but it is still possible. So we want a &amp;quot;last line of defence&amp;quot;, just in case.&lt;br /&gt;
&lt;br /&gt;
Consider this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a two-node cluster running two VMs. One is a mirror for a project and the other is an accounting application. Node 1 hosts the mirror, Node 2 hosts the accounting application.&lt;br /&gt;
* A partition occurs and both nodes try to fence the other.&lt;br /&gt;
* Network access is lost, so both nodes fall back to fencing using PDUs.&lt;br /&gt;
* Both nodes have redundant power supplies, and at some point in time, the power cables on the second PDU got reversed.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; agent succeeds, because the requested outlets were shut off. However, do to the cabling mistake, neither node actually shut down.&lt;br /&gt;
* Both nodes proceed to run independently, thinking they are the only node left.&lt;br /&gt;
* During this split-brain, the mirror VM downloads over a [[gigabyte]] of updates. Meanwhile, an hour earlier, the accountant updates the books, totalling less than one [[megabyte]] of changes.&lt;br /&gt;
&lt;br /&gt;
At this point, you will need to discard the changed on one of the nodes. So now you have to choose:&lt;br /&gt;
&lt;br /&gt;
* Is the node with the most changes more valid?&lt;br /&gt;
* Is the node with the most recent changes more valid?&lt;br /&gt;
&lt;br /&gt;
Neither of these are true, as the node with the older data and smallest amount of changed data is the accounting data which is significantly more valuable.&lt;br /&gt;
&lt;br /&gt;
Now imagine that both VMs have equally valuable data. What then? Which side do you discard?&lt;br /&gt;
&lt;br /&gt;
The approach we will use is to create two separate DRBD resources. Then we will assign our servers into two groups;&lt;br /&gt;
&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;quot;pools&amp;quot; of servers will have a dedicate DRBD resource behind it. These pools will be managed by clustered LVM, as that provides a very powerful ability to manage DRBD&#039;s raw space.&lt;br /&gt;
&lt;br /&gt;
Now imagine the above scenario, except this time imagine that the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; are on one DRBD resource and the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; are on a different resource. Now we can recover from the split brain safely! &lt;br /&gt;
&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This ability to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;invalidate&amp;lt;/span&amp;gt; on both direction allows us to recover without risking data loss, &#039;&#039;provided&#039;&#039; all the servers were actually running on the same node at the time of the split-brain event.&lt;br /&gt;
&lt;br /&gt;
To summarize, we&#039;re going to create the following three resources:&lt;br /&gt;
&lt;br /&gt;
* We&#039;ll create a resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* We&#039;ll create a second resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating The Partitions For DRBD ==&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[LVM]] on the hosts, and simply create [[LV]]s to back our DRBD resources. However, this causes confusion as LVM will see the [[PV]] signatures on both the DRBD backing devices and the DRBD device itself. Getting around this requires editing LVM&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter&amp;lt;/span&amp;gt; option, which is somewhat complicated and is outside the scope of this tutorial. We&#039;re going to use raw partitions and we recommend you do the same.&lt;br /&gt;
&lt;br /&gt;
On our nodes, we created three primary disk partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda1&amp;lt;/span&amp;gt;; The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/boot&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda2&amp;lt;/span&amp;gt;; The swap partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda3&amp;lt;/span&amp;gt;; The root &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
&lt;br /&gt;
We will create a new extended partition. Then within it we will create two new partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; clustered file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Block Alignment ===&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; instead of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;, we would have to manually ensure that our partitions fell on 64 [[KiB]] boundaries. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt;, we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-a opt&amp;lt;/span&amp;gt; to tell it to use optimal alignment, saving us a lot of work. This is important for decent performance performance in our servers. This is true for both traditional platter and modern solid-state drives.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, we want to ensure that the file systems created within a VM matches the block alignment of the underlying storage stack, clear down to the base partitions on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda&amp;lt;/span&amp;gt; (or what ever your lowest-level block device is).&lt;br /&gt;
&lt;br /&gt;
For those who are curious though, this is why falling on 64 KiB boundaries are important.&lt;br /&gt;
&lt;br /&gt;
Imagine this misaligned scenario;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
                |~~~~~|==========================================================&lt;br /&gt;
DRBD Partition  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, when the guest wants to write one block worth of data, it actually causes two blocks to be written, causing avoidable disk I/O. That effectively doubles the number of [[IOPS]] needed, a huge waste of disk resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
                |~~~~~~~|========================================================&lt;br /&gt;
DRBD Partition  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By changing the start cylinder of our partitions to always start on 64 [[KiB]] boundaries, we&#039;re sure to keep the guest OS&#039;s file system in-line with the DRBD backing device&#039;s blocks. Thus, all reads and writes in the guest OS effect a matching number of real blocks, maximizing disk I/O efficiency.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You will want to do this with [[SSD]] drives, too. It&#039;s true that the performance will remain about the same, but SSD drives have a limited number of write cycles, and aligning the blocks will minimize block writes.}}&lt;br /&gt;
&lt;br /&gt;
Special thanks to [http://xen.org/community/spotlight/pasi.html Pasi Kärkkäinen] for his patience in explaining to me the importance of disk alignment. He created two images which I used as templates for the [[ASCII]] art images above:&lt;br /&gt;
&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-not-aligned.jpg Virtual Disk Partitions, Not aligned.]&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-aligned.jpg Virtual Disk Partitions, aligned.]&lt;br /&gt;
&lt;br /&gt;
=== Determining Storage Pool Sizes ===&lt;br /&gt;
&lt;br /&gt;
Before we can create the DRBD partitions, we first need to know how much space we want to allocate to each node&#039;s storage pool.&lt;br /&gt;
&lt;br /&gt;
Before we start though, we need to know how much available storage space we have to play with. Both nodes should have identical storage, but we&#039;ll double check now. If they differ, we&#039;ll be limited to the size of the smaller one.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Both nodes show the same amount of free space, 851 [[GB]] (note, not [[GiB]]). &lt;br /&gt;
&lt;br /&gt;
We need to carve this up into three chunks of space:&lt;br /&gt;
&lt;br /&gt;
# Space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. Install ISOs, server definition files and the like will be kept here.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to install 8 different operating systems. That means we&#039;ll need enough space for at least eight different install [[ISO]] images. We&#039;ll allocate 40 [[GB]] for this. That leaves 811 GB left for servers.&lt;br /&gt;
&lt;br /&gt;
Choose which node will host what servers is largely a question of distributing CPU load. Of course, each node has to be capable of running all of our servers at the same time. With a little planning though, we can split up servers with expected high CPU load and, when both nodes are up, gain a little performance.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s create a table showing the servers we plan to build. We&#039;ll put them into two columns, one for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the others designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We&#039;ll note how much disk space each server will need. Remember, we&#039;re trying to split up our servers with the highest expected CPU loads. This, being a tutorial, is going to be a fairly artificial division. You will need to decide for yourself how you want to split up your servers and how much space each needs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|Total: 500 GB&lt;br /&gt;
|Total: 300 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason we put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on the same DRBD resource (and thus, the same storage pool) as the one that will host &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers is that it changes relatively rarely. So in the already unlikely event that there is a split-brain event, the chances of something important changing in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; before the split-brain is resolved is extremely low. So low that the overhead of a third resource is not justified.&lt;br /&gt;
&lt;br /&gt;
So then:&lt;br /&gt;
&lt;br /&gt;
* The first DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, will need to have 540 GB of space.&lt;br /&gt;
* The second DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, will need to have 300 GB of space.&lt;br /&gt;
&lt;br /&gt;
This is a total of 840 GB, leaving about 11 GB unused. What you do with the remaining free space is entirely up to you. You can assign it to one of the servers, leave it as free space in one (or partially on both) storage pools, etc.&lt;br /&gt;
&lt;br /&gt;
It&#039;s actually a very common setup to build &#039;&#039;Anvil!&#039;&#039; systems with more storage than is needed. This free space can then be used later for new servers, growing or adding space to existing servers and so on. In our case, we&#039;ll give the left over space to the second storage pool and leave it there unassigned.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to create the partitions on each node that will back our DRBD resources!&lt;br /&gt;
&lt;br /&gt;
=== Creating the DRBD Partitions ===&lt;br /&gt;
&lt;br /&gt;
Here I will show you the values I entered to create the three partitions I needed on my nodes. &lt;br /&gt;
&lt;br /&gt;
{{note|1=All of the following commands need to be run on both nodes. It&#039;s very important that both nodes have identical partitions when you finish!}}&lt;br /&gt;
&lt;br /&gt;
On both nodes, start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shell.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; console. Before we start, let&#039;s take another look at the current disk configuration along with the amount of free space available.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we can create the three DRBD partition, we first need to create an [[extended partition|extended]] partition wherein which we will create the two [[logical partition|logical]] partitions. From the output above, we can see that the free space starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8GB&amp;lt;/span&amp;gt;, and that the drive ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;898GB&amp;lt;/span&amp;gt;. Knowing this, we can now create the extended partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that message, we will reboot when we finish.&lt;br /&gt;
&lt;br /&gt;
So now we can confirm that the new extended partition was create by again printing the partition table and the free space.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. So now we&#039;re going to create our two logical partitions. We&#039;re going to use the same start position as last time, but the end position will be 540 [[GB]] further in, rounded up to an even ten gigabytes. You can be more precise, if you wish, but we&#039;ve got a little wiggle room.&lt;br /&gt;
&lt;br /&gt;
If you recall from the section above, this is how much space we determined we would need for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition and the five servers that will live on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This means that we&#039;re going to create a new logical partition that starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8G&amp;lt;/span&amp;gt; and ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;590G&amp;lt;/span&amp;gt;, for a partition that is roughly 540 GB in size.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda&lt;br /&gt;
(Device or resource busy).  As a result, it may not reflect all of your changes&lt;br /&gt;
until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll check again to see the new partition layout.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect. Now we have a total of 308 [[GB]] left free. We need 300 GB, so this is enough, as expected. Lets allocate it all to our final partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, lets look at the new partition table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Just as we asked for!&lt;br /&gt;
&lt;br /&gt;
Before we finish though, let&#039;s be extra careful and do a manual check of our new partitions to ensure that they are, in fact, aligned optimally. There will be no output from the following commands if the partitions are aligned.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, we&#039;re done!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to reboot to make the kernel see the new partition table. If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, stop it &#039;&#039;&#039;before&#039;&#039;&#039; rebooting.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once the nodes are back online, remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
== Configuring DRBD ==&lt;br /&gt;
&lt;br /&gt;
DRBD is configured in two parts:&lt;br /&gt;
&lt;br /&gt;
* Global and common configuration options&lt;br /&gt;
* Resource configurations&lt;br /&gt;
&lt;br /&gt;
We will be creating three separate DRBD resources, so we will create three separate resource configuration files. More on that in a moment.&lt;br /&gt;
&lt;br /&gt;
=== Configuring DRBD Global and Common Options ===&lt;br /&gt;
&lt;br /&gt;
As always, we&#039;re going to start by making backups. Then we&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. After we finish, we&#039;ll copy everything over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can begin.&lt;br /&gt;
&lt;br /&gt;
The first file to edit is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/global_common.conf&amp;lt;/span&amp;gt;. In this file, we will set global configuration options and set default resource configuration options.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll talk about the values we&#039;re setting here as well as put the explanation of each option in the configuration file itself, as it will be useful to have them should you need to alter the files sometime in the future.&lt;br /&gt;
&lt;br /&gt;
The first addition is in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;handlers { }&amp;lt;/span&amp;gt; directive. We&#039;re going to add the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence-peer&amp;lt;/span&amp;gt; option and configure it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;obliterate-peer.sh&amp;lt;/span&amp;gt; script we spoke about earlier in the DRBD section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	handlers {&lt;br /&gt;
		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
		# tool. It will call a fence against the other node and return&lt;br /&gt;
		# the appropriate exit code to DRBD.&lt;br /&gt;
		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to add three options to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;startup { }&amp;lt;/span&amp;gt; directive; We&#039;re going to tell DRBD to make both nodes &amp;quot;primary&amp;quot; on start, to wait five minutes on start for its peer to connect and, if the peer never connected last time, to wait onto two minutes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	startup {&lt;br /&gt;
		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
		become-primary-on	both;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
		# connect. This should be longer than it takes for cman to&lt;br /&gt;
		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
		# forever.&lt;br /&gt;
		wfc-timeout		300;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
		# if the other node was degraded the last time it was seen by&lt;br /&gt;
		# this node. This is a way to speed up the boot process when&lt;br /&gt;
		# the other node is out of commission for an extended duration.&lt;br /&gt;
		degr-wfc-timeout	120;&lt;br /&gt;
		&lt;br /&gt;
		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
		# &#039;Outdated&#039;.&lt;br /&gt;
		outdated-wfc-timeout    120;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disk { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure DRBD&#039;s behaviour when a [[split-brain]] is detected. By setting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencing&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;resource-and-stonith&amp;lt;/span&amp;gt;, we&#039;re telling DRBD to stop all disk access and call a fence against its peer node rather than proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	disk {&lt;br /&gt;
		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
		# condition and it is incredible important in dual-primary&lt;br /&gt;
		# setups!&lt;br /&gt;
		fencing			resource-and-stonith;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;net { }&amp;lt;/span&amp;gt; directive, we&#039;re going to tell DRBD that it is allowed to run in dual-primary mode and we&#039;re going to configure how it behaves if a split-brain has occurred, despite our best efforts. The recovery (or lack there of) requires three options; What to do when neither node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-0pri&amp;lt;/span&amp;gt;), what to do if only one node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-1pri&amp;lt;/span&amp;gt;) and finally, what to do if both nodes had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-2pri&amp;lt;/span&amp;gt;), as will most likely be the case for us. This last instance will be configured to tell DRBD just to drop the connection, which will require human intervention to correct.&lt;br /&gt;
&lt;br /&gt;
At this point, you might be wondering why we won&#039;t simply run Primary/Secondary. The reason is because of live-migration. When we push a VM across to the backup node, there is a short period of time where both nodes need to be writeable. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	net {&lt;br /&gt;
		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
		allow-two-primaries;&lt;br /&gt;
&lt;br /&gt;
		# The following three commands tell DRBD how to react should&lt;br /&gt;
		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
		# where both nodes were primary. This care requires human&lt;br /&gt;
		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
		after-sb-1pri		discard-secondary;&lt;br /&gt;
		after-sb-2pri		disconnect;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure how much bandwidth DRBD is allowed to take away from normal replication for use with background synchronization of out-of-sync blocks. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	syncer {&lt;br /&gt;
		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
		# the more of an impact normal application use of the DRBD&lt;br /&gt;
		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
		rate			30M;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes and exit the text editor. Now let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to see the changes we made.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/drbd.d/global_common.conf /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/drbd.d/global_common.conf	2013-09-27 16:38:33.000000000 -0400&lt;br /&gt;
+++ /etc/drbd.d/global_common.conf	2013-10-31 01:08:13.733823523 -0400&lt;br /&gt;
@@ -22,0 +23,5 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
+		# tool. It will call a fence against the other node and return&lt;br /&gt;
+		# the appropriate exit code to DRBD.&lt;br /&gt;
+		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
@@ -26,0 +32,22 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
+		become-primary-on	both;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
+		# connect. This should be longer than it takes for cman to&lt;br /&gt;
+		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
+		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
+		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
+		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
+		# forever.&lt;br /&gt;
+		wfc-timeout		300;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
+		# if the other node was degraded the last time it was seen by&lt;br /&gt;
+		# this node. This is a way to speed up the boot process when&lt;br /&gt;
+		# the other node is out of commission for an extended duration.&lt;br /&gt;
+		degr-wfc-timeout	120;&lt;br /&gt;
+&lt;br /&gt;
+		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
+		# &#039;Outdated&#039;.&lt;br /&gt;
+		outdated-wfc-timeout	120;&lt;br /&gt;
@@ -31,0 +59,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
+		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
+		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
+		# condition and it is incredible important in dual-primary&lt;br /&gt;
+		# setups!&lt;br /&gt;
+		fencing			resource-and-stonith;&lt;br /&gt;
@@ -37,0 +72,14 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
+		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
+		allow-two-primaries;&lt;br /&gt;
+&lt;br /&gt;
+		# The following three commands tell DRBD how to react should&lt;br /&gt;
+		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
+		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
+		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
+		# where both nodes were primary. This care requires human&lt;br /&gt;
+		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
+		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
+		after-sb-1pri		discard-secondary;&lt;br /&gt;
+		after-sb-2pri		disconnect;&lt;br /&gt;
@@ -41,0 +90,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
+		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
+		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
+		# the more of an impact normal application use of the DRBD&lt;br /&gt;
+		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
+		rate			30M;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with this file.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the DRBD Resources ===&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, we are going to create two DRBD resources:&lt;br /&gt;
&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and provide space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each resource configuration will be in its own file saved as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/rX.res&amp;lt;/span&amp;gt;. The two of them will be pretty much the same. So let&#039;s take a look at the first resource, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt;, then we&#039;ll just look at the changes for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt;. These files won&#039;t exist initially so we start by creating them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/r0.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the shared GFS2 partition and host VMs designed &lt;br /&gt;
# to run on an-c05n01.&lt;br /&gt;
resource r0 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device		/dev/drbd0;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk	internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address		10.10.50.1:7788;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address		10.10.50.2:7788;&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; and edit for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; VM resource. The main differences are the resource name, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, the block device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt;, the port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and the backing block devices, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
vim /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
resource r1 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device          /dev/drbd1;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk       internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address         10.10.50.1:7789;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address         10.10.50.2:7789;&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s easiest to see what changed between &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; if we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/drbd.d/r0.res	2013-10-30 21:26:31.936680235 -0400&lt;br /&gt;
+++ /etc/drbd.d/r1.res	2013-10-30 21:27:42.625006337 -0400&lt;br /&gt;
@@ -1,3 +1,2 @@&lt;br /&gt;
-# This is the resource used for the shared GFS2 partition and host VMs designed&lt;br /&gt;
-# to run on an-c05n01.&lt;br /&gt;
-resource r0 {&lt;br /&gt;
+# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
+resource r1 {&lt;br /&gt;
@@ -5 +4 @@&lt;br /&gt;
-	device		/dev/drbd0;&lt;br /&gt;
+	device		/dev/drbd1;&lt;br /&gt;
@@ -17 +16 @@&lt;br /&gt;
-		address		10.10.50.1:7788;&lt;br /&gt;
+		address		10.10.50.1:7789;&lt;br /&gt;
@@ -20 +19 @@&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
@@ -24,2 +23,2 @@&lt;br /&gt;
-		address		10.10.50.2:7788;&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		address		10.10.50.2:7789;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see easily that the resource name, device name and backing partitions changed. We can also see that the IP address used for each resource stayed the same. We split up the network traffic by using different [[TCP]] ports instead.&lt;br /&gt;
&lt;br /&gt;
Now we will do an initial validation of the configuration. This is done by running the following command;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm dump&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/drbd.conf&lt;br /&gt;
common {&lt;br /&gt;
    protocol               C;&lt;br /&gt;
    net {&lt;br /&gt;
        allow-two-primaries;&lt;br /&gt;
        after-sb-0pri    discard-zero-changes;&lt;br /&gt;
        after-sb-1pri    discard-secondary;&lt;br /&gt;
        after-sb-2pri    disconnect;&lt;br /&gt;
    }&lt;br /&gt;
    disk {&lt;br /&gt;
        fencing          resource-and-stonith;&lt;br /&gt;
    }&lt;br /&gt;
    syncer {&lt;br /&gt;
        rate             30M;&lt;br /&gt;
    }&lt;br /&gt;
    startup {&lt;br /&gt;
        wfc-timeout      300;&lt;br /&gt;
        degr-wfc-timeout 120;&lt;br /&gt;
        outdated-wfc-timeout 120;&lt;br /&gt;
        become-primary-on both;&lt;br /&gt;
    }&lt;br /&gt;
    handlers {&lt;br /&gt;
        fence-peer       /usr/lib/drbd/rhcs_fence;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r0 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r0 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.1:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.2:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r1 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r1 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.1:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.2:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll note that the output is formatted differently from the configuration files we created, but the values themselves are the same. If there had of been errors, you would have seen them printed. Fix any problems before proceeding. Once you get a clean dump, copy the configuration over to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
drbd.d/r0.res&lt;br /&gt;
drbd.d/r1.res&lt;br /&gt;
&lt;br /&gt;
sent 5015 bytes  received 91 bytes  10212.00 bytes/sec&lt;br /&gt;
total size is 5479  speedup is 1.07&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Initializing the DRBD Resources ==&lt;br /&gt;
&lt;br /&gt;
Now that we have DRBD configured, we need to initialize the DRBD backing devices and then bring up the resources for the first time.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To save a bit of time and typing, the following sections will use a little &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bash&amp;lt;/span&amp;gt; magic. When commands need to be run on both resources, rather than running the same command twice with the different resource names, we will use the short-hand form &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, create the new [[DRBD metadata|metadata]] on the backing devices. &lt;br /&gt;
&lt;br /&gt;
Two notes:&lt;br /&gt;
&lt;br /&gt;
* You may need to type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; to confirm the action if any data is seen.&lt;br /&gt;
* If DRBD sees an actual file system, it will error and insist that you clear the partition. You can do this by running; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd if=/dev/zero of=/dev/sdaX bs=4M count=1000&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; is the partition you want to clear. This is called &amp;quot;zeroing out&amp;quot; a partition. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; program does not print its progress. To check the progress, open a new terminal to the node and run &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kill -USR1 $(pidof dd)&amp;lt;/span&amp;gt;&#039;.&lt;br /&gt;
&lt;br /&gt;
Lets create the meta-data!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get an error like this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
pvs stderr:  Skipping volume group an-c05n01-vg0&lt;br /&gt;
pvs stderr:        Freeing VG (null) at 0x16efd20.&lt;br /&gt;
pvs stderr:      Unlocking /var/lock/lvm/P_global&lt;br /&gt;
pvs stderr:        _undo_flock /var/lock/lvm/P_global&lt;br /&gt;
&lt;br /&gt;
md_offset 542229131264&lt;br /&gt;
al_offset 542229098496&lt;br /&gt;
bm_offset 542212550656&lt;br /&gt;
&lt;br /&gt;
Found LVM2 physical volume signature&lt;br /&gt;
   529504444 kB left usable by current configuration&lt;br /&gt;
Could not determine the size of the actually used data area.&lt;br /&gt;
&lt;br /&gt;
Device size would be truncated, which&lt;br /&gt;
would corrupt data and result in&lt;br /&gt;
&#039;access beyond end of device&#039; errors.&lt;br /&gt;
If you want me to do this, you need to zero out the first part&lt;br /&gt;
of the device (destroy the content).&lt;br /&gt;
You should be very sure that you mean it.&lt;br /&gt;
Operation refused.&lt;br /&gt;
&lt;br /&gt;
Command &#039;drbdmeta 0 v08 /dev/sda5 internal create-md&#039; terminated with exit code 40&lt;br /&gt;
drbdadm create-md r0: exited with code 40&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The next two commands will irrevocably destroy the data on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; on the backing device to destroy all existing data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda5 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.04352 s, 464 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda6 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.83831 s, 426 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Try running the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create-md&amp;lt;/span&amp;gt; commands again, it should work this time.&lt;br /&gt;
&lt;br /&gt;
== Loading the drbd Kernel Module ==&lt;br /&gt;
&lt;br /&gt;
Before we can go any further, we&#039;ll need to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module. Normally you won&#039;t normally need to do this because the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd&amp;lt;/span&amp;gt; initializations script handles this for us. We can&#039;t use this yet though because the DRBD resource we defined are not yet setup.&lt;br /&gt;
&lt;br /&gt;
So to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module, run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: minor_table @ 0xffff8803374420c0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: minor_table @ 0xffff8803387a9ec0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now go back to the terminal windows we were using to watch the cluster start. Kill the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;, if it&#039;s still running. We&#039;re going to watch the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; so we can keep tabs on the current state of the DRBD resources. We&#039;ll do this by using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt; program, which will refresh the output of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat&amp;lt;/span&amp;gt; call every couple of seconds.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back in the first terminal, we need now to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;attach&amp;lt;/span&amp;gt; each resource&#039;s backing device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda{5,6}&amp;lt;/span&amp;gt;, to their respective DRBD resources, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;. After running the following command, you will see no output on the first terminal, but the second terminal&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; should change.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the connection state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:StandAlone&amp;lt;/span&amp;gt;, the current role, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Secondary/Unknown&amp;lt;/span&amp;gt; and the disk state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ds:Inconsistent/DUnknown&amp;lt;/span&amp;gt;. This tells us that our resources are not talking to one another, are not usable because they are in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state (you can&#039;t even read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbdX&amp;lt;/span&amp;gt; device) and that the backing device does not have an up to date view of the data. &lt;br /&gt;
&lt;br /&gt;
This all makes sense of course, as the resources are brand new.&lt;br /&gt;
&lt;br /&gt;
So the next step is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;connect&amp;lt;/span&amp;gt; the two nodes together. As before, we won&#039;t see any output from the first terminal, but the second terminal will change.&lt;br /&gt;
&lt;br /&gt;
{{note|1=After running the following command on the first node, its connection state will become &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:WFConnection&amp;lt;/span&amp;gt; which means that it is &#039;&#039;&#039;w&#039;&#039;&#039;aiting &#039;&#039;&#039;f&#039;&#039;&#039;or a &#039;&#039;&#039;connection&#039;&#039;&#039; from the other node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can now see that the two nodes are talking to one another properly as the connection state has changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:Connected&amp;lt;/span&amp;gt;. They can see that their peer node is in the same state as they are; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next step is to synchronize the two nodes. Neither node has any real data, so it&#039;s entirely arbitrary which node we choose to use here. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; because, well, why not.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm -- --overwrite-data-of-peer primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:11467520 nr:0 dw:0 dr:11468516 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 7:03:30 speed: 20,372 (13,916) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:10833792 nr:0 dw:0 dr:10834788 al:0 bm:661 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290248820&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.6% (283444/294024)M&lt;br /&gt;
        finish: 7:31:03 speed: 10,720 (13,144) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# don&#039;t run anything here.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11467520 dw:11467520 dr:0 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 8:42:19 speed: 16,516 (13,796) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11061120 dw:11061120 dr:0 al:0 bm:675 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290021492&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.7% (283224/294024)M&lt;br /&gt;
        finish: 7:06:46 speed: 11,316 (13,308) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! This tells us that the data, as garbage as it is, is being sync&#039;ed over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. DRBD doesn&#039;t know about data structures, all it cares about is that whatever is on the first node is identical to what is on the other node. This initial synchronization does this.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
&lt;br /&gt;
* There is a trick to short-circuit this which we used to use in the old tutorial, but we no longer recommend this. If you ever run an [http://www.drbd.org/users-guide-8.3/s-online-verify.html online verification] of the resource, all the previously unsync&#039;ed blocks will sync. So it&#039;s better to do it initially before the cluster is in production.&lt;br /&gt;
* If you notice that the sync speed is sitting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;250 K/sec&amp;lt;/span&amp;gt;, then DRBD isn&#039;t honouring the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { rate xxM; }&amp;lt;/span&amp;gt; value. Run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbdadm adjust all&amp;lt;/span&amp;gt; on one node at the sync speed should start to speed up.&lt;br /&gt;
* &#039;&#039;&#039;Sync speed is NOT replication speed!&#039;&#039;&#039; - This is a very common misunderstanding for new DRBD users. The sync speed we see here &#039;&#039;takes away from&#039;&#039; the speed available to applications writing to the DRBD resource. The slower this is, the faster your applications can write to DRBD. Conversely, the higher the sync speed, the slower your applications writing to disk will be. So keep this reasonably low. Generally, a good number is about 30% of the storage or network&#039;s fastest speed, whichever is slower. If in doubt, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30M&amp;lt;/span&amp;gt; is a safe starting value.&lt;br /&gt;
* If you manually adjust the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer&amp;lt;/span&amp;gt; speed, it will not immediately change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;. It takes a while to change, be patient.&lt;br /&gt;
&lt;br /&gt;
The good thing about DRBD is that we do not have to wait for the resources to be synchronized. So long as one of the resource is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;, both nodes will work. If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node needs to read data, it will simply read it from its peer. &lt;br /&gt;
&lt;br /&gt;
It is worth noting though; If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; node disconnects or disappears, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node will immediately demote to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;, making it unusable. This is the biggest reason for making the synchronization speed as high as we did. The cluster can not be considered redundant until both nodes are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So with this understood, let&#039;s get back to work. The resources can synchronize in the background.&lt;br /&gt;
&lt;br /&gt;
In order for a DRBD resource to be usable, it has to be &amp;quot;promoted&amp;quot;. Be default, DRBD resources start in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state. This means that it will receive changes from the peer, but no changes can be made. You can&#039;t even look at the contents of a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; resource. Why this is requires more time to discuss than we can go into here.&lt;br /&gt;
&lt;br /&gt;
So the next step is to promote both resource on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:20010808 nr:0 dw:0 dr:20011804 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 9:01:50 speed: 15,660 (14,680) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:18860984 nr:0 dw:0 dr:18861980 al:0 bm:1151 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:282221684&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.3% (275604/294024)M&lt;br /&gt;
        finish: 2:31:28 speed: 31,036 (13,836) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:20010808 dw:20010752 dr:608 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 11:06:52 speed: 12,724 (14,584) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:19152824 dw:19152768 dr:608 al:0 bm:1168 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:281929844&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.4% (275320/294024)M&lt;br /&gt;
        finish: 2:27:30 speed: 31,844 (13,956) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how the roles have changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Primary/Primary&amp;lt;/span&amp;gt;? That tells us that DRBD is now ready to be used on both nodes!&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re done setting up DRBD!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Stopping DRBD while a synchronization is running is fine. When DRBD starts back up, it will pick up where it left off.}}&lt;br /&gt;
&lt;br /&gt;
Eventually, the next day in the case of our cluster, the synchronization will complete. This is what it looks like once it&#039;s finished. After this point, all application writes to the DRBD resources will get all the available performance your storage and network have to offer.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:413259760 nr:0 dw:20 dr:413261652 al:1 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:188464424 nr:0 dw:20 dr:188465928 al:1 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:413259760 dw:413259600 dr:944 al:0 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:188464424 dw:188464264 dr:876 al:0 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the next section, we&#039;re going to start working on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. You will want to stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; and go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
= Initializing Clustered Storage =&lt;br /&gt;
&lt;br /&gt;
Before we can provision the first virtual machine, we must first create the storage that will back them. This will take a few steps:&lt;br /&gt;
&lt;br /&gt;
* Configuring [[LVM]]&#039;s clustered locking and creating the [[PV]]s, [[VG]]s and [[LV]]s&lt;br /&gt;
* Formatting and configuring the shared [[GFS2]] partition.&lt;br /&gt;
* Adding storage to the cluster&#039;s resource management.&lt;br /&gt;
&lt;br /&gt;
== Clustered Logical Volume Management ==&lt;br /&gt;
&lt;br /&gt;
We will assign all three DRBD resources to be managed by clustered LVM. This isn&#039;t strictly needed for the [[GFS2]] partition, as it uses DLM directly. However, the flexibility of LVM is very appealing, and will make later growth of the GFS2 partition quite trivial, should the need arise. &lt;br /&gt;
&lt;br /&gt;
The real reason for clustered LVM in our cluster is to provide DLM-backed locking to the partitions, or logical volumes in LVM, that will be used to back our VMs. Of course, the flexibility of LVM managed storage is enough of a win to justify using LVM for our VMs in itself, and shouldn&#039;t be ignored here.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Clustered LVM Locking ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to edit the configuration on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. When we&#039;re done, we&#039;ll copy the configuration files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Before we create the clustered LVM, we need to first make three changes to the LVM configuration:&lt;br /&gt;
&lt;br /&gt;
* We need to filter out the DRBD backing devices so that LVM doesn&#039;t see the same signature a second time on the DRBD resource&#039;s backing device.&lt;br /&gt;
* Switch from local locking to clustered locking.&lt;br /&gt;
* Prevent fall-back to local locking when the cluster is not available.&lt;br /&gt;
&lt;br /&gt;
Start by making a backup of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; and then begin editing it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The configuration option to filter out the DRBD backing device is, surprisingly, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter = [ ... ]&amp;lt;/span&amp;gt;. By default, it is set to allow everything via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a/.*/&amp;quot;&amp;lt;/span&amp;gt; regular expression. We&#039;re only using DRBD in our LVM, so we&#039;re going to flip that to reject everything &#039;&#039;except&#039;&#039; DRBD by changing the regex to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the locking, we&#039;re going to change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;locking_type&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (local locking) to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;, (clustered locking). This is what tells LVM to use DLM and gives us the &amp;quot;clustered&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    locking_type = 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, we&#039;re also going to disallow fall-back to local locking. Normally, LVM would try to access a clustered LVM [[VG]] using local locking if DLM is not available. We want to prevent any access to the clustered LVM volumes &#039;&#039;except&#039;&#039; when the DLM is itself running. This is done by changing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fallback_to_local_locking&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes, then lets run a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; against our backup to see a summary of the changes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/lvm/lvm.conf /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/lvm/lvm.conf	2013-10-10 09:40:04.000000000 -0400&lt;br /&gt;
+++ /etc/lvm/lvm.conf	2013-10-31 00:21:36.196228144 -0400&lt;br /&gt;
@@ -67,2 +67,2 @@&lt;br /&gt;
-    # By default we accept every block device:&lt;br /&gt;
-    filter = [ &amp;quot;a/.*/&amp;quot; ]&lt;br /&gt;
+    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
+    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
@@ -408 +408 @@&lt;br /&gt;
-    locking_type = 1&lt;br /&gt;
+    locking_type = 3&lt;br /&gt;
@@ -424 +424 @@&lt;br /&gt;
-    fallback_to_local_locking = 1&lt;br /&gt;
+    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect! Now copy the modified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; file to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm/lvm.conf root@an-c05n02:/etc/lvm/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm.conf&lt;br /&gt;
&lt;br /&gt;
sent 2399 bytes  received 355 bytes  5508.00 bytes/sec&lt;br /&gt;
total size is 37569  speedup is 13.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Testing the clvmd Daemon ===&lt;br /&gt;
&lt;br /&gt;
A little later on, we&#039;re going to put clustered LVM under the control of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Before we can do that though, we need to start it manually so that we can use it to create the [[LV]] that will back the [[GFS2]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. We will also be adding this partition to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, once it has been created.&lt;br /&gt;
&lt;br /&gt;
Before we start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon, we&#039;ll want to ensure that the cluster is running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M     64   2013-10-30 22:40:07  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M     64   2013-10-30 22:40:07  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is, and both nodes are members. We can start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve not created any volume groups yet, so that complaint about not finding any is expected.&lt;br /&gt;
&lt;br /&gt;
We can now use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool&amp;lt;/span&amp;gt; to verify that a [[DLM]] lock space has been created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. If it has, we&#039;re good to go.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 2,2&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 1,1&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Initialize our DRBD Resource for use as LVM PVs ===&lt;br /&gt;
&lt;br /&gt;
This is the first time we&#039;re actually going to use DRBD and clustered LVM, so we need to make sure that both are started.&lt;br /&gt;
&lt;br /&gt;
First, check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198972/294024)M&lt;br /&gt;
0:r0   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
1:r1   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198956/294024)M&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary/Primary&amp;lt;/span&amp;gt;, so we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
Now to check on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13936) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13894) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and running. As we did earlier, we can also verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; if we wish.&lt;br /&gt;
&lt;br /&gt;
Before we can use LVM, clustered or otherwise, we need to initialize one or more raw storage devices called &amp;quot;Physical Volumes&amp;quot;. This is done using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; command. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should see the newly initialized DRBD resources appear.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s verify that, indeed, we have no existing [[PV]]s. We&#039;ll do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;, a tool that looks at blocks devices for physical volumes it may not yet have seen.&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; first, we&#039;ll see that no [[PV]]s have been created.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; against both DRBD devices. This will &amp;quot;sign&amp;quot; the devices and tell LVM that it can use them in [[VG]]s we&#039;ll soon create. On the other node, we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt;. If The &amp;quot;clustered&amp;quot; part of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; is working, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; should immediately know about the new PVs without needing another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvcreate /dev/drbd{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd0&amp;quot; successfully created&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd1&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;/dev/drbd0&amp;quot; is a new physical volume of &amp;quot;504.97 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               504.97 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;/dev/drbd1&amp;quot; is a new physical volume of &amp;quot;287.13 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               287.13 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If this was normal LVM, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; would not have seen the new [[PV]]s. Because DRBD replicated the changes and clustered LVM alerted the peer though, it immediately knew about the changes. &lt;br /&gt;
&lt;br /&gt;
Pretty neat!&lt;br /&gt;
&lt;br /&gt;
=== Creating Cluster Volume Groups ===&lt;br /&gt;
&lt;br /&gt;
As with initializing the DRBD resource above, we will create our volume groups, called [[VG]]s, on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. As with the PVs, we will again be able to see them on both nodes immediately.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that no previously-unseen VGs exist using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgscan&amp;lt;/span&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to create the VGs, we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgcreate&amp;lt;/span&amp;gt; command with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; switch, which tells LVM to make the VG a clustered VG. Note that when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon is running, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; is implied. However, it&#039;s best to get into the habit of being extra careful and thorough. If there was a problem, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; not being running for example, it will trigger an error and we avoid hassles later.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you plan to use the [[AN!CDB|cluster dashboard]], it is important that the volume group names match those below. If you do not do this, you may have trouble provisioning new servers via the dashboard&#039;s user interface.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use the volume group naming convention of:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;_vgX&amp;lt;/span&amp;gt;&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; matches the node that will become home to the servers using this storage pool.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgX&amp;lt;/span&amp;gt; is a simple sequence, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. If you ever need to add space to an existing storage pool, you can create a new DRBD resource, sign it as a PV and either assign it directly to the existing volume group or increment this number and create a second storage pool for the associated node.&lt;br /&gt;
&lt;br /&gt;
Earlier, while planning our partition sizes, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; would back the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; physical volume.&lt;br /&gt;
&lt;br /&gt;
Likewise, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd1&amp;lt;/span&amp;gt; would be used for the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, create both of our new VGs!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgcreate -c y an-c05n01_vg0 /dev/drbd0&lt;br /&gt;
vgcreate -c y an-c05n02_vg0 /dev/drbd1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n01_vg0&amp;quot; successfully created&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n02_vg0&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       73506 / 287.13 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
   &lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               504.97 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       129273 / 504.97 GiB&lt;br /&gt;
  VG UUID               TzKBFn-xBVB-e9AP-iL1l-AvQi-mZiV-86KnSF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good! Now as a point of note, let&#039;s look again at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; (we know it will be the same on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  PV Size               287.13 GiB / not usable 1.99 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Free PE               73506&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
   &lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  PV Size               504.97 GiB / not usable 2.18 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Free PE               129273&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice now that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;VG Name&amp;lt;/span&amp;gt; has a value where it didn&#039;t before? This shows us that the PV has been allocated to a volume.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it for the volume groups!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Logical Volume ===&lt;br /&gt;
&lt;br /&gt;
The last LVM step, for now, is to create a &amp;quot;logical volume&amp;quot; carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group. This will be used in the next step as the volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
&lt;br /&gt;
Out of thoroughness, let&#039;s scan for any previously unseen logical volumes using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
None found, as expected. So let&#039;s create our 40 [[GB]] logical volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition. We&#039;ll do this by specifying how large we want the new logical volume to be, what name we want to give it and what volume group to carve the space out of. The resulting logical volume will then be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/&amp;lt;vg&amp;gt;/&amp;lt;lv&amp;gt;&amp;lt;/span&amp;gt;. Here, we&#039;re taking space from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and we&#039;ll call this LV &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shared&amp;lt;/span&amp;gt;, so the resulting volume will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 40G -n shared an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;shared&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/shared&lt;br /&gt;
  LV Name                shared&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                f0w1J0-6aTz-0Bz0-SX57-pstr-g5qu-SAGGSS&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-10-31 17:07:50 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                40.00 GiB&lt;br /&gt;
  Current LE             10240&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. We can now create our GFS2 partition!&lt;br /&gt;
&lt;br /&gt;
== Creating the Shared GFS2 Partition ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Red Hat &#039;&#039;&#039;[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Global_File_System_2/index.html#s2-selinux-gfs2-gfs2 does NOT]&#039;&#039;&#039; support using SELinux and GFS2 together. The principle reason for this is the performance degradation caused by the additional storage overhead required for SELinux to operate. We decided to enable SELinux in the [[Anvil!]] anyway because of how infrequently the partition is changed. In our case, performance is not a concern. However, if you need to be 100% in compliance with what Red Hat supports, you will need to disable SELinux.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; are running.}}&lt;br /&gt;
&lt;br /&gt;
The GFS2-formatted &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; partition will be mounted at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on both nodes and it will be used for four main purposes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;; Storing files like [[ISO]] images needed when installing server operating systems and mounting &amp;quot;DVDs&amp;quot; into the virtual DVD-ROM drives.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision&amp;lt;/span&amp;gt;; Storing short scripts used to call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; which handles the creation of new servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;; This is where the [[XML]] definition files which define the virtual hardware backing our servers will be kept. This is the most important directory as the cluster and [[AN!CDB|dashboard]] will look here when starting, migrating and recovering servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/archive&amp;lt;/span&amp;gt;; This is used to store old copies of the [[XML]] definition files and provision scripts.&lt;br /&gt;
&lt;br /&gt;
Formatting the logical volume is much like formatting a traditional file system on a traditional partition. There are a few extra arguments needed though. Lets look at them first.&lt;br /&gt;
&lt;br /&gt;
The following switches will be used with our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt; call:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-p lock_dlm&amp;lt;/span&amp;gt;; This tells GFS2 to use [[DLM]] for its clustered locking.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-j 2&amp;lt;/span&amp;gt;; This tells GFS2 to create two journals. This must match the number of nodes that will try to mount this partition at any one time.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-t an-cluster-05:shared&amp;lt;/span&amp;gt;; This is the lock space name, which must be in the format &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;cluste_name&amp;gt;:&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster_name&amp;lt;/span&amp;gt; must match the one in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt; has to be unique in the cluster, which is easy for us because we&#039;ll only have the one gfs2 file system.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve formatted the partition, we&#039;ll use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_tool&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to query the new partition&#039;s superblock. We&#039;re going to use it shortly in some bash magic to pull out the [[UUID]] and feed it into a string formatted for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. More importantly here, it shows us that the second node sees the new file system.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Depending on the size of the new partition, this call could take a while to complete. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs.gfs2 -p lock_dlm -j 2 -t an-cluster-05:shared /dev/an-c05n01_vg0/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This will destroy any data on /dev/an-c05n01_vg0/shared.&lt;br /&gt;
It appears to contain: symbolic link to `../dm-0&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Are you sure you want to proceed? [y/n] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device:                    /dev/an-c05n01_vg0/shared&lt;br /&gt;
Blocksize:                 4096&lt;br /&gt;
Device Size                40.00 GB (10485760 blocks)&lt;br /&gt;
Filesystem Size:           40.00 GB (10485758 blocks)&lt;br /&gt;
Journals:                  2&lt;br /&gt;
Resource Groups:           160&lt;br /&gt;
Locking Protocol:          &amp;quot;lock_dlm&amp;quot;&lt;br /&gt;
Lock Table:                &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
UUID:                      774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  mh_magic = 0x01161970&lt;br /&gt;
  mh_type = 1&lt;br /&gt;
  mh_format = 100&lt;br /&gt;
  sb_fs_format = 1801&lt;br /&gt;
  sb_multihost_format = 1900&lt;br /&gt;
  sb_bsize = 4096&lt;br /&gt;
  sb_bsize_shift = 12&lt;br /&gt;
  no_formal_ino = 2&lt;br /&gt;
  no_addr = 23&lt;br /&gt;
  no_formal_ino = 1&lt;br /&gt;
  no_addr = 22&lt;br /&gt;
  sb_lockproto = lock_dlm&lt;br /&gt;
  sb_locktable = an-cluster-05:shared&lt;br /&gt;
  uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
Now, on both nodes, we need to create a mount point for the new file system and then we&#039;ll mount it on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   29M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   26M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the path under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Filesystem&amp;lt;/span&amp;gt; is different from what we used when creating the GFS2 partition. This is an effect of [[Device Mapper]], which is used by LVM to create [[symlinks]] to actual block device paths. If we look at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; device and the device from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;df&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/mapper/an--c05n01_vg0-shared&amp;lt;/span&amp;gt;, we&#039;ll see that they both point to the same actual block device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/an-c05n01_vg0/shared /dev/mapper/an--c05n01_vg0-shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/an-c05n01_vg0/shared -&amp;gt; ../dm-0&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/mapper/an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt; at the beginning of the files&#039; mode? That tells us that these are links. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt; -&amp;gt; ../dm-0&amp;lt;/span&amp;gt; shows where they point to. If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/dm-0&amp;lt;/span&amp;gt;, we see its mode line begins with a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;, telling us that it is an actual block device. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/dm-0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
brw-rw----. 1 root disk 253, 0 Oct 31 17:27 /dev/dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re curious, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to gather more information about the [[device mapper]] devices. Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dmsetup info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Name:              an--c05n01_vg0-shared&lt;br /&gt;
State:             ACTIVE&lt;br /&gt;
Read Ahead:        256&lt;br /&gt;
Tables present:    LIVE&lt;br /&gt;
Open count:        1&lt;br /&gt;
Event number:      0&lt;br /&gt;
Major, minor:      253, 0&lt;br /&gt;
Number of targets: 1&lt;br /&gt;
UUID: LVM-TzKBFnxBVBe9APiL1lAvQimZiV86KnSFf0w1J06aTz0Bz0SX57pstrg5quSAGGSS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we see the link back to the LV.&lt;br /&gt;
&lt;br /&gt;
== Adding /shared to /etc/fstab ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;re going to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. Breaking this file may leave your system unbootable! As always, practice on unimportant nodes until you are comfortable with this process.}}&lt;br /&gt;
&lt;br /&gt;
In order for the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; initialization script to work, it must be able to find the GFS partition in the file system table, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. The operating system reads this file when it is booting, looking for file systems to mount. As such, this is a critical system file and breaking it can leave a node either unable to boot, or booting into the single user recovery console. &lt;br /&gt;
&lt;br /&gt;
So please proceed carefully.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a new entry to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; requires a particularly crafted line. You can read about this in detail by typing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fstab&amp;lt;/span&amp;gt;. In short though, each line is made up of six space-separated values;&lt;br /&gt;
&lt;br /&gt;
# This is the device (by path or by [[UUID]]). We will be using the partition&#039;s UUID here.&lt;br /&gt;
# This is the mount point for the file system. For this entry, that will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
# This tells the [[OS]] what file system this partition is. For us, we&#039;ll set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;.&lt;br /&gt;
# These are the mount options. Usually this is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;default&amp;lt;/span&amp;gt; which implies a set of option. We&#039;re going to add a couple other options to modify this, which we&#039;ll discuss shortly.&lt;br /&gt;
# This tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt; program whether to back this file system up or not. It&#039;s not usually used except with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext2]]&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext3]]&amp;lt;/span&amp;gt; file systems. Even then, it&#039;s rarely used any more. We will set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; which disables this.&lt;br /&gt;
# This last field sets the order in which boot-time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck&amp;lt;/span&amp;gt; (file system checks) run. This file system is never available at boot, so the only sensible value here is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With all this, we can now build our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
First, we need to query the file system&#039;s UUID.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
current uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We only need the UUID, so let&#039;s filter out the parts we don&#039;t want by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;awk&amp;lt;/span&amp;gt;, which splits a line up on spaces.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need to make sure that the UUID is lower-case. It is already, but we can make sure it&#039;s always lower case by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When specifying a device in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; but UUID instead of using a device path, we need to prefix the entry with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID=&amp;lt;/span&amp;gt;. We can expand on our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to do this.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generally, all but the last two values are separated by tabs. We know that the second field is the mount point for this file system, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; in this case. lets expand the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to add a tab followed by the mount point.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The third entry is the file system type, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; in our case. Let&#039;s add another tab and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; word.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up are the file system options. GFS2, being a clustered file system, requires cluster locking. Cluster locks are, relative to non-clustered internal locks, fairly slow. So we also want to reduce the number of writes that hit the partition. Normally, every time you look at a file or directory, a field called &amp;quot;access time&amp;quot;, or &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;atime&amp;lt;/span&amp;gt;&amp;quot; for short, gets updated. This is actually a write, which would in turn require a DLM lock. Few people care about access times, so we&#039;re going to disable it for files and directories as well. We&#039;re to append a couple of option to help here; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;defaults,noatime,nodiratime&amp;lt;/span&amp;gt;. Let&#039;s add them to our growing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All that is left now are the two last options. We&#039;re going to separate these with a single space. Let&#039;s finish off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; with one last addition to our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
Now, we can add it by simply copy and pasting this line into the file directly. Another bash trick though, as we say in the SSH section, is using bash redirection to append the output of one program onto the end of a file. We&#039;ll do a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; immediately after to see that the line was appended properly.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Be sure to use two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt; brackets! A single &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; bracket says &amp;quot;overwrite&amp;quot;. Two &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; brackets says &amp;quot;append&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:17:33.865210115 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:18:04.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:14:39.035500695 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This looks good. Note that for this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt;, we used the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-u&amp;lt;/span&amp;gt; option. This shows a couple lines on either side of the changes. We see the existing entries above the new one, so we know we didn&#039;t accidentally over-write the existing data.&lt;br /&gt;
&lt;br /&gt;
Now we need to make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; daemon can see the new partition. If it can, we know the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; entry works properly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That works.&lt;br /&gt;
&lt;br /&gt;
The last test is to create our sub-directories we talked about earlier. We&#039;ll do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then we will do a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. If everything is working properly, we should see the new directories immediately.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared/{definitions,provision,archive,files}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 40K&lt;br /&gt;
drwxr-xr-x.  6 root root 3.8K Nov  1 01:23 .&lt;br /&gt;
dr-xr-xr-x. 24 root root 4.0K Oct 31 21:02 ..&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 archive&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 definitions&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 files&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fantastic! &lt;br /&gt;
&lt;br /&gt;
Our clustered storage is complete. The last thing we need to do is to move the clustered storage to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
=== Stopping All Clustered Storage Components ===&lt;br /&gt;
&lt;br /&gt;
In the next step, we&#039;re going to put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; under the cluster&#039;s control. Let&#039;s stop these daemons now so we can see them be started by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; shortly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
= Managing Storage In The Cluster =&lt;br /&gt;
&lt;br /&gt;
A little while back, we spoke about how the cluster is split into two components; cluster communication managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and resource management provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It is the later which we will now begin to configure.&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; component is contained within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; element tags. Within this element are three types of child elements. They are:&lt;br /&gt;
&lt;br /&gt;
* Fail-over Domains - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** These are optional constraints which allow for control which nodes, and under what circumstances, services may run. When not used, a service will be allowed to run on any node in the cluster without constraints or ordering.&lt;br /&gt;
* Resources - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** Within this element, available resources are defined. Simply having a resource here will not put it under cluster control. Rather, it makes it available for use in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
* Services - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** This element contains one or more parallel or series child-elements which are themselves references to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt; elements. When in parallel, the services will start and stop at the same time. When in series, the services start in order and stop in reverse order. We will also see a specialized type of service that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm /&amp;gt;&amp;lt;/span&amp;gt; element name, as you can probably guess, for creating virtual machine services.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll look at each of these components in more detail shortly.&lt;br /&gt;
&lt;br /&gt;
== A Note on Daemon Starting ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Readers of the old tutorial will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; has been removed. We found that, in rare occasions, bleeding-edge client software, like modern versions of &amp;quot;Virtual Machine Manager&amp;quot; of Fedora workstations, connecting to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon could cause it to crash. This didn&#039;t interfere with the servers, but the cluster would try to fail the storage stack, causing the service to enter a failed state. This left servers running, but it is a mess to clean up that is easily avoided by simply removing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; from the storage stack. To address this, we will monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; as its own service. Should it fail, it will restart without impacting the storage daemons.}}&lt;br /&gt;
&lt;br /&gt;
There are four daemons we will be putting under cluster control:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;; Replicated storage.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;; Clustered LVM.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;; Mounts and Unmounts configured GFS2 partition. We will manage this using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;; Enables access to the KVM hypervisor via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; suite of tools.&lt;br /&gt;
&lt;br /&gt;
The reason we do not want to start these daemons with the system is so that we can let the cluster do it. This way, should any fail, the cluster will detect the failure and fail the entire service tree. &lt;br /&gt;
&lt;br /&gt;
For example, lets say that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; failed to start, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; would fail the storage service and give up, rather than continue trying to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and the rest.&lt;br /&gt;
&lt;br /&gt;
If we had left these daemons to start on boot, the failure of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; would not effect the start-up of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, which would then not find its [[PV]]s given that DRBD is down. The system would then try to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; daemon which would also fail as the [[LV]] backing the partition would not be available.&lt;br /&gt;
&lt;br /&gt;
=== Defining the Resources ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=All of these edits will be done on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once we&#039;re done and the config has been validated, we&#039;ll use the cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; to push the update to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and update the running cluster&#039;s config.}}&lt;br /&gt;
&lt;br /&gt;
Lets start by first defining our clustered resources. &lt;br /&gt;
&lt;br /&gt;
As stated before, the addition of these resources does not, in itself, put the defined resources under the cluster&#039;s management. Instead, it defines services, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; scripts. These can then be used by one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements, as we will see shortly. For now, it is enough to know what, until a resource is defined, it can not be used in the cluster.&lt;br /&gt;
&lt;br /&gt;
Given that this is the first component of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; being added to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, we will be creating the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; elements here as well.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the new section, then discuss the parts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First and foremost; Note that we&#039;ve incremented the configuration version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8&amp;lt;/span&amp;gt;. As always, &amp;quot;increment and then edit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the new section;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve added the attribute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;log_level=&amp;quot;5&amp;quot;&amp;lt;/span&amp;gt; to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element to cut down on the log entries in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;. Every 10 seconds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/$foo status&amp;lt;/span&amp;gt; on all script services. At the default log, these checks are logged. So without this, every ten seconds, four status messages would be printed to the system log. That can make is difficult when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing the logs when testing or debugging.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources&amp;gt;...&amp;lt;/resources&amp;gt;&amp;lt;/span&amp;gt; element contains our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources. This is a particular type of resource which specifically handles that starting and stopping of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[init.d]]&amp;lt;/span&amp;gt; style scripts. That is, the script must exit with [[LSB]] compliant codes. They must also properly react to being called with the sole argument of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are many other types of resources which, with the exception of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm .../&amp;gt;&amp;lt;/span&amp;gt;, we will not be looking at in this tutorial. Should you be interested in them, please look in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/usr/share/cluster&amp;lt;/span&amp;gt; for the various scripts (executable files that end with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.sh&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Each of our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ... /&amp;gt;&amp;lt;/span&amp;gt; resources have two attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;file=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The full path to the script to be managed.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; A unique name used to reference this resource later on in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
Other resources are more involved, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources are quite simple.&lt;br /&gt;
&lt;br /&gt;
=== Creating Failover Domains ===&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are, at their most basic, a collection of one or more nodes in the cluster with a particular set of rules associated with them. Services can then be configured to operate within the context of a given fail-over domain. There are a few key options to be aware of.&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are optional and can be left out of the cluster, generally speaking. However, in our cluster, we will need them for our storage services, as we will later see, so please do not skip this step.&lt;br /&gt;
&lt;br /&gt;
* A fail-over domain can be unordered or prioritized.&lt;br /&gt;
** When unordered, a service will start on any node in the domain. Should that node later fail, it will restart to another random node in the domain.&lt;br /&gt;
** When prioritized, a service will start on the available node with the highest priority in the domain. Should that node later fail, the service will restart on the available node with the next highest priority.&lt;br /&gt;
* A fail-over domain can be restricted or unrestricted.&lt;br /&gt;
** When restricted, a service is &#039;&#039;&#039;only&#039;&#039;&#039; allowed to start on, or restart on. a nodes in the domain. When no nodes are available, the service will be stopped.&lt;br /&gt;
** When unrestricted, a service will try to start on, or restart on, a node in the domain. However, when no domain members are available, the cluster will pick another available node at random to start the service on.&lt;br /&gt;
* A fail-over domain can have a fail-back policy.&lt;br /&gt;
** When a domain allows for fail-back and the domain is ordered, and a node with a higher &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt; (re)joins the cluster, services within the domain will migrate to that higher-priority node. This allows for automated restoration of services on a failed node when it rejoins the cluster.&lt;br /&gt;
** When a domain does not allow for fail-back, but is unrestricted, fail-back of services that fell out of the domain will happen anyway. That is to say, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; is ignored if a service was running on a node outside of the fail-over domain and a node within the domain joins the cluster. However, once the service is on a node within the domain, the service will &#039;&#039;&#039;not&#039;&#039;&#039; relocate to a higher-priority node should one join the cluster later.&lt;br /&gt;
** When a domain does not allow for fail-back and is restricted, then fail-back of services will never occur.&lt;br /&gt;
&lt;br /&gt;
What we need to do at this stage is to create something of a hack. Let me explain;&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, we need to start a set of local daemons on all nodes. These aren&#039;t really clustered resources though as they can only ever run on their host node. They will never be relocated or restarted elsewhere in the cluster as as such, are not highly available. So to work around this desire to &amp;quot;cluster the unclusterable&amp;quot;, we&#039;re going to create a fail-over domain for each node in the cluster. Each of these domains will have only one of the cluster nodes as members of the domain and the domain will be restricted, unordered and have no fail-back. With this configuration, any service group using it will only ever run on the one node in the domain.&lt;br /&gt;
&lt;br /&gt;
In the next step, we will create a service group, then replicate it once for each node in the cluster. The only difference will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failoverdomain&amp;lt;/span&amp;gt; each is set to use. With our configuration of two nodes then, we will have two fail-over domains, one for each node, and we will define the clustered storage service twice, each one using one of the two fail-over domains.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, then we will focus closer on the new section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, the version was incremented, this time to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;. We&#039;ve also added the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains&amp;gt;...&amp;lt;/failoverdomains&amp;gt;&amp;lt;/span&amp;gt; element. Let&#039;s take a closer look at this new element.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first thing to note is that there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;...&amp;lt;/failoverdomain&amp;gt;&amp;lt;/span&amp;gt; child elements:&lt;br /&gt;
&lt;br /&gt;
* The first has the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n01&amp;lt;/span&amp;gt; and contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
* The second is effectively identical, save that the domain&#039;s name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n02&amp;lt;/span&amp;gt; and it contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt; element has four attributes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute sets the unique name of the domain which we will later use to bind a service to the domain.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster to never &amp;quot;fail back&amp;quot; any services in this domain. This seems redundant, given there is only one node, but when combined with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;, prevents any migration of services.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; this is also somewhat redundant in that there is only one node defined in the domain, but I don&#039;t like to leave attributes undefined so I have it here.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute is key in that it tells the cluster to &#039;&#039;&#039;not&#039;&#039;&#039; try to restart services within this domain on any other nodes outside of the one defined in the fail-over domain.&lt;br /&gt;
&lt;br /&gt;
Each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;&amp;lt;/span&amp;gt; elements has a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode .../&amp;gt;&amp;lt;/span&amp;gt; child element. This is a very simple element which has, at this time, only one attribute:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The name of the node to include in the fail-over domain. This name must match the corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; node name.&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re ready to finally create our clustered storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; monitoring services.&lt;br /&gt;
&lt;br /&gt;
=== Creating Clustered Storage and libvirtd Service ===&lt;br /&gt;
&lt;br /&gt;
With the resources defined and the fail-over domains created, we can set about creating our services.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, services can have one or more resources within them. When two or more resources exist, then can be put into a dependency tree, they can used in parallel or a combination of parallel and dependent resources.&lt;br /&gt;
&lt;br /&gt;
When you create a service dependency tree, you put each dependent resource as a child element of its parent. The resources are then started in order, starting at the top of the tree and working its way down to the deepest child resource. If at any time one of the resources should fail, the entire service will be declared failed and no attempt will be made to try and start any further child resources. Conversely, stopping the service will cause the deepest child resource to be stopped first. Then the second deepest and on upwards towards the top resource. This is exactly the behaviour we want, as we will see shortly.&lt;br /&gt;
&lt;br /&gt;
When resources are defined in parallel, all defined resources will be started at the same time. Should any one of the resources fail to start, the entire resource will be declared failed. Stopping the service will likewise cause a simultaneous call to stop all resources.&lt;br /&gt;
&lt;br /&gt;
As before, let&#039;s take a look at the entire updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, then we&#039;ll focus in on the new service section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With the version now at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;, we have added four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements. Two of which contain the storage resources in a service tree configuration. The other two have a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; resource for managing the hypervisors. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a closer look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements have five attributes each:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute is a unique name that will be used to identify the service, as we will see later.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that, when it starts, it should automatically start this service.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster which fail-over domain this service must run within. The two otherwise identical services each point to a different fail-over domain, as we discussed in the previous section.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that a node running this service &#039;&#039;&#039;is&#039;&#039;&#039; allowed to to have other services running as well.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery=&amp;quot;restart&amp;quot;&amp;lt;/span&amp;gt; attribute sets the service recovery policy. As the name implies, the cluster will try to restart this service should it fail. Should the service fail multiple times in a row, it will be disabled. The exact number of failures allowed before disabling is configurable using the optional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt; attributes, which are not covered here.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=It is a fairly common mistake to interpret &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt; to mean that a service is only allowed to run on one node at a time. This is not the case, please do not use this attribute incorrectly.}}&lt;br /&gt;
&lt;br /&gt;
Within each of the two first two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; attributes are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script...&amp;gt;&amp;lt;/span&amp;gt; type resources and a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; type resource. These are configured as a service tree in the order:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The other two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements are there to simply monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon on each node. Should it fail for any reason, the cluster will restart the service right away.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ...&amp;gt;&amp;lt;/span&amp;gt; elements has just one attribute; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ref=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; which points to a corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;script&amp;lt;/span&amp;gt; resource. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; element has five attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; is the name used to reference this resource in the service tree.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; is the logical volume we formatted as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;force_unmount&amp;lt;/span&amp;gt;, when set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, tells the system to try and kill any processes that might be holding the mount open. This is useful if, for example, you left a terminal window open where you had browsed into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Without it, the service would fail and restart.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstype&amp;lt;/span&amp;gt; is the file system type. If you do not specify this, the system will try to determine it automatically. To be safe, we will set it.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mountpoint&amp;lt;/span&amp;gt; is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; should be mounted.&lt;br /&gt;
&lt;br /&gt;
The logic for the storage resource tree is:&lt;br /&gt;
&lt;br /&gt;
* DRBD needs to start so that the bare clustered storage devices become available.&lt;br /&gt;
* Clustered LVM must next start so that the logical volumes used by GFS2 and our VMs become available.&lt;br /&gt;
* Finally, the GFS2 partition contains the [[XML]] definition files needed to start our servers, host shared files and so on.&lt;br /&gt;
&lt;br /&gt;
From the other direction, we need the stop order to be organized in the reverse order:&lt;br /&gt;
&lt;br /&gt;
* We need the GFS2 partition to unmount first.&lt;br /&gt;
* With the GFS2 partition stopped, we can safely say that all LVs are no longer in use and thus &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; can stop.&lt;br /&gt;
* With Clustered LVM now stopped, nothing should be using our DRBD resources any more, so we can safely stop them, too.&lt;br /&gt;
&lt;br /&gt;
All in all, it&#039;s a surprisingly simple and effective configuration.&lt;br /&gt;
&lt;br /&gt;
== Validating and Pushing the Changes ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve made a big change, so it&#039;s all the more important that we validate the config before proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, no errors and we checked that the current cluster configuration version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We need to now tell the cluster to use the new configuration file. Unlike last time, we won&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;. Now that the cluster is up and running, we can use it to push out the updated configuration file using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;. This is the first time we&#039;ve used the cluster to push out an updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, so we will have to enter the password we set earlier for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As confirmed on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the new configuration loaded properly! Note as well that we had to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password for both nodes. Once done, you will not have to do that again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Later, if you push an update from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, you will need to enter the passwords once again, but not after that. You authenticate from a node only one time.&lt;br /&gt;
&lt;br /&gt;
If you were watching syslog, you will have seen an entries like the ones below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:48 an-c05n01 ricci[26853]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 ricci[26856]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/533317550&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 corosync[6448]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26653]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26656]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/15604613&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 corosync[6404]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the Cluster&#039;s Status ==&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at a new tool; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, &#039;&#039;&#039;clu&#039;&#039;&#039;ster &#039;&#039;&#039;stat&#039;&#039;&#039;us. We&#039;ll be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; extensively from here on out to monitor the status of the cluster members and managed services. It does not manage the cluster in any way, it is simply a status tool.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re only running the foundation of the cluster, so we can only see which nodes are members. &lt;br /&gt;
&lt;br /&gt;
We&#039;ll now start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It will read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; configuration file and parse the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; child elements. It will find our four new services and, according to their configuration, start them. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;ve configured the storage services to start automatically. When we start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now, it will start the storage resources, including DRBD. In turn, DRBD will stop and wait for up to five minutes and wait for its peer. This will cause the first node you start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on to appear to hang until the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; has started DRBD as well. If the other node doesn&#039;t start DRBD, it will be fenced. So be sure to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on both nodes at the same time.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, and see what&#039;s new.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What we see are two section; The top section shows the cluster members and the lower part covers the managed resources. &lt;br /&gt;
&lt;br /&gt;
We can see that both members, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Online&amp;lt;/span&amp;gt;, meaning that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running and that they&#039;ve joined the cluster. It also shows us that both members are running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. You will always see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Local&amp;lt;/span&amp;gt; beside the name of the node you ran the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; command from.&lt;br /&gt;
&lt;br /&gt;
Under the services, you can see the four new services we created with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix. We can see that each service is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;started&amp;lt;/span&amp;gt;, meaning that all four of the resources are up and running properly and which node each service is running on.&lt;br /&gt;
&lt;br /&gt;
If we were watching the system log, we will see that, very shortly after starting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; starts and mounts. Somewhere in there, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; will start.&lt;br /&gt;
&lt;br /&gt;
Lets take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:07 an-c05n01 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 kernel: dlm: connecting to 2&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: I am node #1&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Starting stopped service service:storage_n01&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: minor_table @ 0xffff880638752a80&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Found 4 transactions (126 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: bitmap READ of 4040 pages took 9 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: attached to UUIDs D62CF91BB06F1B41:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Found 1 transactions (1 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: attached to UUIDs FF678525C82359F3:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting receiver thread (from drbd0_worker [12026])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting receiver thread (from drbd1_worker [12041])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Starting stopped service service:libvirtd_n01&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Service service:libvirtd_n01 started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Starting asender thread (from drbd0_receiver [12058])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: self D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Starting asender thread (from drbd1_receiver [12063])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: self FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated sync UUID FF678525C82359F2:CFC277C83C414547:CFC177C83C414547:0EC499BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated sync UUID D62CF91BB06F1B41:AB8966B4CD6A5E71:AB8866B4CD6A5E71:F1BA98C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: bitmap WRITE of 2298 pages took 12 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1, already locked for use&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 rgmanager[10738]: Service service:storage_n01 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: got connection from 1&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: I am node #2&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:storage_n02&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: minor_table @ 0xffff880638440280&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Found 4 transactions (4 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: bitmap READ of 4040 pages took 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: attached to UUIDs AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: No usable activity log found.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: attached to UUIDs CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting receiver thread (from drbd0_worker [11833])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting receiver thread (from drbd1_worker [11848])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:libvirtd_n02&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 rgmanager[10547]: Service service:libvirtd_n02 started&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Starting asender thread (from drbd0_receiver [11865])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: self AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Starting asender thread (from drbd1_receiver [11869])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: self CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated sync uuid CFC277C83C414547:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated sync uuid AB8966B4CD6A5E71:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: bitmap WRITE of 2298 pages took 14 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0, already locked for use&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Done&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n02 rgmanager[10547]: Service service:storage_n02 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sure enough, we can confirm that everything started properly.&lt;br /&gt;
&lt;br /&gt;
DRBD;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looks good. Lets look at clustered LVM;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  29009) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  28801) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good, too. Last service in storage is GFS2;&lt;br /&gt;
&lt;br /&gt;
GFS2;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, our stand-alone service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  12131) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  11939) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nice, eh?&lt;br /&gt;
&lt;br /&gt;
== Managing Cluster Resources ==&lt;br /&gt;
&lt;br /&gt;
Managing services in the cluster is done with a fairly simple tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to look at two commands at this time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Command&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e &amp;lt;service&amp;gt; -m &amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Enable the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt; on the specified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;. When a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; is not specified, the local node where the command was run is assumed.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -d &amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Disable (stop) the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stopping Clustered Storage - A Preview to Cold-Stopping the Cluster ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at how we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to stop our storage services.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Services with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix can be called with their name alone. As we will see later, other services will need to have the service type prefix included.}}&lt;br /&gt;
&lt;br /&gt;
Before doing any work on an &#039;&#039;Anvil!&#039;&#039;, start by confirming the current state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is running, as expected. Let&#039;s stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d storage_n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling service:storage_n01...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we now run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; now, we should see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:storage_n01&amp;lt;/span&amp;gt; is now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt; state? If you check the status of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; now, you will see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is indeed down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd not loaded&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs            ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
1:r1   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; are stopped as well.&lt;br /&gt;
&lt;br /&gt;
Pretty simple!&lt;br /&gt;
&lt;br /&gt;
== Starting Clustered Storage ==&lt;br /&gt;
&lt;br /&gt;
As we saw earlier, the storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; services start automatically. It&#039;s still important to know how to manually start these services though. So that is what we&#039;ll cover here.&lt;br /&gt;
&lt;br /&gt;
The main difference from stopping the service is that we swap the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-d&amp;lt;/span&amp;gt; switch for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;, &#039;&#039;&#039;e&#039;&#039;&#039;nable, switch. We will also add the target cluster member name using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt; switch. We didn&#039;t need to use the member switch while stopping because the cluster could tell where the service was running and, thus, which member to contact to stop the service.&lt;br /&gt;
&lt;br /&gt;
Should you omit the member name, the cluster will try to use the local node as the target member. Note though that a target service will start on the node the command was issued on, regardless of the fail-over domain&#039;s ordered policy. That is to say, a service will not start on another node in the cluster when the member option is not specified, despite the fail-over configuration set to prefer another node.&lt;br /&gt;
&lt;br /&gt;
As always, start by verifying the current state of the services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; is disabled. Let&#039;s start it up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e storage_n01 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable service:storage_n01...Success&lt;br /&gt;
service:storage_n01 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at DRBD now, it will show as being up and running on both nodes.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If the DRBD status shows the resource still stopped on the node, give it a minute and check again. It can sometimes take a few moments before the resources in the service starts.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back up and running normally.&lt;br /&gt;
&lt;br /&gt;
= Testing Network Redundancy =&lt;br /&gt;
&lt;br /&gt;
Now that the &#039;&#039;Anvil!&#039;&#039; is up and running, it&#039;s time to test the network&#039;s fault tolerance capabilities.&lt;br /&gt;
&lt;br /&gt;
We wanted to wait this long because we need to see how our cluster and storage software handles the failure and recovery of various networking components. Had we tested before now, we would have had to rely on simple tests, like ping responses, which do not give us a complete picture of the network&#039;s real resiliency.&lt;br /&gt;
&lt;br /&gt;
We will perform the following tests:&lt;br /&gt;
&lt;br /&gt;
* Pull each network cable and confirm that the bond it belongs to failed over to the other interface.&lt;br /&gt;
* Kill the primary switch entirely and then recover it.&lt;br /&gt;
* Kill the backup switch entirely and then recover it.&lt;br /&gt;
&lt;br /&gt;
During these tests, we will watch the following:&lt;br /&gt;
&lt;br /&gt;
* Watch a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; file for each bond to see how its state changes.&lt;br /&gt;
* Run a ping flood from each node to the other node, using each of out three networks.&lt;br /&gt;
* Watch the cluster membership.&lt;br /&gt;
* Watch the status of the DRBD resources.&lt;br /&gt;
* Tail the system log files.&lt;br /&gt;
&lt;br /&gt;
The cluster will be formed and the storage services will be running. We do not need to have the servers running, so we will turn them off. If something goes wrong here, it will certainly end up with a node being fenced. No need to risk hurting the servers. Whether they are running or nor will not will have no effect of the tests.&lt;br /&gt;
&lt;br /&gt;
== What we will be Watching ==&lt;br /&gt;
&lt;br /&gt;
Before setup for the tests, lets take a minute to look at the various things we&#039;ll be monitoring for faults.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/proc/net/bonding/bondX&#039; ===&lt;br /&gt;
&lt;br /&gt;
When a bond is created, a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file is created whose name matches the name of the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; device. We created three bonds; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, so we&#039;ll find &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond2&amp;lt;/span&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
These look like normal files, and we can read them like files, but they&#039;re actually representations of kernel values. Specifically, the health and state of the bond device, its slaves and current performance settings. Lets take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you recall from the network setup step, we made &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; the primary interface and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; the backup interface for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;. Indeed, we can see that these two interfaces are indeed slaved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The data here is in three sections:&lt;br /&gt;
&lt;br /&gt;
* The first section shows the state of the overall bond. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that we&#039;re using the &amp;quot;Active/Backup&amp;quot; bonding mode, that the currently active interface is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will always be used when both interfaces are healthy, though it will wait two minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120,000 ms&amp;lt;/span&amp;gt;) after &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; returns before it will be used. It also tells us that it will manually check for a link on the slaved interfaces every 100 ms.&lt;br /&gt;
&lt;br /&gt;
The next two sections cover the two slaved interfaces:&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the link (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;) is up and running at 1000 Mbps in full duplex mode. It shows us that it has not seen any failures in this interface since the bond was last started. It also shows us the interfaces real [[MAC]] address. This is important because, from the point of view of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ip addr&amp;lt;/span&amp;gt;, both slaved interfaces will &#039;&#039;appear&#039;&#039; to have the same MAC address (which depends on the currently active interface). This is a trick done in active-backup (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) bonding to speed up fail-over. The queue ID is used in other bonding modes for routing traffic down certain slaves when possible, we can ignore it here.&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; information is more or less the same as the first. This is expected because, usually, the hardware is the same. The only expected differences are the device name and MAC address, of course.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/etc/init.d/drbd status&#039; ===&lt;br /&gt;
&lt;br /&gt;
Earlier, we looked at another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; in order to watch the state of our DRBD resources. There is another way we can monitor DRBD using its initialization script. We&#039;ll use that method here.&lt;br /&gt;
&lt;br /&gt;
Lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will notice that the output is almost exactly the same as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt;&#039;s output, but formatted a little nicer. &lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;cman_tool nodes&#039; ===&lt;br /&gt;
&lt;br /&gt;
This is a more specific &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; call than we&#039;ve used in the past. Before, we called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; to get a broad overview of the cluster&#039;s state. It can be used in many ways to get more information about specific about the cluster. &lt;br /&gt;
&lt;br /&gt;
If you recall, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; would show us the simple sum of nodes in the cluster; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt;. If we want to know more about the nodes, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;. Lets see what that looks like on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    332   2013-11-27 14:11:01  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    340   2013-11-27 14:11:02  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Slightly more informative.&lt;br /&gt;
&lt;br /&gt;
== Network Testing Terminal Layout ==&lt;br /&gt;
&lt;br /&gt;
If you have a decent resolution monitor (or multiple monitors), you should be able to open 18 terminals at once. This is how many are needed to run ping floods, watch the bond status files, watch the system logs, watch DRBD and watch cluster membership all at the same time. This configuration makes it very easy to keep a near real-time, complete view of all network components.&lt;br /&gt;
&lt;br /&gt;
Personally, I have a 1920 x 1080 screen, which is pretty typical these days. I use a 9-point monospace font in my gnome terminals and I disable the menu bar. With that, the layout below fits nicely;&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node_el6-tutorial_network-test_terminal-layout_02.png|thumb|center|1000px|Terminal layout used for HA network testing; Calls running.]]&lt;br /&gt;
&lt;br /&gt;
The details of that are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Terminal layout for monitoring during network testing.&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The actual commands we will use are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this, we can keep a real-time overview of the status of all network, drbd and cluster components for both nodes. It may take a little bit to setup, but it will make the following network failure and recovery tests much easier to keep track of. Most importantly, it will allow you to quickly see if any of the tests fail.&lt;br /&gt;
&lt;br /&gt;
== How to Know if the Tests Passed ==&lt;br /&gt;
&lt;br /&gt;
Well, the most obvious answer to this question is if the cluster stack blows up or not.&lt;br /&gt;
&lt;br /&gt;
We can be a little more subtle than that though.&lt;br /&gt;
&lt;br /&gt;
We will be watching for:&lt;br /&gt;
&lt;br /&gt;
* Bonds not failing over to or back from their backup links when the primary link fails.&lt;br /&gt;
* More than 20 or 30 lost packets across each/all effected bonds fail over or back. Keep in mind that this may sound like a lot of dropped packets, but we&#039;re flooding the network with as many pings as the hardware can push out, so 20 to 30 lost packets is actually very low packet loss.&lt;br /&gt;
* Corosync declaring the peer node lost and cluster membership changing / node fencing.&lt;br /&gt;
* DRBD losing connection to the peer / node fencing.&lt;br /&gt;
&lt;br /&gt;
== Breaking things! ==&lt;br /&gt;
&lt;br /&gt;
To document the testing of all failure conditions would add substantially to this tutorial and not add much value.&lt;br /&gt;
&lt;br /&gt;
So instead we will look at sample failures to see what to expect. You can then use them as references for your own testing.&lt;br /&gt;
&lt;br /&gt;
=== Failing a Bond&#039;s Primary Interface ===&lt;br /&gt;
&lt;br /&gt;
For this test, we will pull &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&#039;s network cable out of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This will trigger a fail-over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; which we will see in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; file and we will see messages about the failure in the system logs. Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s ping flood on the [[BCN]] will show a number of dropped packets.&lt;br /&gt;
&lt;br /&gt;
Assuming all goes well, corosync should not report any errors or react in any way to this test.&lt;br /&gt;
&lt;br /&gt;
So pull the cable and see if you&#039;re result match ours.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; became the active link and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; shows as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lets look at the ping flood;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly in-line with what we expected! If you look at the cluster membership and system logs, you will see that nothing was noticed outside of the bonding driver!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s plug the cable back in.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll notice that the bond driver will see the link return, change the state of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt; and nothing more will happen at first. After two minutes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; will switch back to using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and there will be another short burst of dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: going back&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for two minutes.&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at the dropped packets when the switch-back happened;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; didn&#039;t lose a packet and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; only lost a few? The switch was controlled, so no time was lost detecting the link failure.&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t be tempted to test only a few links!}}&lt;br /&gt;
&lt;br /&gt;
Repeat this test for all network connections on both nodes. Ensure that each links fails and recovers in the same way. We have a complex network and tests like this help find cabling and configuration issues. These tests have value beyond simply verifying fail-over and recovery.&lt;br /&gt;
&lt;br /&gt;
=== Failing the Network Switches ===&lt;br /&gt;
&lt;br /&gt;
Failing and then recovering the primary switch tests a few things:&lt;br /&gt;
&lt;br /&gt;
* Can all the bonds fail over to their backup links at the same time?&lt;br /&gt;
* Does the switch handle the loss of the primary switch in the stack properly?&lt;br /&gt;
* Does the switch interrupt traffic when it recovers?&lt;br /&gt;
&lt;br /&gt;
Even if you don&#039;t have a stacked switch, this test is still very important. We set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; to two minutes, but there is a chance that is still not long enough for your switch. This test will expose issues like this.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you don&#039;t have port trunking, be sure to switch your workstation&#039;s links or network uplink from the primary to backup switch before proceeding. This will ensure you can monitor the nodes during the test without interruption.}}&lt;br /&gt;
&lt;br /&gt;
Before we start, lets take a look at the current view of thing;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we will pull the power cable out of the primary switch and wait for things to settle.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
..................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! All of the bonds failed over to their backup interfaces and the cluster stays stable. Both cluster membership and DRBD continued without interruption!&lt;br /&gt;
&lt;br /&gt;
Now to test recover of the primary switch. If everything was configured properly, the switch will recover, the primary links will wait two minutes before recovering and the actual cut-over will complete with few dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:53 an-c05n02 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Some switches will show a link and then drop the connection a few times as they boot. If your switch is like this, you will see this reflected in the system logs. This should be fine because of the two minute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; value.}}&lt;br /&gt;
&lt;br /&gt;
Now repeat this test by failing and recovering the backup switch. Do not assume that, because the first switch cycled successfully, the second switch will as well. A bad configuration can easily allow the primary switch to pass this test while the secondary switch would cause a failure.&lt;br /&gt;
&lt;br /&gt;
With the second switch test complete, we can be confident that the networking infrastructure is totally fault tolerant.&lt;br /&gt;
&lt;br /&gt;
= Provisioning Virtual Machines =&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re getting to the purpose of our cluster; Provision virtual machines!&lt;br /&gt;
&lt;br /&gt;
We have two steps left:&lt;br /&gt;
&lt;br /&gt;
* Provision our VMs.&lt;br /&gt;
* Add the VMs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Provisioning&amp;quot; a virtual machine simple means to create it; Assign a collection of emulated hardware, connected to physical devices, to a given virtual machine and begin the process of installing the operating system on it. This tutorial is more about clustering than it is about virtual machine administration, so some experience with managing virtual machines has to be assumed. If you need to brush up, here are some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM project&#039;s How-Tos]&lt;br /&gt;
* [http://kvm.et.redhat.com/page/FAQ KVM project&#039;s FAQ]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Hypervisor_Deployment_Guide/index.html Red Hat&#039;s Hypervisor Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html Red Hat&#039;s Virtualization Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html Red Hat&#039;s Virtualization Administration]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html Red Hat&#039;s Virtualization Host Configuration and Guest Installation Guide]&lt;br /&gt;
&lt;br /&gt;
When you feel comfortable, proceed.&lt;br /&gt;
&lt;br /&gt;
== Before We Begin - Building a Dashboard ==&lt;br /&gt;
&lt;br /&gt;
[[Image:An-cdb-splash.png|thumb|right|400px|[[AN!CDB]] dashboard with server &amp;quot;monitor&amp;quot; displayed.]]&lt;br /&gt;
&lt;br /&gt;
One of the biggest advances since the initial tutorial was created was the creation of the [[AN!CDB - Cluster Dashboard]].&lt;br /&gt;
&lt;br /&gt;
It provides a very easy to use web-based user interface for building, modifying and removing servers on the &#039;&#039;Anvil!&#039;&#039; platform. &lt;br /&gt;
&lt;br /&gt;
It also provides a &amp;quot;[https://en.wikipedia.org/wiki/KVM_switch KVM switch]&amp;quot; style access to the servers you create. This gives you direct access to your servers, just as if you have a physical keyboard, mouse and monitor plugged into a physical server. You can watch the server boot from the virtual, boot into recovery consoles or off of repair &amp;quot;DVDs&amp;quot; and so forth.&lt;br /&gt;
&lt;br /&gt;
The link above covers the dashboard and its use, and includes a link to an installer showing how to setup a dashboard for yourself. Now is a good time to take a break from this tutorial and setup that dashboard.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to build a dashboard, that is fine. It is not required in this tutorial.&lt;br /&gt;
&lt;br /&gt;
If you decide not to though, you will now need to setup &amp;quot;Virtual Machine Manager&amp;quot; on your (Linux) computer in order to get access to the servers we are about to build. You will need this in order to walk through the installation process for your new servers. Of course, once the install is complete, you can switch to another, traditional form of remote access like [[RDP]] on windows servers or [[ssh]] on *nix servers.&lt;br /&gt;
&lt;br /&gt;
If you want to use &amp;quot;Virtual Machine Manager&amp;quot;, look for a package from your distribution package manager with a name like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;. Once it is installed, add the connections to your &#039;&#039;Anvil!&#039;&#039; nodes. Once that&#039;s done, you&#039;re ready to proceed to the next section!&lt;br /&gt;
&lt;br /&gt;
== A Note on the Following Server Installations ==&lt;br /&gt;
&lt;br /&gt;
We wanted to show as many different server installations as possible. Obviously, it&#039;s unlikely that you will want or need all of the operating we&#039;re about to install. Please feel free to skip over the installation of servers that are not interesting to you.&lt;br /&gt;
&lt;br /&gt;
== Provision Planning ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to spend a lot of time provisioning &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. If you plan to skip it, please be sure to refer back to it if you run into questions on a later install.}}&lt;br /&gt;
&lt;br /&gt;
If you recall, when we were planning out our partitions, we&#039;ve already chosen which servers will draw from which storage pools and how big their &amp;quot;hard drives&amp;quot; will be. The last thing to consider is RAM allocation. The servers we&#039;re using to write this tutorial are a little modest in the RAM department with only 24 [[GiB]] of RAM. We need to subtract at least 2 GiB for the host nodes, leaving us with a total of 22 GiB. &lt;br /&gt;
&lt;br /&gt;
That needs to be divided up amongst our eight servers. Now, nothing says you have to use it all, of course. It&#039;s perfectly fine to leave some RAM unallocated for future use. This is really up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s put together a table with the RAM we plan to allocate and summarizing the logical volume we&#039;re going to create for each server. The [[LV]]s will be named after the server they&#039;ll be assigned to with the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_0&amp;lt;/span&amp;gt;. Later, if we add a second &amp;quot;hard drive&amp;quot; to a server, it will have the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_1&amp;lt;/span&amp;gt; and so on.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Server&lt;br /&gt;
!RAM (GiB)&lt;br /&gt;
!Storage Pool (VG)&lt;br /&gt;
!LV name&lt;br /&gt;
!LV size&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you plan to set static IP addresses for your servers, now would be a good time to select them, too. It&#039;s not needed, of course, but it certainly can make things easier to have all the details in one place.&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Not to spoil the surprise, but if you plan to not follow this tutorial exactly, please be sure to read [[#Calculating_Free_Space.3B_Converting_GiB_to_MB|the notes in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris100&amp;lt;/span&amp;gt; section]].}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm01-win2008 ==&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_08.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_Svr_2008_R2_64Bit_SP1.ISO root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
  3166720000 100%   65.53MB/s    0:00:46 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3167106674 bytes  received 31 bytes  59198256.17 bytes/sec&lt;br /&gt;
total size is 3166720000  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; to grab the latest version from [https://alt.fedoraproject.org/pub/alt/virtio-win/ their website]. At the time of this writing, the &amp;quot;[https://alt.fedoraproject.org/pub/alt/virtio-win/stable/ stable]&amp;quot; version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0.1-74&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Being conservative when it comes to servers, my preference is to use the &amp;quot;stable&amp;quot; version.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-04-28 18:01:10--  https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
Resolving alt.fedoraproject.org (alt.fedoraproject.org)... 209.132.181.27, 209.132.181.23, 209.132.181.24, ...&lt;br /&gt;
Connecting to alt.fedoraproject.org (alt.fedoraproject.org)|209.132.181.27|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 61272064 (58M) [application/octet-stream]&lt;br /&gt;
Saving to: ‘virtio-win-0.1-74.iso’&lt;br /&gt;
&lt;br /&gt;
100%[======================================&amp;gt;] 61,272,064  5.23MB/s   in 15s    &lt;br /&gt;
&lt;br /&gt;
2014-04-28 18:01:26 (3.86 MB/s) - ‘virtio-win-0.1-74.iso’ saved [61272064/61272064]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 3.1G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov  2 10:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--  1 root root  59M Nov 20 15:08 virtio-win-0.1-74.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm01-win2008_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm01-win2008_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm01-win2008_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm01-win2008_0&lt;br /&gt;
  LV Name                vm01-win2008_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                bT0zon-H2LN-0jmi-refA-J0QX-zHjT-nEY7YY&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-02 11:04:44 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm01-win2008.sh&lt;br /&gt;
chmod 755 /shared/provision/vm01-win2008.sh &lt;br /&gt;
vim /shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm01-win2008 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s break it down;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--connect qemu:///system&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; to use the [[QEMU]] hardware emulator (as opposed to [[Xen]], for example) and to install the server on to local node.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the name of the server. It is the name we will use in the cluster configuration and whenever we use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--arch x86_64&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the emulated CPU&#039;s architecture to 64-[[bit]]. This can be used even when you plan to install a 32-bit [[OS]], but not the other way around, of course.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--vcpus 2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the number of CPU cores to allocate to this server. Here, we&#039;re allocating two CPUs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|We need to make the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers available during the install process. This command is similar to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom&amp;lt;/span&amp;gt; above, but crafted as if it was a disk drive with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device=cdrom&amp;lt;/span&amp;gt; switch. This helps make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cdrom&amp;lt;/span&amp;gt; above is used as the boot drive. Also note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; option. This is used because, normally, if the ISO was &amp;quot;inserted&amp;quot; into another server&#039;s cd-rom, it would refuse to work here. The nature of ISOs ensures they&#039;re read-only, so we can safely force two or more servers to use the same ISO at the same time.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tweaks the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;&#039;s initial method of running and tunes the hypervisor to try and get the best performance for the server. There are many possible values here for many, many different operating systems. If you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install --os-variant list&amp;lt;/span&amp;gt; on your node, you will get a full list of available operating systems. If you can&#039;t find your exact operating system, select the one that is the closest match.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor that we want to create a network card using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; &amp;quot;hardware&amp;quot; and that we want it plugged into the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge. We only need one network card, but if you wanted two or more, simply repeat this command. If you create two or more bridges, you can have different network devices connect to different bridges.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finally, this tells the hypervisor to use the [http://www.spice-space.org/ spice] emulated video card. It is a bit simplistic to call it simply a &amp;quot;graphics card&amp;quot;, but that&#039;s close enough for now. Given that this is the last line, we close off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command with a simple redirection to a log file. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm01-win2008&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
One the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_01.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_02.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN7\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_05.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_06.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_07.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm01-win2008_a_Highly_Available_Service|Making vm01-win2008 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm02-win2012 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_2012_R2_64-bit_Preview.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
  4128862208 100%   66.03MB/s    0:00:59 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 4129366322 bytes  received 31 bytes  65029391.39 bytes/sec&lt;br /&gt;
total size is 4128862208  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 6.9G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 11 11:28 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm02-win2012_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm02-win2012_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm02-win2012_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm02-win2012_0&lt;br /&gt;
  LV Name                vm02-win2012_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                Lnyg1f-kNNV-qjfn-P7X3-LxLw-1Uyh-dfNfL0&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n02.alteeve.ca, 2013-11-11 11:30:55 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm02-win2012.sh&lt;br /&gt;
chmod 755 /shared/provision/vm02-win2012.sh &lt;br /&gt;
vim /shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm02-win2012 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is also the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script. At the time of writing, there wasn&#039;t an entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2012&amp;lt;/span&amp;gt;, so we&#039;re using the closest match which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2k8&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm02-win2012&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm02-win2012_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm03-win7 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous two servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_7_Pro_SP1_64bit_OEM_English.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
  3321233408 100%   83.97MB/s    0:00:37 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3321638948 bytes  received 31 bytes  80039493.47 bytes/sec&lt;br /&gt;
total size is 3321233408  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 10G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 11:32 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm03-win7_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm03-win7_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm03-win7_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm03-win7_0&lt;br /&gt;
  LV Name                vm03-win7_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                vgdtEm-aOsU-hatQ-2PxO-BN1e-sGLM-J7NVcn&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 12:08:52 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm03-win7.sh&lt;br /&gt;
chmod 755 /shared/provision/vm03-win7.sh &lt;br /&gt;
vim /shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm03-win7 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm03-win7.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm03-win7&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm03-win7_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm04-win8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our last Microsoft operating system!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation media and our driver disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous three servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Win8.1_Enterprise_64-bit_eval.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
  3797866496 100%   62.02MB/s    0:00:58 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3798330205 bytes  received 31 bytes  60773283.78 bytes/sec&lt;br /&gt;
total size is 3797866496  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 14G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 18:12 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm04-win8_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm04-win8_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm04-win8_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm04-win8_0&lt;br /&gt;
  LV Name                vm04-win8_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                WZIGmp-xkyZ-Q6Qs-ovMP-qr1k-9xC2-PmbcUD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 18:13:53 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm04-win8.sh&lt;br /&gt;
chmod 755 /shared/provision/vm04-win8.sh &lt;br /&gt;
vim /shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm04-win8 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm04-win8.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm04-win8&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm04-win8_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm05-freebsd9 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our first non-Microsft OS!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[http://www.freebsd.org/ FreeBSD] is free software and can be downloaded directly from their website.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-18 15:48:09--  ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
           =&amp;gt; `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039;&lt;br /&gt;
Resolving ftp.freebsd.org... 204.152.184.73, 2001:4f8:0:2::e&lt;br /&gt;
Connecting to ftp.freebsd.org|204.152.184.73|:21... connected.&lt;br /&gt;
Logging in as anonymous ... Logged in!&lt;br /&gt;
==&amp;gt; SYST ... done.    ==&amp;gt; PWD ... done.&lt;br /&gt;
==&amp;gt; TYPE I ... done.  ==&amp;gt; CWD (1) /pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2 ... done.&lt;br /&gt;
==&amp;gt; SIZE FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... 2554132480&lt;br /&gt;
==&amp;gt; PASV ... done.    ==&amp;gt; RETR FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... done.&lt;br /&gt;
Length: 2554132480 (2.4G) (unauthoritative)&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================&amp;gt;] 2,554,132,480  465K/s   in 45m 9s  &lt;br /&gt;
&lt;br /&gt;
2013-11-18 16:33:19 (921 KB/s) - `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039; saved [2554132480]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 18 15:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 18 16:35 ..&lt;br /&gt;
-rw-r--r--. 1 root root 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm05-freebsd9_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm05-freebsd9_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm05-freebsd9_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm05-freebsd9_0&lt;br /&gt;
  LV Name                vm05-freebsd9_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                ioF6jU-pXEQ-wAhm-1zkB-LTDw-PQPG-1SPdkD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-18 16:41:30 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm05-freebsd9.sh&lt;br /&gt;
chmod 755 /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
vim /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm05-freebsd9 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso \&lt;br /&gt;
  --os-variant freebsd8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant freebsd8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running FreeBSD 8, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm05-freebsd9&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
The entire install process for FreeBSD is normal. It has native support for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so the virtual hard drive and network card will &amp;quot;just work&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_03.png|thumb|900px|center|The hard drive for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_04.png|thumb|900px|center|The network card for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is also found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
There is one trick with installing FreeBSD 9 though. The optimization was for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;freebsd8&amp;lt;/span&amp;gt; and one down-side is that FreeBSD won&#039;t reboot automatically after the install finishes and tries to reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; server stays off after the initial install completes.]]&lt;br /&gt;
&lt;br /&gt;
Obviously, the server is not yet in the cluster so we can&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e&amp;lt;/span&amp;gt;. So instead, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to boot it up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_06.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is back up and running.]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm05-freebsd9_a_Highly_Available_Service|Making vm05-freebsd9 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm06-solaris11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Oracle&#039;s Solaris operating system is a commercial [[UNIX]] product. You can download an [http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html?ssSourceSiteId=ocomen evaluation version] from their website. We&#039;ll be using the [[x86]] version.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/sol-11-1111-text-x86.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
sol-11-1111-text-x86.iso&lt;br /&gt;
   450799616 100%  108.12MB/s    0:00:03 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 450854737 bytes  received 31 bytes  69362272.00 bytes/sec&lt;br /&gt;
total size is 450799616  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 17G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 19 17:11 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 19 17:04 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 root root 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n02_vg0&amp;quot; has insufficient free space (23506 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What&#039;s this?!&lt;br /&gt;
&lt;br /&gt;
=== Calculating Free Space; Converting GiB to MB ===&lt;br /&gt;
&lt;br /&gt;
What we have here is, despite our efforts to mitigate the [[GiB]] versus [[GB]] issue, we ran out of space.&lt;br /&gt;
&lt;br /&gt;
This highlights the need for careful design planning. We weren&#039;t careful enough, so now we have to deal with the resources we have left. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s figure out how much space is left in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; volume group.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  3&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                2&lt;br /&gt;
  Open LV               2&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       50000 / 195.31 GiB&lt;br /&gt;
  Free  PE / Size       23506 / 91.82 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can see that there is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]] left (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; &amp;quot;extents&amp;quot; which are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4.00&amp;lt;/span&amp;gt; [[MiB]] each).&lt;br /&gt;
&lt;br /&gt;
Knowing this, there are a few ways we could proceed.&lt;br /&gt;
&lt;br /&gt;
# Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l xx&amp;lt;/span&amp;gt; syntax, which says to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; extents. We have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; extents free, so we could just do &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 23506&amp;lt;/span&amp;gt;&lt;br /&gt;
# Use the &amp;quot;percentage free&amp;quot; method of defining free space. That would be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; which simply uses all remaining free space.&lt;br /&gt;
# Calculate the number of [[MB]] in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]].&lt;br /&gt;
&lt;br /&gt;
The first two are self-evident, so let&#039;s look the 3rd option because math is awesome!&lt;br /&gt;
&lt;br /&gt;
To do this, we need to convert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; GiB into bytes. We can get close by simply doing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(91.82 * (1024 * 1024 * 1024))&amp;lt;/span&amp;gt; (x GiB -&amp;gt; MiB -&amp;gt; KiB = bytes), but this gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590,974,279.68&amp;lt;/span&amp;gt;... The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.82&amp;lt;/span&amp;gt; is not precise enough. If we divide this by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; (number of bytes in a [[MB]]), we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98590.97&amp;lt;/span&amp;gt;. Round down to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we take the extent size times free extent count, we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;((23506 * 4) * (1024 * 1024))&amp;lt;/span&amp;gt; (extents free * extent size) converted to MiB -&amp;gt; KiB = bytes) which gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591309824&amp;lt;/span&amp;gt;. Divided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; to get [[MB]] and we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591.30&amp;lt;/span&amp;gt;, rounded down we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,591&amp;lt;/span&amp;gt; [[MB]].&lt;br /&gt;
&lt;br /&gt;
Both methods are pretty darn close, and would end up with the same number of extents used. So now, if we wanted to, we could use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -L 98591M&amp;lt;/span&amp;gt; to keep in line with our previous usage of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
That was fun!&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll be boring and practical and use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; because it&#039;s safe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm06-solaris11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
  LV Name                vm06-solaris11_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                3BQgmu-QHca-0XtE-PRQB-btQc-LmdF-rTVyi5&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-19 15:37:29 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                91.82 GiB&lt;br /&gt;
  Current LE             23506&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we&#039;re a little smaller than we originally planned. A good and simple way to avoid this problem is to plan your storage to have more free space than you think you will need. Storage space is, relatively speaking, fairly cheap.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Solaris 11 does not support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so we will be emulating a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;scsi&amp;lt;/span&amp;gt; storage controller and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e1000&amp;lt;/span&amp;gt; (Intel 1 Gbps) network card.}}&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm06-solaris11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm06-solaris11.sh &lt;br /&gt;
vim /shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm06-solaris11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/sol-11-1111-text-x86.iso \&lt;br /&gt;
  --os-variant solaris10 \&lt;br /&gt;
  --network bridge=vbr2,model=e1000 \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm06-solaris11_0 \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/sol-11-1111-text-x86.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant solaris10&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Solaris 10, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=e1000&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to emulate an Intel gigabit network controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm06-solaris11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off, but with errors!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; begins, but with (harmless) errors.]]&lt;br /&gt;
&lt;br /&gt;
By default, Solaris tries to use the [[uhci]] USB driver which doesn&#039;t work. It generates the following error;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received&lt;br /&gt;
, this USB UHCI host controller is unusable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is harmless and can be safely ignored. Once the install is complete, we will disabled [[uhci]] by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rem_drv uhci&amp;lt;/span&amp;gt; in the server.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_03.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_04.png|thumb|900px|center|Installation summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm06-solaris11_a_Highly_Available_Service|Making vm06-solaris11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm07-rhel6 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux operating system is a commercial [[Linux]] product. You can download an [http://www.redhat.com/products/enterprise-linux/server/download.html evaluation version] from their website. If you prefer a community-supported version, the [http://www.centos.org/modules/tinycontent/index.php?id=30 CentOS] project is a binary-compatible, free-as-in-beer operating system that you can use here instead.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/rhel-server-6.4-x86_64-dvd.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
  3720347648 100%   65.25MB/s    0:00:54 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3720801890 bytes  received 31 bytes  64709598.63 bytes/sec&lt;br /&gt;
total size is 3720347648  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 20G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 20 16:54 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 20 16:50 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm07-rhel6_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm07-rhel6_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
  LV Name                vm07-rhel6_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                wBNRrK-N8xL-nJm4-lM0y-a858-ydgC-d0UU04&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-20 16:56:22 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm07-rhel6.sh&lt;br /&gt;
chmod 755 /shared/provision/vm07-rhel6.sh &lt;br /&gt;
vim /shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm07-rhel6 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso \&lt;br /&gt;
  --os-variant rhel6 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running RHEL 6.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm07-rhel6&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
It&#039;s no surprise that [[RHEL6]] works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers. Red Hat did write them, after all.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_04.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_05.png|thumb|900px|center|Performing a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Desktop&amp;lt;/span&amp;gt; install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_06.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_07.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Desktop&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm07-rhel6_a_Highly_Available_Service|Making vm07-rhel6 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
=== Making sure RHEL 6 reboots after panic&#039;ing ===&lt;br /&gt;
&lt;br /&gt;
It used to be that [[RHEL]] would halt all CPU activity if the kernel panic&#039;ed. This lack of activity could be used to detect a failure in the guest which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; could use to trigger recovery of the guest. Now though, RHEL 6 keeps one of the virtual CPUs after after panic&#039;ing, which the node can not differentiate from a normal load.&lt;br /&gt;
&lt;br /&gt;
To ensure that your RHEL guest recovers after panic&#039;ing, you will need to append the following to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysctl.conf&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make the server reboot within 5 seconds of a panic.&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make the change take immediate effect, run the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 5 &amp;gt; /proc/sys/kernel/panic&lt;br /&gt;
sysctl -e kernel.panic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify that the server will reboot post panic, you can send the following command to your server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This command will immediately and totally halt your server. It will not recover until it reboots.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If things worked properly, the server will reboot five seconds after issuing this command.&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm08-sles11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
The last server in our tutorial!&lt;br /&gt;
&lt;br /&gt;
SUSE&#039;s Linux Enterprise Server is a commercial [[Linux]] product. You can download an [https://www.suse.com/products/server/eval.html evaluation version] from their website.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/SLES-11-SP3-DVD-x86_64-GM-DVD* root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
  3362783232 100%   60.94MB/s    0:00:52 (xfer#1, to-check=1/2)&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
  5311318016 100%   73.66MB/s    0:01:08 (xfer#2, to-check=0/2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 28G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 21 01:19 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 21 01:12 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-------. 1 1000 1000 3.2G Oct 30 17:52 SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
-rw-------. 1 1000 1000 5.0G Oct 30 18:25 SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n01_vg0&amp;quot; has insufficient free space (19033 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve run into the same problem that we hit with [[#Calculating_Free_Space.3B_Converting_GiB_to_MB]]. So we&#039;ve learned our lesson and will switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; to use up the free space that remains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm08-sles11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
  LV Name                vm08-sles11_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                9J9eO1-BhTe-Ee8X-zP5u-UY5S-Y7AB-Ql0hhI&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-21 01:23:16 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                74.35 GiB&lt;br /&gt;
  Current LE             19033&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our compounding error in planning has reduced this server&#039;s planned space down to a mere &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;74.35&amp;lt;/span&amp;gt; [[GiB]]!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm08-sles11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm08-sles11.sh &lt;br /&gt;
vim /shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm08-sles11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso \&lt;br /&gt;
  --disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force \&lt;br /&gt;
  --os-variant sles11 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|SLES 11 has two install DVDs. This tells the hypervisor to create a second DVD drive and to insert &#039;Disc 2&#039; into it.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running SLES 11.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm08-sles11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
SLES 11 works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_04.png|thumb|900px|center|Install summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_05.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_08.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Physical Machine&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
That is all eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm08-sles11_a_Highly_Available_Service|Making vm08-sles11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
Eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
= Making Our VMs Highly Available Cluster Services =&lt;br /&gt;
&lt;br /&gt;
We&#039;re ready to start the final step; Making our VMs highly available cluster services! This involves two main steps:&lt;br /&gt;
&lt;br /&gt;
* Creating two new, ordered fail-over Domains; One with each node as the highest priority.&lt;br /&gt;
* Adding our VMs as services, one is each new fail-over domain.&lt;br /&gt;
&lt;br /&gt;
== Creating the Ordered Fail-Over Domains ==&lt;br /&gt;
&lt;br /&gt;
We have planned for two VMs, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-dev&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-web&amp;lt;/span&amp;gt; to normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-db&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-ms&amp;lt;/span&amp;gt; to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Of course, should one of the nodes fail, the lost VMs will be restarted on the surviving node. For this, we will use an ordered fail-over domain.&lt;br /&gt;
&lt;br /&gt;
The idea here is that each new fail-over domain will have one node with a higher priority than the other. That is, one will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the highest priority and the other will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as the highest. This way, VMs that we want to normally run on a given node will be added to the matching fail-over domain.&lt;br /&gt;
&lt;br /&gt;
{{note|1=With 2-node clusters like ours, ordering is arguably useless. It&#039;s used here more to introduce the concepts rather than providing any real benefit. If you want to make production clusters unordered, you can. Just remember to run the VMs on the appropriate nodes when both are on-line.}}&lt;br /&gt;
&lt;br /&gt;
Here are the two new domains we will create in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/cluster/cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			...&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two major pieces of the puzzle here are the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority=&amp;quot;x&amp;quot;&amp;lt;/span&amp;gt; attributes. The former tells the cluster that there is a preference for which node should be used when both are available. The later, which is the difference between the two new domains, tells the cluster which specific node is preferred.&lt;br /&gt;
&lt;br /&gt;
The first of the new fail-over domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt;. Any service placed in this domain will prefer to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, as its priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; is higher than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. The second of the new domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; which reverses the preference, making &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; preferred over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; with the new domain, and the version updated to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s validate it now, but we won&#039;t bother to push it out just yet.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, now to create the new VM services!&lt;br /&gt;
&lt;br /&gt;
== Making vm01-win2008 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you jumped straight here after provisioning the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server, please [[#Making_Our_VMs_Highly_Available_Cluster_Services|jump back]] and be sure you&#039;ve created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; fail-over domains.}}&lt;br /&gt;
&lt;br /&gt;
The final piece of the puzzle, and the whole purpose of this exercise is in sight!&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm01-win2008|vm01-win2008]]&amp;lt;/span&amp;gt;, as it was the first server we provisioned.&lt;br /&gt;
&lt;br /&gt;
There is a special resource agent for virtual machines which use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:&amp;lt;/span&amp;gt; service prefix in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. We will need to create one of these services for each server that will be managed by the &#039;&#039;Anvil!&#039;&#039; platform.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm01-win2008 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
In order for the cluster to manage a server, it must know where to find the &amp;quot;definition&amp;quot; file that describes the virtual machine and its hardware. When the server was created with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt;, it saved this definition file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/libvirt/qemu/vm01-win2008.xml&amp;lt;/span&amp;gt;. If this was a single-host setup, that would be fine.&lt;br /&gt;
&lt;br /&gt;
In our case though, there are two reasons we need to move this.&lt;br /&gt;
&lt;br /&gt;
# We want both nodes to be able to see the definition file and we want a single place to make updates.&lt;br /&gt;
# Normal &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools are not cluster-aware, so we don&#039;t want them to see our server except when it is running.&lt;br /&gt;
&lt;br /&gt;
To address the first issue, we&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to write out the definition file for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. We&#039;ll use a simple bash redirection to write this to a file on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; where both nodes will be able to read it. Also, being stored on our GFS2 partition, any change made to the file will immediately be seen by both nodes.&lt;br /&gt;
&lt;br /&gt;
To address the second issue, we will &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;&amp;quot; the server. This effectively deletes it from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;, so when a server is off (or running elsewhere), tools like &amp;quot;Virtual Machine Manager&amp;quot; will not see it. This helps avoid problems like a user, unaware that the server is running on another node, starting it on the first. The cluster will still be able to start and stop the server just fine, so there is no worry about losing your new server. The cluster tools, being cluster-aware obviously, are smart enough to not try and boot a server on one node when it&#039;s already running on another.&lt;br /&gt;
&lt;br /&gt;
So the first step is to dump the server&#039;s definition file.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tool, to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--all&amp;lt;/span&amp;gt; option is needed to show us servers that are defined but powered off. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh list&amp;lt;/span&amp;gt; only shows running servers, so it&#039;s a good habit to always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--list&amp;lt;/span&amp;gt; to be sure you have a complete view of your system.&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is running. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots. It changes frequently and you need not worry about it. its principal purpose to be unique among running servers.&lt;br /&gt;
&lt;br /&gt;
So before we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt; the server, we first need to record its definition. We can do that with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh dumpxml $vm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain type=&#039;kvm&#039; id=&#039;1&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;vm01-win2008&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;uuid&amp;gt;d06381fc-8033-9768-3a28-b751bcc00716&amp;lt;/uuid&amp;gt;&lt;br /&gt;
  &amp;lt;memory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/memory&amp;gt;&lt;br /&gt;
  &amp;lt;currentMemory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/currentMemory&amp;gt;&lt;br /&gt;
  &amp;lt;vcpu placement=&#039;static&#039;&amp;gt;2&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch=&#039;x86_64&#039; machine=&#039;rhel6.4.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;boot dev=&#039;hd&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
  &amp;lt;features&amp;gt;&lt;br /&gt;
    &amp;lt;acpi/&amp;gt;&lt;br /&gt;
    &amp;lt;apic/&amp;gt;&lt;br /&gt;
    &amp;lt;pae/&amp;gt;&lt;br /&gt;
  &amp;lt;/features&amp;gt;&lt;br /&gt;
  &amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;timer name=&#039;rtc&#039; tickpolicy=&#039;catchup&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/clock&amp;gt;&lt;br /&gt;
  &amp;lt;on_poweroff&amp;gt;destroy&amp;lt;/on_poweroff&amp;gt;&lt;br /&gt;
  &amp;lt;on_reboot&amp;gt;restart&amp;lt;/on_reboot&amp;gt;&lt;br /&gt;
  &amp;lt;on_crash&amp;gt;restart&amp;lt;/on_crash&amp;gt;&lt;br /&gt;
  &amp;lt;devices&amp;gt;&lt;br /&gt;
    &amp;lt;emulator&amp;gt;/usr/libexec/qemu-kvm&amp;lt;/emulator&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hda&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-0-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;0&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/virtio-win-0.1-52.iso&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hdc&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-1-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;1&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;block&#039; device=&#039;disk&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039; cache=&#039;none&#039; io=&#039;native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&#039;/dev/an-c05n01_vg0/vm01-win2008_0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vda&#039; bus=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;virtio-disk0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x04&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;usb&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;usb0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;ide&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;interface type=&#039;bridge&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;mac address=&#039;52:54:00:8e:67:32&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source bridge=&#039;vbr2&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vnet0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;net0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x03&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/interface&amp;gt;&lt;br /&gt;
    &amp;lt;serial type=&#039;pty&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/serial&amp;gt;&lt;br /&gt;
    &amp;lt;console type=&#039;pty&#039; tty=&#039;/dev/pts/3&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target type=&#039;serial&#039; port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/console&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;tablet&#039; bus=&#039;usb&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;input0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;graphics type=&#039;spice&#039; port=&#039;5900&#039; autoport=&#039;yes&#039; listen=&#039;127.0.0.1&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;listen type=&#039;address&#039; address=&#039;127.0.0.1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/graphics&amp;gt;&lt;br /&gt;
    &amp;lt;video&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;qxl&#039; ram=&#039;65536&#039; vram=&#039;65536&#039; heads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;video0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x02&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/video&amp;gt;&lt;br /&gt;
    &amp;lt;memballoon model=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;balloon0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x05&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/memballoon&amp;gt;&lt;br /&gt;
  &amp;lt;/devices&amp;gt;&lt;br /&gt;
  &amp;lt;seclabel type=&#039;dynamic&#039; model=&#039;selinux&#039; relabel=&#039;yes&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;unconfined_u:system_r:svirt_t:s0:c68,c367&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;imagelabel&amp;gt;unconfined_u:object_r:svirt_image_t:s0:c68,c367&amp;lt;/imagelabel&amp;gt;&lt;br /&gt;
  &amp;lt;/seclabel&amp;gt;&lt;br /&gt;
&amp;lt;/domain&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is your server&#039;s hardware!&lt;br /&gt;
&lt;br /&gt;
Notice how it shows the mounted cd-roms? You can also see the [[MAC]] address assigned to the network card, the RAM and CPU cores allocated and other details. Pretty awesome!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s re-run the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dumpxml&amp;lt;/span&amp;gt; file, but this time, we&#039;ll use a bash redirection to save the output to a file in our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definition&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008 &amp;gt; /shared/definitions/vm01-win2008.xml&lt;br /&gt;
ls -lah /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 11:54 /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now, as we will see in a moment, the cluster will be able to use this to start, stop, migrate and recover the server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm01-win2008.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm01-win2008 Service ===&lt;br /&gt;
&lt;br /&gt;
As we discussed earlier, we are now going to create a new service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
&lt;br /&gt;
This element will have a child element that tells the cluster to give servers up to 30 minutes to shut down. Normally, the cluster will wait for two minutes after calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; against a server. For privacy reasons, there is not way for the cluster to know what is happening inside the server. So after the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; timeout expires, the node is considered failed and is forced off. The problem is that windows often queues updates to be installed during the shut down, so it can take a very long time to turn off. We don&#039;t want to risk &amp;quot;pulling the plug&amp;quot; on a windows machine that is being updated, of course, so we will tell the cluster to be very patient.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is a good idea to set your windows servers to download updates but not install them until an admin says to do so. This way, there is less chance of problem because the admin can do a reboot to install the updates during a maintenance window. It also avoids false-decleration of server failure.}}&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12&amp;lt;/span&amp;gt; and take a look at the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at each of the attributes now;&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;&lt;br /&gt;
|This must match the name we created the VM with (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name ...&amp;lt;/span&amp;gt; value when we provisioned the VM). In this case, that is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. This is the name that will be passed to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm.sh&amp;lt;/span&amp;gt; resource agent when managing this service, and it will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;name&amp;gt;.xml&amp;lt;/span&amp;gt; used when looking under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path=...&amp;lt;/span&amp;gt; for the VM&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster to manage the VM using the given fail-over domain. We built &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage pool, so this server will be assigned to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; domain. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster where to look for the server&#039;s definition file. &#039;&#039;&#039;Do not&#039;&#039;&#039; include the actual file name, just the path. The cluster takes this path, appends the server&#039;s name and then appends &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.xml&amp;lt;/span&amp;gt; in order to find the server&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster &#039;&#039;not&#039;&#039; to start the server automatically. This is needed because, if this was &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the cluster will try to start the server and the storage at the same time. It takes a few moments for the storage to start, and by the time it did, the server service would have failed.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt;&lt;br /&gt;
|As we saw with the storage services, we want to ensure that this service &#039;&#039;&#039;is not&#039;&#039;&#039; exclusive. If it were, starting the VM would stop storage/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and prevent other servers from running on the node. This would be a bad thing™.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the &#039;&#039;Anvil!&#039;&#039; what to do when the service fails. We are setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt;, so the cluster will try to restart the server on the same node it was on when it failed. The alternative is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;, which would instead start the server on another node. More about this next.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt;&lt;br /&gt;
|When a server fails, it is possible that it is because there is a subtle problem on the host node itself. So this attribute allows us to set a limit on how many times a server will be allowed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt; before giving up and switching to a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy. We&#039;re setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;, which means that if a server is restarted twice, the third failure will trigger a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt;&lt;br /&gt;
|If we let the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; failure count increment indefinitely, than a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy becomes inevitable. To account for this, we use this attribute to tell the &#039;&#039;Anvil!&#039;&#039; to &amp;quot;forget&amp;quot; a restart after the defined number of seconds. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds (ten minutes). So if a server fails, the failure count increments from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. After &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds though, the restart is &amp;quot;forgotten&amp;quot; and the failure count returns to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Said another way, a server will have to fail three times in ten minutes to trigger the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; recovery policy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So let&#039;s take a look at the final, complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s now take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;? That is because of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, the cluster is smart enough that we can tell it to start the service and it will see the server is already running and not actually do anything. So we can do this next step safely while the server is running.&lt;br /&gt;
&lt;br /&gt;
The trick, of course, is to be sure to tell the cluster to start the server on the right cluster node.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; once more to verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is, in fact, still on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent. So now to tell the cluster to begin managing the server, we&#039;re use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. It takes two switches in this case:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;; &amp;quot;enable&amp;quot; the service&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt;; do the action on the named member.&lt;br /&gt;
&lt;br /&gt;
We can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; from any node in the cluster. For now though, lets stick to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; that the server is now under cluster control.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. Windows 2008 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 13:36:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Windows occasionally ignores ACPI power button events. In other cases, some programs will block the shut-down. In either case, the server will not actually shut down. It&#039;s a good habit to connect to the server and make sure it shuts down when you disable the service. If it does not shut down on its own, use the operating system&#039;s power off feature.}}&lt;br /&gt;
&lt;br /&gt;
As we expected. So now, &amp;quot;press the server&#039;s power button&amp;quot; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We have to do it this way because, if the server stops any other way, the cluster will treat it as a failure and boot it right back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:11:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt;; That tells rgmanager to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service on the preferred host. It&#039;s a nice habit to get into as it will ensure the server always boots on the preferred node, when possible.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What the deuce!?&lt;br /&gt;
&lt;br /&gt;
=== Solving vm01-win2008 &amp;quot;Failure to Enable&amp;quot; Error ===&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the log file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n02 rgmanager[2864]: Recovering failed service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, we&#039;ll see that the server is stuck in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:16:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            none                                       recovering    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is why we saw the &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&amp;lt;/span&amp;gt;&amp;quot; message on both nodes. The cluster tried to enable it on the preferred host first, because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch, that failed so it tried to enable it on the second node and that also failed. &lt;br /&gt;
&lt;br /&gt;
The first step to diagnosing the problem is to disable the service in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and then manually trying to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:17:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now the cluster is no longer trying to touch the server. Lets start it manually. As always, verify the state of things. In this case, we&#039;ll double-check that the server really didn&#039;t start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s for sure off, so let&#039;s try to start it. As you can see above, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server is not shown as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shut off&amp;lt;/span&amp;gt; because we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;d it. So to start it, we need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt; option and specify the definition file manually.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh create &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 created from /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 10    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we know that the server itself is fine. Let&#039;s shut down the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;. Note that it will take a minute for the server to gracefully shut down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh shutdown vm01-win2008 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 is being shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a likely cause of problems is an [[SELinux]] denial. Let&#039;s verify that SELinux is, in fact, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enforcing&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is. So to test, let&#039;s temporarily put SELinux into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;permissive&amp;lt;/span&amp;gt; mode and see if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; starts working.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bingo! So we&#039;ve SELinux appears to be the problem.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s disable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt;, re-enable SELinux and then try to debug SELinux.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 1&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re back to where it fails. We will now want to look for errors. SELinux writes log entries to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/audit/audit.log&amp;lt;/span&amp;gt;, however, by default, many things are set to not logged (set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; in SELinux parlance). This includes cluster related issues. So to temporarily enable complete logging, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semodule&amp;lt;/span&amp;gt; command to tell it to log all messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# no output, but it takes a while to complete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f /var/log/audit/audit.log&amp;lt;/span&amp;gt; and try again to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We expect it will fail, but the log messages will be useful. Once it fails, we&#039;ll immediately disable it again. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;audit.log&amp;lt;/span&amp;gt;, we see;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1384209306.795:2768): avc:  denied  { search } for  pid=24850 comm=&amp;quot;virsh&amp;quot; name=&amp;quot;/&amp;quot; dev=dm-0 ino=22 scontext=unconfined_u:system_r:xm_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s complaining about the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; and specifically about the [[inode]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;. If you recall from when we setup the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; was a &amp;quot;device mapper&amp;quot; device. Let&#039;s see what this is.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/mapper/ | grep dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx.  1 root root      7 Nov  3 12:14 an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the device mapper name for the [[LV]] we created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Knowing this, let&#039;s search &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; for what is at [[inode]] number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find /shared -inum 22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So inode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt; is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; directory itself. So lets look at the SELinux context using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-Z&amp;lt;/span&amp;gt; switch.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:file_t:s0      .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the current context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt; entry above) is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;system_u:object_r:file_t:s0&amp;lt;/span&amp;gt;. This isn&#039;t permissive enough, so we need to fix it. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_t&amp;lt;/span&amp;gt; context should be good enough as it allows reads from files under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{{note|1=If you use a program other than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; that tries to manipulate the files in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;, you may need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_rw_t&amp;lt;/span&amp;gt; context as it allows read/write permissions.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll need to make this change on &#039;&#039;&#039;both&#039;&#039;&#039; nodes. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage&amp;lt;/span&amp;gt; to make the change followed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restorecon&amp;lt;/span&amp;gt; to make sure the changes remain in case the file system is ever re-labelled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We told SELinux to ignore the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; option earlier. We&#039;ll want to undo this so that our logs don&#039;t get flooded.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# No output, but it will take a while to return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If all went well, we should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Live Migration ===&lt;br /&gt;
&lt;br /&gt;
One of the most useful features of the &#039;&#039;Anvil!&#039;&#039; is the ability to &amp;quot;push&amp;quot; a running server from one node to another. This can be done without interrupting users, so it allows maintenance of nodes in the middle of work days. Upgrades, maintenance and repairs can be done without scheduling maintenance windows!&lt;br /&gt;
&lt;br /&gt;
As always, lets take a look at where things are right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:15:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that the cluster&#039;s view is accurate.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we expected.&lt;br /&gt;
&lt;br /&gt;
Now, to live-migrate a server, we will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-M&amp;lt;/span&amp;gt; (note the capitalization). This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; to migrate, instead of relocated, the service to the target cluster member.&lt;br /&gt;
&lt;br /&gt;
Seeing as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is currently on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll migrate it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you get an error like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Failed; service running on original owner&amp;lt;/span&amp;gt;, you may not have your [[#Configuring_iptables|firewall]] configured properly. Alternately, you may have run into [[2-Node_Red_Hat_KVM_Cluster_Tutorial_-_Troubleshooting#.5Bvm.5D_error:_internal_error_Attempt_to_migrate_guest_to_the_same_host_.7Buuid.7D|mainboards with matching UUIDs]].}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:57:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you were logged into the server, you would have noticed than any running appications, including network applications, would have not been effected in any way.&lt;br /&gt;
&lt;br /&gt;
How cool is that?&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll push it back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 15:02:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, we can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very cool.&lt;br /&gt;
&lt;br /&gt;
== Making vm02-win2012 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm02-win2012|vm02-win2012]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm02-win2012 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Recall that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm02-win2012 &amp;gt; /shared/definitions/vm02-win2012.xml&lt;br /&gt;
ls -lah /shared/definitions/vm02-win2012.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 13:03 /shared/definitions/vm02-win2012.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm02-win2012.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm02-win2012 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm02-win2012 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;13&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;13&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you&#039;ve been following along, this will be the first time we&#039;ve pushed a change to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll need to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password on both nodes.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:08:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:09:00 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To show that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; can be used anywhere, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to enable the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:29:12 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm02-win2012 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:35:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re flipping to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, but we don&#039;t have to. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; command is smart enough to know where the server is running and disable it on the appropriate node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm02-win2012...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:36:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ll go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; so that we can see how the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch is, in fact, smart enough to start the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm02-win2012...Success&lt;br /&gt;
vm:vm02-win2012 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SELinux fix [[#Solving_vm01-win2008_Failure_to_Enable_Error|from before]] worked for this server, too! You can verify this by disabling the server and re-running the above command on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:08:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@an-c05n01 ~]# virsh list --all&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 6     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:13:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Making vm03-win7 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm03-win7|vm03-win7]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm03-win7 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm03-win7 &amp;gt; /shared/definitions/vm03-win7.xml&lt;br /&gt;
ls -lah /shared/definitions/vm03-win7.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 14:21 /shared/definitions/vm03-win7.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm03-win7.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm03-win7 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm03-win7 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;14&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm03-win7 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm03-win7...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:30:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:43:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:56:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
 4     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:59:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm04-win8 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm04-win8|vm04-win8]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm04-win8 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm04-win8 &amp;gt; /shared/definitions/vm04-win8.xml&lt;br /&gt;
ls -lah /shared/definitions/vm04-win8.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 15:24 /shared/definitions/vm04-win8.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm04-win8.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm04-win8 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm04-win8 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. This server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;15&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm04-win8 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm04-win8...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:34:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:35:11 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm05-freebsd9 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm05-freebsd9|vm05-freebsd9]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm05-freebsd9 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm05-freebsd9 &amp;gt; /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
ls -lah /shared/definitions/vm05-freebsd9.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.8K Nov 19 12:29 /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm05-freebsd9.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm05-freebsd9 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm05-freebsd9...Success&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:56:03 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm05-freebsd9 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:57:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm05-freebsd9...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:02:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 10    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:03:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm06-solaris11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm06-solaris11|vm06-solaris11]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm06-solaris11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm06-solaris11 &amp;gt; /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm06-solaris11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 20 16:05 /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm06-solaris11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm06-solaris11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm06-solaris11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;17&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm06-solaris11...Success&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:31:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm06-solaris11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:39:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm06-solaris11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:38 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:42:46 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:43:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm07-rhel6 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm07-rhel6|vm07-rhel6]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm07-rhel6 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm07-rhel6 &amp;gt; /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
ls -lah /shared/definitions/vm07-rhel6.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 21 00:55 /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm07-rhel6.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm07-rhel6 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm07-rhel6 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you did a &amp;quot;minimal&amp;quot; install, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; will not be installed. Without it, the server will not shut down gracefully in the next step. Be sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is installed and that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpi&amp;lt;/span&amp;gt; daemon is running.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm07-rhel6...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:05:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:06:16 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:07:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 20    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:08:49 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making vm08-sles11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add our last server, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm08-sles11|vm08-sles11]]&amp;lt;/span&amp;gt;, to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm08-sles11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm08-sles11 &amp;gt; /shared/definitions/vm08-sles11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm08-sles11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.1K Nov 21 02:14 /shared/definitions/vm08-sles11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm08-sles11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm08-sles11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;19&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm08-sles11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm08-sles11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:20:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 21    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:21:13 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 25    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s really pretty easy, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
= Setting Up Alerts =&lt;br /&gt;
&lt;br /&gt;
One of the major additions to this second addition is the advent of the new alert system we developed called &amp;quot;AN!CM&amp;quot;; &amp;quot;AN! Cluster Monitor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Alert System Overview ==&lt;br /&gt;
&lt;br /&gt;
It is hardly fancy, but it does provide, in one package, very careful and detailed monitoring of:&lt;br /&gt;
&lt;br /&gt;
* Incoming power issues via UPS monitoring.&lt;br /&gt;
* Network interruptions via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond&amp;lt;/span&amp;gt; driver events&lt;br /&gt;
* Monitoring of node environmental health via IPMI BMC sensor readings&lt;br /&gt;
* Monitoring of all storage components via LSI&#039;s MegaCli tool&lt;br /&gt;
* Monitoring of the HA cluster stack using Red Hat&#039;s tools&lt;br /&gt;
&lt;br /&gt;
In all, over 200 points are monitored every 30 seconds. Most changes are simply logged, but events deemed important (or new events not before seen) trigger email alerts. These alerts are kept as simple and to the point as possibly to minimize the amount of time needed to understand what event triggered the alert.&lt;br /&gt;
&lt;br /&gt;
The alerting system tries to be intelligent about how alerts are triggered. For example, a thermal alert can trigger if it passes a set threshold, of course. At the same time, &amp;quot;early warning&amp;quot; alerts can be triggered is a sudden excessive change in temperature is seen. This allows early reaction to major events like HVAC failures in the server room or DC.&lt;br /&gt;
&lt;br /&gt;
Basic predictive failure analysis is also provided. Examples of this are alerts on distorted incoming power from the building mains. Likewise, a sudden jump in the number of media errors from a disk drive will trigger alerts. In this way, early warning alerts can get out before a component actually fails. This allows for corrective measures or replacement parts to be ordered pre-failure, minimizing risk exposure time.&lt;br /&gt;
&lt;br /&gt;
== AN!CM Requirements ==&lt;br /&gt;
&lt;br /&gt;
The alerting system is fairly customized to the &#039;&#039;Anvil!&#039;&#039; build-out. For example, only APC brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] controllers are supported for UPS monitoring. Likewise, only LSI-brand RAID controllers are currently supported.&lt;br /&gt;
&lt;br /&gt;
That said, AN!CM is an [https://github.com/digimer/an-cdb/tree/master/tools open-source project] (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.lib&amp;lt;/span&amp;gt;), so contributions are happily accepted. If you need help adapting this to your hardware, please don&#039;t hesitate to [[Support|contact us]]. We will be happy to assist however we can.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Your Dashboard ==&lt;br /&gt;
&lt;br /&gt;
You can configure a node&#039;s monitoring without a dashboard, if you wish. However, [[AN!CDB]] has been designed to use the dashboard systems as the center of the AN! tools.&lt;br /&gt;
&lt;br /&gt;
Please setup a dashboard before proceeding:&lt;br /&gt;
&lt;br /&gt;
* [[Install and Configure AN!CDB]]&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re done there, come back here.&lt;br /&gt;
&lt;br /&gt;
== Testing Monitoring ==&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/an/an.conf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm.lib&amp;lt;/span&amp;gt; should be on our nodes.&lt;br /&gt;
&lt;br /&gt;
Before we enable monitoring, lets test it once manually. If things work as expected, you should get two emails:&lt;br /&gt;
&lt;br /&gt;
* First indicating that the alert system has started with an overview of the node&#039;s health.&lt;br /&gt;
* Second indicating that the alert system has stopped.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The monitoring and alert program generally will not print anything to the screen. When we run the command below, the terminal will appear hung. It is not though. Wait a minute and you should get an email from the node. Once you see that email, press &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; to close the program and return to the command prompt.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C3:34&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:58:06:A9&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:8E:67:32&lt;br /&gt;
          |- vnet2, MAC: FE:54:00:68:9B:FD&lt;br /&gt;
          |- vnet3, MAC: FE:54:00:D5:49:4C&lt;br /&gt;
          \- vnet4, MAC: FE:54:00:8A:6C:52&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 73 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4080 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      36 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 110 Watts  | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 16.50 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 18.70 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 210 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 37        |&lt;br /&gt;
| CPU2           | ok        | 41        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4560      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     30.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  sharedfs&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:5E:29:1C&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:29:38:3B&lt;br /&gt;
          \- vnet2, MAC: FE:54:00:B0:6C:AA&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 68 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4058 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      35 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.13 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 33        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4920      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 51.0 Minutes    Current Load:    26.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once you see these emails, you can close the monitoring programs by pressing &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot;. When you do, the terminal will return and you will get another email from each node warning you that the alerting system has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 2480 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n01 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 1447 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n02 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to see what AN!CM is doing, it writes its log files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt;. There are many events that are logged which do not trigger emails. Sensors like thermometers, fan tachometers and various voltage and wattage sensors will constantly be shifting. These changes are recorded in this log file, should you ever wish to see how things change over time.&lt;br /&gt;
&lt;br /&gt;
Lets take a quick look at what was written to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.log&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 41 *C -&amp;gt; 42 *C&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 18.70 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 19.80 Watts -&amp;gt; ok, 17.60 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201452 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 52.0 Minutes -&amp;gt; 51.0 Minutes&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4081 mV -&amp;gt; 4079 mV&lt;br /&gt;
1386201487 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 42 *C -&amp;gt; 41 *C&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 20.90 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN1 PSU2&amp;quot; fan speed has change; ok, 6480 RPM -&amp;gt; ok, 6600 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 SYS&amp;quot; fan speed has change; ok, 5280 RPM -&amp;gt; ok, 5340 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN3 SYS&amp;quot; fan speed has change; ok, 4980 RPM -&amp;gt; ok, 5040 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 5220 RPM -&amp;gt; ok, 5280 RPM.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 14.30 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 11 Watts.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN1 SYS&amp;quot; fan speed has change; ok, 4740 RPM -&amp;gt; ok, 4680 RPM.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6360 RPM -&amp;gt; ok, 6240 RPM.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;PSU2 Power&amp;quot; has change; ok, 120 Watts -&amp;gt; ok, 110 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;Total Power&amp;quot; has change; ok, 210 Watts -&amp;gt; ok, 200 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4060 mV -&amp;gt; 4061 mV&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;BATT 3.0V&amp;quot; voltage has change; ok, 3.14 Volts -&amp;gt; ok, 3.13 Volts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 14.30 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 11 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6240 RPM -&amp;gt; ok, 6360 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 4860 RPM -&amp;gt; ok, 4920 RPM.&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;IOH 1.8V&amp;quot; voltage has change; ok, 1.80 Volts -&amp;gt; ok, 1.79 Volts.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shortly, we will look at what alerts that trigger emails look like. For now, we&#039;re ready to enable monitoring!&lt;br /&gt;
&lt;br /&gt;
== Enabling Monitoring ==&lt;br /&gt;
&lt;br /&gt;
Now that we know that monitoring and emailing is working, it is time to enable it.&lt;br /&gt;
&lt;br /&gt;
By design, the monitoring program is designed to exit should it run into any unexpected problems. Obviously, it is quite important that the alert system always run. &lt;br /&gt;
&lt;br /&gt;
The way we ensure this is to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[crontab]]&amp;lt;/span&amp;gt; to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; every five minutes. The first thing that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; does is check to see if it is already running. If so, it simply exits, so the alert system won&#039;t run more than once. Should it crash or be killed for some reason, however, this will ensure that the alert system is back up within five minutes.&lt;br /&gt;
&lt;br /&gt;
So if you find that you suddenly get an email claiming that the monitoring software has started, be sure to check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt; for error messages.&lt;br /&gt;
&lt;br /&gt;
Back to enabling monitoring; &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to also enable two log archival scripts; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_megasas.log.sh&amp;lt;/span&amp;gt;. These prevent the log files generated by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; directly and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file created by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; from growing too big. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; will run once a day and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; archival scripts will run once per month. We already downloaded &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt;, but we still need to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt;. Both will create up to five archived log files, allowing you to review up to five days and five months, respectively. After that, the oldest log files are removed, effectively capping the amount of disk space these logs will use.&lt;br /&gt;
&lt;br /&gt;
Lets download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; and make it executable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:58--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.1 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:59--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.3 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cronbtab -e&amp;lt;/span&amp;gt; to edit the cron table and add three entries for these programs. If you already added &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/archive_an-cm.log.sh&amp;lt;/span&amp;gt;, then simply append the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save and quit. Within five minutes, you should see an email telling you that the monitoring system has started up again.&lt;br /&gt;
&lt;br /&gt;
We&#039;re done!&lt;br /&gt;
&lt;br /&gt;
== We&#039;re Done! or are We? ==&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, ladies and gentlemen. Our cluster is completed! In theory now, any failure in the cluster will result in no lost data and, at worst, no more than a minute or two of downtime.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In theory&amp;quot; just isn&#039;t good enough in clustering though. Time to take &amp;quot;theory&amp;quot; and make it a tested, known fact.&lt;br /&gt;
&lt;br /&gt;
= Testing Server Recovery =&lt;br /&gt;
&lt;br /&gt;
You may have thought that we were done. Indeed, the &#039;&#039;Anvil!&#039;&#039; has been built, but we need to do a final round of testing. Thus far, we&#039;re tested network redundancy and we have tested our fencing devices.&lt;br /&gt;
&lt;br /&gt;
The last round of testing will be to make sure our servers recover properly. We will test the following;&lt;br /&gt;
&lt;br /&gt;
# Controlled migration and node withdrawal.&lt;br /&gt;
## Migrate all servers to one node, then withdraw and power off the other node.&lt;br /&gt;
## Restart the node and rejoin it to the cluster.&lt;br /&gt;
## Repeat for the other node.&lt;br /&gt;
# Controlled, out-of-cluster power-off of a server, ensure it is restarted&lt;br /&gt;
# Crashing nodes.&lt;br /&gt;
## Ensuring crashed node is fenced.&lt;br /&gt;
## Confirm all servers recover on the surviving node.&lt;br /&gt;
## Rejoining the recovered node and migrating servers back.&lt;br /&gt;
## Crashing the other node, ensuring its servers recover.&lt;br /&gt;
&lt;br /&gt;
== Controlled Migration and Node Withdrawal ==&lt;br /&gt;
&lt;br /&gt;
These tests ensure that we will be able to safely pull a node out of service for upgrades, repairs, routine service and OS updates.&lt;br /&gt;
&lt;br /&gt;
We will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;; We will live-migrate all servers over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then power off &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. We will then power &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back up and rejoin it to the cluster. Once both DRBD resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; again, we will live-migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
Once done, we will repeat the process in order to test taking &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; out, then restarting it and putting it back into production. If all goes well, both nodes will be powered off at one point or another and none of the servers should be interrupted.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
As always, the first step is to check what state the cluster is in.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:08:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Remember; It is not uncommon for live migrations to take several minutes to complete. The hypervisor will slow the migration process if it thinks that is needed to avoid negatively affecting performance inside the server. Please be patient!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s a good idea to be running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; from this point forward. It will allow you to monitor the changes as they happen.}}&lt;br /&gt;
&lt;br /&gt;
Before we can withdraw &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll need to live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What is this? An alert!&lt;br /&gt;
&lt;br /&gt;
You should have just gotten two alerts, one from each node, telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; has moved. Lets take a look;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike the long and detailed message from the initial startup, these &amp;quot;state change&amp;quot; emails are much shorter and to the point. It tells you only what has changed, so that you can quickly tell exactly what happened. In this case, we expected this change so there is no need for concern.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s migrate the other servers. You will see another pair of alerts like this after each migration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That should be all of them. Verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:53:54 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now we will stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. We&#039;ll verify that the node is gone by calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; from both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:56:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
We can now update &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s OS or power it off for physical maintenance, repairs or upgrades!&lt;br /&gt;
&lt;br /&gt;
We will power it off now to simulate hardware maintenance.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
poweroff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n01.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 21:57 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for power off NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Load Testing in a Degraded State ===&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is powered off. &lt;br /&gt;
&lt;br /&gt;
This is a great time to load test your servers! &lt;br /&gt;
&lt;br /&gt;
This is an effective simulation of a degraded state. Should you lose a node, you will be forced to run on a single node until repairs can be made. You need to be sure that performance on a single node is good enough to maintain full production during this time. &lt;br /&gt;
&lt;br /&gt;
How you load test your servers will be entirely dependent on what they are and what they do. So there is not much we can do in the scope of this tutorial. Once your load tests are done, proceed to the next section.&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
So you&#039;re load tests are done. Now you&#039;re ready to bring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back online and rejoin it to the cluster.&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent to first verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is truly off, then we will use it to turn it on. We could certainly use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; directly, of course, but it is an excellent opportunity to practice with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Getting status of IPMI:an-c05n01.ipmi...Chassis power = Off&lt;br /&gt;
Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State confirmed. Let&#039;s power it up!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Powering on machine @ IPMI:an-c05n01.ipmi...Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most hardware servers take several minutes to boot, so this is a great time to go make a tea or coffee. Once it&#039;s booted, within five minutes, you should get an alert email telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is up and running. This is an excellent way to know when your break is over.&lt;br /&gt;
&lt;br /&gt;
Once the node is up, log back into and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resource are back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;. Do not proceed until this is the case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:24:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready to migrate the servers back!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; is once again fully redundant and our servers are back on their preferred hosts.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Next up; Withdrawing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. As always, we will check the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:34:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This time, we will live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All servers are off, so now we&#039;ll stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as offline now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:41:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As before, we can now do an OS update or power off the node.&lt;br /&gt;
&lt;br /&gt;
We did our single-node load testing already, so this time we will simply reboot &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to simulate a (very quick) hardware service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n02.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 22:43 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for reboot NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
As before, we&#039;ll verify the current state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Then we&#039;ll watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:47:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:50:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step; Migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;re back into a fully redundant state and our servers are running on their preferred nodes!&lt;br /&gt;
&lt;br /&gt;
== Out-of-Cluster Server Power-off ==&lt;br /&gt;
&lt;br /&gt;
If a server shuts off, for any reason, the cluster will treat it as a failed service and it will recover it by turning it back on. &lt;br /&gt;
&lt;br /&gt;
There is a catch though...&lt;br /&gt;
&lt;br /&gt;
For privacy reasons, there is no way to look inside a server to determine if it has failed. So detecting a failure is restricted to simply seeing it not do anything any more. Some operating systems, like most or all Microsoft operating systems, go into an infinite loop when they [http://en.wikipedia.org/wiki/Blue_Screen_of_Death blue screen]. To the cluster, it simply looks like the server is really really busy, so it is not treated as failed. &lt;br /&gt;
&lt;br /&gt;
So please make sure, if at all possible, to set your servers to reboot on crash. Most modern operating systems do this already, but consult your server operating system&#039;s documentation to verify.&lt;br /&gt;
&lt;br /&gt;
For this test, all we will do is log into a server and turn it off the way you would if it was a bare-iron server. If things work properly, the server should see it as failed and turn it back on within a few seconds.&lt;br /&gt;
&lt;br /&gt;
For this test, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, click on the &amp;quot;Start&amp;quot; icon and then click on &#039;&#039;Shut down&#039;&#039;. We will watch the system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as that is the node hosting the server.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: device vnet1 left promiscuous mode&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: Deleting interface #19 vnet1, fe80::fc54:ff:fe68:9bfd#123, interface stats: received=0, sent=0, dropped=0, active_time=99 secs&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:23 an-c05n01 rgmanager[2770]: status on vm &amp;quot;vm03-win7&amp;quot; returned 1 (generic error)&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Stopping service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 is recovering&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Recovering failed service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: device vnet1 entered promiscuous mode&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
Dec  5 02:10:25 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: Listen normally on 20 vnet1 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:39 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Above we see the hypervisor report that the server shut down at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:17&amp;lt;/span&amp;gt;. The message &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Deleting interface #19 vnet1...&amp;lt;/span&amp;gt;&amp;quot; is the virtual network cable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; being deleted because the server it was &amp;quot;plugged into&amp;quot; was no longer running.&lt;br /&gt;
&lt;br /&gt;
Six seconds later, at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:23&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; realized that the server had failed. If you had been watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, you would have seen the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; server enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failed&amp;lt;/span&amp;gt; state. Moments later, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; began recovering the server by first disabling it, then starting it back up.&lt;br /&gt;
&lt;br /&gt;
Two seconds after that, eight seconds after the unexpected shut down, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; was recovered and running again. Three seconds later, a new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; was created, reconnecting the server to the network. A this point, recovery is complete!&lt;br /&gt;
&lt;br /&gt;
Probably the easiest test so far. Of course, you will want to repeat this test for all of your servers.&lt;br /&gt;
&lt;br /&gt;
== Crashing Nodes; The Ultimate Test ==&lt;br /&gt;
&lt;br /&gt;
Finally, we&#039;ve reaches the ultimate test.&lt;br /&gt;
&lt;br /&gt;
Most people first look at high-availability to protect against crashed bare-iron servers. As we&#039;ve seen, there are many other single-points of failure that we had to address and which we&#039;ve already tested.&lt;br /&gt;
&lt;br /&gt;
In this test, we&#039;re going to have all services and servers running. &lt;br /&gt;
&lt;br /&gt;
We will first crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; by sending a &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; character to the &amp;quot;magic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Magic_SysRq_key SysRq Key]&amp;lt;/span&amp;gt;, as we did when we first tested our fencing configuration. This will cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to instantly [http://en.wikipedia.org/wiki/Kernel_panic kernel panic], crashing the node and halting all the servers running on it. This will simulate the harshest software crash possible on a node.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve recovered from that, we will crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; by cutting the power to it. This will simulate a total destruction of a node. As we saw in our early fence testing, this will cause the [[IPMI]] [[BMC]] under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to also fail, forcing the surviving node to fall back to the [[PDU]] based backup fence method.&lt;br /&gt;
&lt;br /&gt;
These tests will also ensure that your &#039;&#039;Anvil!&#039;&#039; does not suffer from a [[boot storm]] when all of the servers from either node reboot at the same time during recovery. This is a very, very important aspect of this test. Should the servers start, but fail to finish booting and become unresponsive, it is likely that your storage was not fast enough to handle the sudden high read load placed on them during recovery. As bad as this is, it is much better to find out now, &#039;&#039;&#039;before&#039;&#039;&#039; going into production.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=&#039;&#039;Virtual Machine Manager&#039;&#039; will appear to hang when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; until the connection is determined to have failed. To watch the recovery of the servers on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in real time, please disconnect from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.}}&lt;br /&gt;
&lt;br /&gt;
Once we crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we should see the following sequence of events:&lt;br /&gt;
&lt;br /&gt;
* Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will declare &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost and will fence it.&lt;br /&gt;
* An alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will arrive indicating the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All servers that had been running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will boot on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Additional alerts will arrive as the servers are recovered.&lt;br /&gt;
* Within five or ten minutes, we will get an alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; saying that the alert system has started, indicating the node is back.&lt;br /&gt;
&lt;br /&gt;
Before we do this, lets see what is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 11:55:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So this test is going to crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. This is the majority of our servers, so this recovery will tell us if we&#039;re going to have a boot storm or not. If all of them boot without trouble, we will know that our storage is likely fast enough.&lt;br /&gt;
&lt;br /&gt;
Be sure to log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system logs before proceeding.&lt;br /&gt;
&lt;br /&gt;
Ok, let&#039;s do this!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing returned, it&#039;s dead&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 corosync[2546]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 fenced[2613]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fenced[2613]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fence_node[2294]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: new current UUID AC7D34993319CF07:96939998C25B00D5:C667A4D09ADAF91B:C666A4D09ADAF91B&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:06 an-c05n02 rgmanager[2785]: Marking service:storage_n01 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 fence_node[2325]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: new current UUID 20CEE1AD5C066F57:BF89350BA62F87D1:EAA52C899C7C1F8D:EAA42C899C7C1F8D&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Looking at journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replaying journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replayed 259 of 476 blocks&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Found 5 revoke tags&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Journal replayed in 1s&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Done&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm01-win2008 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm03-win7 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm04-win8 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: device vnet3 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm07-rhel6 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm08-sles11 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet4 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 rgmanager[2785]: Service vm:vm01-win2008 started&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 rgmanager[2785]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm07-rhel6 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm04-win8 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm08-sles11 started&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 14 vnet3 fe80::fc54:ff:fe8e:6732 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 15 vnet5 fe80::fc54:ff:fe58:6a9 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 16 vnet6 fe80::fc54:ff:fe8a:6c52 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 17 vnet4 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 18 vnet7 fe80::fc54:ff:fed5:494c UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: peers refreshed&lt;br /&gt;
Dec  5 12:02:19 an-c05n02 kernel: kvm: 3933: cpu0 disabled perfctr wrmsr: 0xc1 data 0xabcd&lt;br /&gt;
Dec  5 12:02:22 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that, in this case, DRBD caught the failure slightly faster than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; did. It initiated a fence via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. Next we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; also call a fence, which succeeded on first try. Shortly after, DRBD recognized the fence succeeded as well. &lt;br /&gt;
&lt;br /&gt;
With the fence actions succeeded, we see DRBD mark the lost resources as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Outdated&amp;lt;/span&amp;gt;, GFS2 reaps lost locks and cleans up the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; filesystem. We also see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; mark &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage as disabled and then begin recovery of the five lost servers. Once they&#039;re booted, the last recovery step is &amp;quot;plugging them in&amp;quot; to the bridge.&lt;br /&gt;
&lt;br /&gt;
Lets look at the alerts we received.&lt;br /&gt;
&lt;br /&gt;
The alert system checks for state changes every 30 seconds. So depending on when the loop fires during the failure and recovery process, you may get a couple alerts. That is what happened in my case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n01.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local, rgmanager	-&amp;gt; Online, Local&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
30 seconds later, the next alert arrives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local	-&amp;gt; Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n01; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service storage_n01; State change!&lt;br /&gt;
  --	-&amp;gt; stopped&lt;br /&gt;
  --	-&amp;gt; (an-c05n01.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm03-win7; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm04-win8; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm07-rhel6; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm08-sles11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first email shows the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. The second email shows the recovery of all the servers. The astute reader will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; showed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. &lt;br /&gt;
&lt;br /&gt;
This is because there is a time between node loss and fence complete where [[DLM]] stops giving out locks. As we mentioned, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; all require DLM locks in order to work. So during a pending fence, these programs will appear to hang, which is by design. Once the fence action succeeds, normal operation resumes. In this case, we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; returned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in the second email alert.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 12:37:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at the timeline, we see that the fault was detected almost immediately at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:01:27&amp;lt;/span&amp;gt;. Recovery is completed at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:02:24&amp;lt;/span&amp;gt;. The total recovery time was 57 seconds.&lt;br /&gt;
&lt;br /&gt;
Not too shabby!&lt;br /&gt;
&lt;br /&gt;
=== Degraded Mode Load Testing ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Load-testing your &#039;&#039;Anvil!&#039;&#039; in a degraded state is just as critical as anything else we&#039;ve done thus far!}}&lt;br /&gt;
&lt;br /&gt;
It is very important that you ensure all of your servers can run well at full load on a single node. All of our work until now is useless if your servers grind during a degraded state.&lt;br /&gt;
&lt;br /&gt;
The two biggest concerns are CPU and storage.&lt;br /&gt;
&lt;br /&gt;
Please be sure to test, as long as needed, all of your applications running at full speed, both CPU and storage. If those tests pass, it&#039;s a good idea to then run synthetic benchmarks to find out just how much load your servers can take on the one node before performance degrades. This will be very useful for predicting when additional resource must be added as you grow.&lt;br /&gt;
&lt;br /&gt;
The actual methods used in this step are dependent entirely on your setup, so no further discussion can be had here.&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; recovers from the fence, it will send out the &amp;quot;I&#039;ve started!&amp;quot; alerts. There might be two emails, depending on the when the alert system started. That was the case in this test. The first alert came up before the bond devices &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; expired. Once that delay passed, a second alert was triggered showing the backup interfaces coming online.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 71 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4077 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      37 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 120 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6600 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 6.60 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 120 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 35        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6600      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4500      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 120.0 Volts -&amp;gt; UPS -&amp;gt; 120.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bond bond0 (Back-Channel Network); Second slave eth3&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond1 (Storage Network); Second slave eth4&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond2 (Internet-Facing Network); Second slave eth5&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lets check the state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 13:04:05 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything looks good, so lets rejoin &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for the DRBD resource to both be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    71.2%            (176592/607108)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   Connected   Primary/Primary  UpToDate/UpToDate      C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a bit...&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to start live-migrating the five servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back to normal.&lt;br /&gt;
&lt;br /&gt;
You should see numerous alert emails showing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; rejoining the cluster and the servers moving back.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Last test!&lt;br /&gt;
&lt;br /&gt;
As mentioned, we&#039;re going to cut the power to this node. We could just pull the power cables out and that would be perfectly fine. Downside to that is that it requires getting up, and who wants to do that?&lt;br /&gt;
&lt;br /&gt;
So we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to call each PDU and turn off outlet #2, which powers &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we saw in our initial round of fence testing, the initial fence attempt using [[IPMI]] will fail. Then the PDUs should be called and the outlets we turned off will be verified as off, then turned back on. &lt;br /&gt;
&lt;br /&gt;
If your server is set to boot when power is restored, or if you have it set to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Last State&amp;lt;/span&amp;gt;&amp;quot;, the server should boot automatically. If it stays off, simply call an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt; action against it using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;. It will be great practice!&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s watch the logs, kill the power, and look at the email alerts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An alert!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Warning! - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN1 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6360 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN1 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN2 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6480 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN2 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;Power Unit&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; ok, 0x02&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x02	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is because we took our time killing the second power supply. The node stayed up long enough for a scan to run and it saw all power lost to its primary PSU, so its fans have died as well as the power itself vanishing. If you&#039;re in earshot on the node, you can probably hear an audible alarm, too.&lt;br /&gt;
&lt;br /&gt;
Lets finish the job.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p02 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:03 an-c05n01 corosync[27890]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 fenced[27962]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 fence_node[19868]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: new current UUID 982B45395AF5322D:AC7D34993319CF07:96949998C25B00D5:96939998C25B00D5&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 fence_node[19898]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: new current UUID 46F3B4E245FCFB01:20CEE1AD5C066F57:BF8A350BA62F87D1:BF89350BA62F87D1&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:27 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replaying journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replayed 3 of 5 blocks&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Found 12 revoke tags&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Journal replayed in 1s&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:libvirtd_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Taking over service vm:vm02-win2012 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm05-freebsd9 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm06-solaris11 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Service vm:vm02-win2012 started&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 rgmanager[28154]: Service vm:vm06-solaris11 started&lt;br /&gt;
Dec  5 18:38:31 an-c05n01 rgmanager[28154]: Service vm:vm05-freebsd9 started&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 16 vnet6 fe80::fc54:ff:feb0:6caa UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 17 vnet7 fe80::fc54:ff:fe29:383b UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 18 vnet5 fe80::fc54:ff:fe5e:291c UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: peers refreshed&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:45 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the log entries are almost the same as we saw when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; was crashed. The main difference is that the first fence attempt failed, as expected.&lt;br /&gt;
&lt;br /&gt;
Lets look at the timeline;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Event&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:02&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD detects the failure and initiates a fence.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:03&amp;lt;/span&amp;gt;&lt;br /&gt;
|Corosync detects the failure, reforms the cluster. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[DLM]] blocks.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:22&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD-called fence succeeds. We do not see the failed IPMI attempt in the log.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:26&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; initiated [[IPMI]] call fails, the [[PDU]]-based fence succeeds.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:27&amp;lt;/span&amp;gt;&lt;br /&gt;
|GFS2 cleans up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:28&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; begins recovery, boots lost servers.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:44&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; interfaces link the recovered servers to the bridge. Recovery is complete.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this case, recovery took 42 seconds, actually faster than the recovery of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This shows the difference in timings to detect losses. Normally, this is a little slower because of the time taken to declare the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPMI&amp;lt;/span&amp;gt; fence method &amp;quot;failed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lets look again at the alerts from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; triggered by the failure of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Half a minute later;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike last time, we didn&#039;t see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. This is because the fence completed, so &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; didn&#039;t block when the monitoring system checked it. Half a minute later, the servers were already recovered so the alert system saw them move rather than recover.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that the servers are indeed back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:56:04 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; boots up, we&#039;ll get the usual &amp;quot;I&#039;m alive!&amp;quot; alert.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 65 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4052 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      41 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 190 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 27        |&lt;br /&gt;
| CPU1           | ok        | 31        |&lt;br /&gt;
| CPU2           | ok        | 36        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4920      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 5100      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN5 SYS       | ok        | 5160      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     33.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s log in and double check the state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:46:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected. Time to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Watch the status of the drbd resources and wait until both are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    36.7%            (391292/612720)K&lt;br /&gt;
...    sync&#039;ed:    7.1%             (653544/699704)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a few...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready. &lt;br /&gt;
&lt;br /&gt;
Verify everything with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
Ready to live-migrate the servers back now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is beautiful.&lt;br /&gt;
&lt;br /&gt;
== Done and Done! ==&lt;br /&gt;
&lt;br /&gt;
That, ladies and gentlemen, is all she wrote!&lt;br /&gt;
&lt;br /&gt;
You should now be safely ready to take your &#039;&#039;Anvil!&#039;&#039; into production at this stage.&lt;br /&gt;
&lt;br /&gt;
Happy Clustering!&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Here are some common problems you might run into.&lt;br /&gt;
&lt;br /&gt;
== SELinux Related Problems ==&lt;br /&gt;
&lt;br /&gt;
SELinux is a double-edged sword. It can certainly protect you, and it is worth having, but it can cut you, too. Here we cover a couple common issues.&lt;br /&gt;
&lt;br /&gt;
=== Password-less SSH doesn&#039;t work, but ~/.ssh/authorized_keys is fine ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve double-checked that you&#039;ve copied your public keys into a target node or server&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; file, it could be that the file&#039;s context is not correct. To check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how the context is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt;? That should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. So we need to update the context now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/authorized_keys&lt;br /&gt;
restorecon -r /root/.ssh/authorized_keys&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to log in to the target machine without a password.&lt;br /&gt;
&lt;br /&gt;
=== Live-Migration fails with &#039;[vm] error: Unable to read from monitor: Connection reset by peer&#039; ===&lt;br /&gt;
&lt;br /&gt;
When trying to migrate a server using the [[AN!CDB|dashboard]], you will see an error like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm01-win2008 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; you will see errors like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8474]: [vm] Migrate vm01-win2008 to an-c05n02.alteeve.ca failed:&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8496]: [vm] error: Unable to read from monitor: Connection reset by peer&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: migrate on vm &amp;quot;vm01-win2008&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: Migration of vm:vm01-win2008 to an-c05n02.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can happen for two reasons;&lt;br /&gt;
&lt;br /&gt;
# You forgot to [[#Populate_known_hosts|populate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt;]].&lt;br /&gt;
# The context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt; is not correct.&lt;br /&gt;
&lt;br /&gt;
It is usually the second case, so that is what we will address here.&lt;br /&gt;
&lt;br /&gt;
Check to see what context is currently set for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The context on this file needs to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. To change it, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts &lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to live-migrate your servers to the node.&lt;br /&gt;
&lt;br /&gt;
=== Attempting to Live Migrate Fails with &#039;Host key verification failed.&#039; ===&lt;br /&gt;
&lt;br /&gt;
Attempting to Live-Migrate a server from one node to another fails with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the system log, we see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migrating vm:vm02-win2008r2 to an-c05n01.alteeve.ca&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10618]: [vm] Migrate vm02-win2008r2 to an-c05n01.alteeve.ca failed:&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10640]: [vm] error: Cannot recv data: Host key verification failed.: Connection reset by peer&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: migrate on vm &amp;quot;vm02-win2008r2&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migration of vm:vm02-win2008r2 to an-c05n01.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has two causes:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[AN!Cluster_Tutorial_2#Populate_known_hosts|/root/.ssh/known_hosts]]&amp;lt;/span class=&amp;quot;code&amp;quot;&amp;gt; isn&#039;t populated.&lt;br /&gt;
# The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[selinux]]&amp;lt;/span&amp;gt; context is not correct.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve confirmed that your &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file is correct, then you can verify you&#039;ve hit an SELinux issue by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 0&amp;lt;/span&amp;gt; on both nodes and trying again. If the migration works, you have an SELinux issue. Re-enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 1&amp;lt;/span&amp;gt; and we&#039;ll fix it.&lt;br /&gt;
&lt;br /&gt;
If we look at the current context:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:admin_home_t:s0 id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We see that it is currently &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;, but &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; is fine. We want all of them to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;, so we&#039;ll have to fix it.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Check both nodes! If one node has a bad context, it&#039;s likely the other node is bad, too. Both nodes will need to be fixed for reliable migration.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa.pub &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa.pub &lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:ssh_home_t:s0  id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:ssh_home_t:s0  id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can try migrating again, and this time it should work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed!&lt;br /&gt;
&lt;br /&gt;
== Other Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These tutorials are not directly related to this one, but might be of use to some.&lt;br /&gt;
&lt;br /&gt;
* [[Anvil! Tutorial 2 - Growing Storage]]&lt;br /&gt;
* [[Configuring Brocade Switches]]&lt;br /&gt;
* [[Anvil! m2 Tutorial]]&lt;br /&gt;
* [[Configuring Network Boot on Fujitsu Primergy]]&lt;br /&gt;
* [[Configuring Hardware RAID Arrays on Fujitsu Primergy]]&lt;br /&gt;
* [[Encrypted Arrays with LSI SafeStore]]&lt;br /&gt;
* [[Configuring an APC AP7900]]&lt;br /&gt;
* [[Configuring APC SmartUPS with AP7930 Network Cards]]&lt;br /&gt;
* [[Anvil! m2 Tutorial - Installing RHEL/Centos]]&lt;br /&gt;
&lt;br /&gt;
== Older Issues From Previous Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These links have older troubleshooting issues that probably aren&#039;t needed anymore, but you never know.&lt;br /&gt;
&lt;br /&gt;
* [[Managing Drive Failures with AN!CDB]]&lt;br /&gt;
* [[2-Node Red Hat KVM Cluster Tutorial - Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
{{footer}}&lt;/div&gt;</summary>
		<author><name>Misko</name></author>
	</entry>
	<entry>
		<id>https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6584</id>
		<title>AN!Cluster Tutorial 2</title>
		<link rel="alternate" type="text/html" href="https://alteeve.com/w/index.php?title=AN!Cluster_Tutorial_2&amp;diff=6584"/>
		<updated>2015-01-05T20:28:34Z</updated>

		<summary type="html">&lt;p&gt;Misko: /* Initialize our DRBD Resource for use as LVM PVs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{howto_header}}&lt;br /&gt;
&lt;br /&gt;
[[image:RN3-m2_01.jpg|thumb|right|400px|A typical &#039;&#039;Anvil!&#039;&#039; build-out]]&lt;br /&gt;
&lt;br /&gt;
This paper has one goal:&lt;br /&gt;
&lt;br /&gt;
* Create an easy to use, fully redundant platform for virtual servers.&lt;br /&gt;
&lt;br /&gt;
Oh, and do have fun!&lt;br /&gt;
&lt;br /&gt;
= What&#039;s New? =&lt;br /&gt;
&lt;br /&gt;
In the last two years, we&#039;ve learned a lot about how to make an even more solid high-availability platform. We&#039;ve created tools to make monitoring and management of the virtual servers and nodes trivially easy. This updated release of our [[2-Node Red Hat KVM Cluster Tutorial|tutorial]] brings these advances to you!&lt;br /&gt;
&lt;br /&gt;
* Many refinements to the cluster stack that protect against corner cases seen over the last two years.&lt;br /&gt;
* Configuration naming convention changes to support the new [[AN!CDB]] dashboard.&lt;br /&gt;
* Addition of the [[AN!CM]] monitoring and alert system.&lt;br /&gt;
* Security improved; [[selinux]] and [[iptables]] now enabled and used.&lt;br /&gt;
&lt;br /&gt;
== A Note on Terminology ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use the following terms:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Anvil!&#039;&#039;: This is our name for the HA platform as a whole.&lt;br /&gt;
* &#039;&#039;Nodes&#039;&#039;: The physical hardware servers used as members in the cluster and which host the virtual servers.&lt;br /&gt;
* &#039;&#039;Servers&#039;&#039;: The virtual servers themselves. &lt;br /&gt;
* &#039;&#039;Compute Pack&#039;&#039;: This describes a pair of nodes that work together to power highly-available servers.&lt;br /&gt;
* &#039;&#039;Foundation Pack&#039;&#039;: This describes the switches, [[PDU]]s and [[UPS]]es used to power and connect the nodes.&lt;br /&gt;
* &#039;&#039;Monitor Pack&#039;&#039;: This describes the equipment used for the [[AN!CDB]] management dashboard.&lt;br /&gt;
&lt;br /&gt;
== Why Should I Follow This (Lengthy) Tutorial? ==&lt;br /&gt;
&lt;br /&gt;
Following this tutorial is not the lightest undertaking. It is designed to teach you all the inner details of building an HA platform for virtual servers. When finished, you will have a detailed and deep understanding of what it takes to build a fully redundant, mostly fault-tolerant high-availability platform. Though lengthy, it is very worthwhile if you want to understand high-availability.&lt;br /&gt;
&lt;br /&gt;
In either case, when finished, you will have the following benefits:&lt;br /&gt;
* Totally open source. Everything. This guide and all software used is open!&lt;br /&gt;
* You can host servers running almost any operating system. &lt;br /&gt;
* The HA platform requires no access to the servers and no special software needs to be installed. Your users may well never know that they&#039;re on a virtual machine.&lt;br /&gt;
* Your servers will operate just like servers installed on bare-iron machines. No special configuration is required. The high-availability components will be hidden behind the scenes.&lt;br /&gt;
* The worst failures of core components, such as a mainboard failure in a node, will cause an outage of roughly 30 to 90 seconds.&lt;br /&gt;
* Storage is synchronously replicated, guaranteeing that the total destruction of a node will cause no more data loss than a traditional server losing power.&lt;br /&gt;
* Storage is replicated without the need for a [[SAN]], reducing cost and providing total storage redundancy.&lt;br /&gt;
* Live-migration of servers enables upgrading and node maintenance without downtime. No more weekend maintenance!&lt;br /&gt;
* AN!CM; The &amp;quot;AN! Cluster Monitor&amp;quot;, watches the HA stack is continually. It sends alerts for many events from predictive hardware failure to simple live migration in a single application.&lt;br /&gt;
* Most failures are fault-tolerant and will cause no interruption in services at all.&lt;br /&gt;
&lt;br /&gt;
Ask your local VMware or Microsoft Hyper-V sales person what they&#039;d charge for all this. :)&lt;br /&gt;
&lt;br /&gt;
== High-Level Explanation of How HA Clustering Works ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is an adaptation of [http://lists.linux-ha.org/pipermail/linux-ha/2013-October/047633.html this post] to the [http://lists.linux-ha.org/mailman/listinfo/linux-ha Linux-HA] mailing list. If you find this section hard to follow, please don&#039;t worry. Each component is explained in the &amp;quot;Concepts&amp;quot; section below.}}&lt;br /&gt;
&lt;br /&gt;
Before digging into the details, it might help to start with a high-level explanation of how HA clustering works.&lt;br /&gt;
&lt;br /&gt;
[[Corosync]] uses the [[totem]] protocol for &amp;quot;heartbeat&amp;quot;-like monitoring of the other node&#039;s health. A token is passed around to each node, the node does some work (like acknowledge old messages, send new ones), and then it passes the token on to the next node. This goes around and around all the time. Should a node not pass its token on after a short time-out period, the token is declared lost, an error count goes up and a new token is sent. If too many tokens are lost in a row, the node is declared lost.&lt;br /&gt;
&lt;br /&gt;
Once the node is declared lost, the remaining nodes reform a new cluster. If enough nodes are left to form [[quorum]] (simple majority), then the new cluster will continue to provide services. In two-node clusters, like the ones we&#039;re building here, quorum is disabled so each node can work on its own.&lt;br /&gt;
&lt;br /&gt;
Corosync itself only cares about who is a cluster member and making sure all members get all [[CPG|messages]]. What happens after the cluster reforms is up to the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, and the resource group manager, [[rgmanager]].&lt;br /&gt;
&lt;br /&gt;
The first thing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; does after being notified that a node was lost is initiate a [[fence]] against the lost node. This is a process where the lost node is powered off by the healthy node (power fencing), or cut off from the network/storage (fabric fencing). In either case, the idea is to make sure that the lost node is in a known state. If this is skipped, the node could recover later and try to provide cluster services, not having realized that it was removed from the cluster. This could cause problems from confusing switches to corrupting data.&lt;br /&gt;
&lt;br /&gt;
When rgmanager is told that membership has changed because a node died, it looks to see what services might have been lost. Once it knows what was lost, it looks at the rules it&#039;s been given and decides what to do. These rules are defined in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|cluster.conf]]&#039;s&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element. We&#039;ll go into detail on this later.&lt;br /&gt;
&lt;br /&gt;
In two-node clusters, there is also a chance of a &amp;quot;split-brain&amp;quot;. Quorum has to be disabled, so it is possible for both nodes to think the other node is dead and both try to provide the same cluster services. By using fencing, after the nodes break from one another (which could happen with a network failure, for example), neither node will offer services until one of them has fenced the other. The faster node will win and the slower node will shut down (or be isolated). The survivor can then run services safely without risking a split-brain.&lt;br /&gt;
&lt;br /&gt;
Once the dead/slower node has been fenced, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; then decides what to do with the services that had been running on the lost node. Generally, this means restarting the services locally that had been running on the dead node. The details of this are decided by you when you configure the resources in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. As we will see with each node&#039;s local storage service, the service is not recovered but instead left stopped.&lt;br /&gt;
&lt;br /&gt;
= The Task Ahead =&lt;br /&gt;
&lt;br /&gt;
Before we start, let&#039;s take a few minutes to discuss clustering and its complexities.&lt;br /&gt;
&lt;br /&gt;
== A Note on Patience ==&lt;br /&gt;
&lt;br /&gt;
When someone wants to become a pilot, they can&#039;t jump into a plane and try to take off. It&#039;s not that flying is inherently hard, but it requires a foundation of understanding. Clustering is the same in this regard; there are many different pieces that have to work together just to get off the ground. &lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;must&#039;&#039;&#039; have patience.&lt;br /&gt;
&lt;br /&gt;
Like a pilot on their first flight, seeing a cluster come to life is a fantastic experience. Don&#039;t rush it! Do your homework and you&#039;ll be on your way before you know it.&lt;br /&gt;
&lt;br /&gt;
Coming back to earth:&lt;br /&gt;
&lt;br /&gt;
Many technologies can be learned by creating a very simple base and then building on it. The classic &amp;quot;Hello, World!&amp;quot; script created when first learning a programming language is an example of this. Unfortunately, there is no real analogue to this in clustering. Even the most basic cluster requires several pieces be in place and working well together. If you try to rush, by ignoring pieces you think are not important, you will almost certainly waste time. A good example is setting aside [[fencing]], thinking that your test cluster&#039;s data isn&#039;t important. The cluster software has no concept of &amp;quot;test&amp;quot;. It treats everything as critical all the time and &#039;&#039;will&#039;&#039; shut down if anything goes wrong.&lt;br /&gt;
&lt;br /&gt;
Take your time, work through these steps, and you will have the foundation cluster sooner than you realize. Clustering is fun &#039;&#039;&#039;because&#039;&#039;&#039; it is a challenge.&lt;br /&gt;
&lt;br /&gt;
== Technologies We Will Use ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Red Hat Enterprise Linux 6&#039;&#039; ([[EL6]]); You can use  a derivative like [[CentOS]] v6. Specifically, we&#039;re using 6.5.&lt;br /&gt;
* &#039;&#039;Red Hat Cluster Services&#039;&#039; &amp;quot;Stable&amp;quot; version 3. This describes the following core components:&lt;br /&gt;
** &#039;&#039;Corosync&#039;&#039;; Provides cluster communications using the [[totem]] protocol.&lt;br /&gt;
** &#039;&#039;Cluster Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[cman]]&amp;lt;/span&amp;gt;); Manages the starting, stopping and managing of the cluster.&lt;br /&gt;
** &#039;&#039;Resource Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[rgmanager]]&amp;lt;/span&amp;gt;); Manages cluster resources and services. Handles service recovery during failures.&lt;br /&gt;
** &#039;&#039;Clustered Logical Volume Manager&#039;&#039; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[clvm]]&amp;lt;/span&amp;gt;); Cluster-aware (disk) volume manager. Backs [[GFS2]] [[filesystem]]s and [[KVM]] virtual machines.&lt;br /&gt;
** &#039;&#039;Global File System&#039;&#039; version 2 (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[gfs2]]&amp;lt;/span&amp;gt;); Cluster-aware, concurrently mountable file system.&lt;br /&gt;
* &#039;&#039;Distributed Redundant Block Device&#039;&#039; ([[DRBD]]); Keeps shared data synchronized across cluster nodes.&lt;br /&gt;
* &#039;&#039;KVM&#039;&#039;; [[Hypervisor]] that controls and supports virtual machines.&lt;br /&gt;
* Alteeve&#039;s Niche! Cluster Dashboard and Cluster Monitor&lt;br /&gt;
&lt;br /&gt;
== A Note on Hardware ==&lt;br /&gt;
&lt;br /&gt;
[[Image:RX300-S7_close-up_01.jpg|thumb|right|500px|RX300 S7]]&lt;br /&gt;
&lt;br /&gt;
Another new change is that Alteeve&#039;s Niche!, after years of experimenting with various hardware, has partnered with [[Fujitsu]]. We chose them because of the unparalleled quality of their equipment. &lt;br /&gt;
&lt;br /&gt;
This tutorial can be used on any manufacturer&#039;s hardware, provided it meets the minimum requirements listed below. That said, we strongly recommend readers give Fujitsu&#039;s [http://www.fujitsu.com/fts/products/computing/servers/primergy/rack/ RX-line] of servers a close look. We do not get a discount for this recommendation, we genuinely love the quality of their gear. The only technical argument for using Fujitsu hardware is that we do all our cluster stack monitoring software development on Fujitsu RX200 and RX300 servers, so we can say with confidence that the AN! software components will work well on their kit.&lt;br /&gt;
&lt;br /&gt;
If you use any other hardware vendor and run into any trouble, please don&#039;t hesitate to [[Support|contact us]]. We want to make sure that our HA stack works on as many systems as possible and will be happy to help out. Of course, all Alteeve code is open source, so [https://github.com/digimer/an-cdb contributions] are always welcome, too!&lt;br /&gt;
&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
&lt;br /&gt;
The goal of this tutorial is to help you build an HA platform with zero single points of failure. In order to do this, certain minimum technical requirements must be met.&lt;br /&gt;
&lt;br /&gt;
Bare minimum requirements:&lt;br /&gt;
&lt;br /&gt;
* Two servers with the following;&lt;br /&gt;
** A CPU with [https://en.wikipedia.org/wiki/Hardware-assisted_virtualization hardware-accelerated virtualization]&lt;br /&gt;
** Redundant power supplies&lt;br /&gt;
** [[IPMI]] or vendor-specific [https://en.wikipedia.org/wiki/Integrated_Remote_Management_Controller out-of-band management], like Fujitsu&#039;s iRMC, HP&#039;s iLO, Dell&#039;s iDRAC, etc&lt;br /&gt;
** Six network interfaces, 1 [[Gbit]] or faster (yes, six!)&lt;br /&gt;
** 2 [[GiB]] of RAM and 44.5 GiB of storage for the host operating system, plus sufficient RAM and storage for your VMs&lt;br /&gt;
* Two switched [[PDU]]s; APC-brand recommended but any with a supported [[fence agent]] is fine&lt;br /&gt;
* Two network switches&lt;br /&gt;
&lt;br /&gt;
== Recommended Hardware; A Little More Detail ==&lt;br /&gt;
&lt;br /&gt;
The previous section covered the bare-minimum system requirements for following this tutorial. If you are looking to build an &#039;&#039;Anvil!&#039;&#039; for production, we need to discuss important considerations for selecting hardware.&lt;br /&gt;
&lt;br /&gt;
=== The Most Important Consideration - Storage ===&lt;br /&gt;
&lt;br /&gt;
There is probably no single consideration more important than choosing the storage you will use.&lt;br /&gt;
&lt;br /&gt;
In our years of building &#039;&#039;Anvil!&#039;&#039; HA platforms, we&#039;ve found no single issue more important than storage latency. This is true for all virtualized environments, in fact.&lt;br /&gt;
&lt;br /&gt;
The problem is this:&lt;br /&gt;
&lt;br /&gt;
Multiple servers on shared storage can cause particularly random storage access. Traditional hard drives have disks with mechanical read/write heads on the ends of arms that sweep back and forth across the disk surfaces. These platters are broken up into &amp;quot;tracks&amp;quot; and each track is itself cut up into &amp;quot;sectors&amp;quot;. When a server needs to read or write data, the hard drive needs to sweep the arm over the track it wants and then wait there for the sector it wants to pass underneath.&lt;br /&gt;
&lt;br /&gt;
This time taken to get the read/write head onto the track and then wait for the sector to pass underneath is called &amp;quot;seek latency&amp;quot;. How long this latency actually is depends on a few things:&lt;br /&gt;
&lt;br /&gt;
* How fast are the platters rotating? The faster the platter speed, the less time it takes for a sector to pass under the read/write head.&lt;br /&gt;
* How fast the read/write arms can move and how far do they have to travel between tracks? Highly random read/write requests can cause a lot of head travel and increase seek time.&lt;br /&gt;
* How many read/write requests ([[IOPS]]) can your storage handle? If your storage can not process the incoming read/write requests fast enough, your storage can slow down or stall entirely.&lt;br /&gt;
&lt;br /&gt;
When many people think about hard drives, they generally worry about maximum write speeds. For environments with many virtual servers, this is actually far less important than it might seem. Reducing latency to ensure that read/write requests don&#039;t back up is far more important. This is measured as the storage&#039;s [[IOPS]] performance. If too many requests back up in the cache, storage performance can collapse or stall out entirely. &lt;br /&gt;
&lt;br /&gt;
This is particularly problematic when multiple servers try to boot at the same time. If, for example, a node with multiple servers dies, the surviving node will try to start the lost servers at nearly the same time. This causes a sudden dramatic rise in read requests and can cause all servers to hang entirely, a condition called a &amp;quot;boot storm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, this latency problem can be easily dealt with in one of three ways;&lt;br /&gt;
&lt;br /&gt;
# Use solid-state drives. These have no moving parts, so there is less penalty for highly random read/write requests.&lt;br /&gt;
# Use fast platter drives and proper [[RAID]] controllers with [[write-back]] caching.&lt;br /&gt;
# Isolate each server onto dedicated platter drives.&lt;br /&gt;
&lt;br /&gt;
Each of these solutions have benefits and downsides;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;amp;nbsp;&lt;br /&gt;
!Pro&lt;br /&gt;
!Con&lt;br /&gt;
|-&lt;br /&gt;
|Fast drives + [[Write-back caching]]&lt;br /&gt;
|15,000rpm SAS drives are extremely reliable and the high rotation speeds minimize latency caused by waiting for sectors to pass under the read/write heads. Using multiple drives in [[RAID]] [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_5|level 5]] or [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_6|level 6]] breaks up reads and writes into smaller pieces, allowing requests to be serviced quickly and to help keep the read/write buffer empty. Write-back caching allows RAM-like write speeds and the ability to re-order disk access to minimize head movement.&lt;br /&gt;
|The main con is the number of disks needed to get effective performance gains from [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|striping]]. Alteeve always uses a minimum of six disks, but many entry-level servers support a maximum of 4 drives. You need to account for the number of disks you plan to use when selecting your hardware.&lt;br /&gt;
|-&lt;br /&gt;
|SSDs&lt;br /&gt;
|They have no moving parts, so read and write requests do not have to wait for mechanical movements to happen, drastically reducing latency. The minimum number of drives for SSD-based configuration is two.&lt;br /&gt;
|Solid state drives use [[NAND]] flash, which can only be written to a finite number of times. All drives in our &#039;&#039;Anvil!&#039;&#039; will be written to roughly the same amount, so hitting this write-limit could mean that all drives in both nodes would fail at nearly the same time. Avoiding this requires careful monitoring of the drives and replacing them before their write limits are hit.&lt;br /&gt;
{{note|1=Enterprise grade SSDs are designed to handle highly random, multi-threaded workloads and come at a significant cost. Consumer-grade SSDs are designed principally for single threaded, large accesses and do not offer the same benefits.}}&lt;br /&gt;
|-&lt;br /&gt;
|Isolated Storage&lt;br /&gt;
|Dedicating hard drives to virtual servers avoids the highly random read/write issues found when multiple servers share the same storage. This allows for the safe use of cheap, inexpensive hard drives. This also means that dedicated hardware RAID controllers with battery-backed cache are not needed. This makes it possible to save a good amount of money in the hardware design.&lt;br /&gt;
|The obvious down-side to isolated storage is that you significantly limit the number of servers you can host on your &#039;&#039;Anvil!&#039;&#039;. If you only need to support one or two servers, this should not be an issue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last piece to consider is the interface of the drives used, be they SSDs or traditional HDDs. The two common interface types are [[SATA]] and [[SAS]]. &lt;br /&gt;
&lt;br /&gt;
* SATA HDD drives generally have a platter speed of 7,200rpm. The SATA interface has limited instruction set and provides minimal health reporting. These are &amp;quot;consumer&amp;quot; grade devices that are far less expensive, and far less reliable, than SAS drives.&lt;br /&gt;
* SAS drives are generally aimed at the enterprise environment and are built to much higher quality standards. SAS HDDs have rotational speeds of up to 15,000rpm and can handle far more read/write operations per second. Enterprise SSDs using the SAS interface are also much more reliable than their commercial counterpart. The main downside to SAS drives is their cost.  &lt;br /&gt;
&lt;br /&gt;
In all production environments, we strongly, strongly recommend SAS-connected drives. For non-production environments, SATA drives are fine.&lt;br /&gt;
&lt;br /&gt;
==== Extra Security - LSI SafeStore ====&lt;br /&gt;
&lt;br /&gt;
If security is a particular concern of yours, then you can look at using [https://en.wikipedia.org/wiki/Hardware-based_full_disk_encryption self-encrypting] hard drives along with LSI&#039;s [[LSI SafeStore|SafeStore]] option. An example hard drive, which we&#039;ve tested and validated, would be the Seagate [http://www.seagate.com/internal-hard-drives/enterprise-hard-drives/hdd/enterprise-performance-10K-hdd/ ST1800MM0038] drives. In general, if the drive advertises &amp;quot;[http://www.seagate.com/tech-insights/protect-data-with-seagate-secure-self-encrypting-drives-master-ti/ SED]&amp;quot; support, it should work fine.&lt;br /&gt;
&lt;br /&gt;
The provides the ability to:&lt;br /&gt;
* Encrypt all data with [https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES-256] grade encryption without a performance hit.&lt;br /&gt;
* Require a pass phrase on boot to decrypt the server&#039;s data.&lt;br /&gt;
* Protect the contents of the drives while &amp;quot;at rest&amp;quot; (ie: while being shipped somewhere).&lt;br /&gt;
* Execute a [https://github.com/digimer/striker/blob/master/tools/anvil-self-destruct self-destruct] sequence.&lt;br /&gt;
&lt;br /&gt;
Obviously, most users won&#039;t need this, but it might be useful to some users in sensitive environments like embassies in less than friendly host countries.&lt;br /&gt;
&lt;br /&gt;
=== RAM - Preparing for Degradation ===&lt;br /&gt;
&lt;br /&gt;
RAM is a far simpler topic than storage, thankfully. Here, all you need to do is add up how much RAM you plan to assign to servers, add at least 2 [[GiB]] for the host, and then install that much memory in both of your nodes. &lt;br /&gt;
&lt;br /&gt;
In production, there are two technologies you will want to consider;&lt;br /&gt;
&lt;br /&gt;
* [[ECC]], error-correcting code, provide the ability for RAM to recover from single-[[bit]] errors. If you are familiar with how [[TLUG_Talk:_Storage_Technologies_and_Theory#RAID|parity]] in RAID arrays work, ECC in RAM is the same idea. This is often included in server-class hardware by default. It is highly recommended.&lt;br /&gt;
* [http://www.fujitsu.com/global/services/computing/server/sparcenterprise/technology/availability/memory.html Memory Mirroring] is, continuing our storage comparison, [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] for RAM. All writes to memory go to two different chips. Should one fail, the contents of the RAM can still be read from the surviving module.&lt;br /&gt;
&lt;br /&gt;
=== Never Over-Provision! ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Over-provisioning&amp;quot;, also called &amp;quot;[https://en.wikipedia.org/wiki/Thin_provisioning thin provisioning]&amp;quot; is a concept made popular in many &amp;quot;cloud&amp;quot; technologies. It is a concept that has almost no place in HA environments.&lt;br /&gt;
&lt;br /&gt;
A common example is creating virtual disks of a given apparent size, but which only pull space from real storage as needed. So if you created a &amp;quot;thin&amp;quot; virtual disk that was 80 [[GiB]] large, but only 20 GiB worth of data was used, only 20 GiB from the real storage would be used. &lt;br /&gt;
&lt;br /&gt;
In essence; Over-provisioning is where you allocate more resources to servers than the nodes can actually provide, banking on the hopes that most servers will not use all of the resources allocated to them. The danger here, and the reason it has almost no place in HA, is that if the servers collectively use more resources than the nodes can provide, something is going to crash.&lt;br /&gt;
&lt;br /&gt;
=== CPU Cores - Possibly Acceptable Over-Provisioning ===&lt;br /&gt;
&lt;br /&gt;
Over provisioning of RAM and storage is never acceptable in an HA environment, as mentioned. Over-allocating CPU cores is possibly acceptable though.&lt;br /&gt;
&lt;br /&gt;
When selecting which CPUs to use in your nodes, the number of cores and the speed of the cores will determine how much computational horse-power you have to allocate to your servers. The main considerations are:&lt;br /&gt;
&lt;br /&gt;
* Core speed; Any given &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; can be processed by a single CPU core at a time. The faster the given core is, the faster it can process any given request. Many applications do not support [https://en.wikipedia.org/wiki/Thread_%28computing%29#Multithreading multithreading], meaning that the only way to improve performance is to use faster cores, not more cores.&lt;br /&gt;
* Core count; Some applications support breaking up jobs into many threads, and passing them to multiple CPU cores at the same time for simultaneous processing. This way, the application feels faster to users because each CPU has to do less work to get a job done. Another benefit of multiple cores is that if one application consumes the processing power of a single core, other cores remain available for other applications, preventing processor congestion.&lt;br /&gt;
&lt;br /&gt;
In processing, each CPU &amp;quot;[https://en.wikipedia.org/wiki/Multi-core_processor core]&amp;quot; can handle one program &amp;quot;[https://en.wikipedia.org/wiki/Thread_%28computing%29 thread]&amp;quot; at a time. Since the earliest days of [https://en.wikipedia.org/wiki/Multitasking multitasking], operating systems have been able to handle threads waiting for a CPU resource to free up. So the risk of over-provisioning CPUs is restricted to performance issues only.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re building an &#039;&#039;Anvil!&#039;&#039; to support multiple servers and it&#039;s important that, no matter how busy the other servers are, the performance of each server can not degrade, then you need to be sure you have as many real CPU cores as you plan to assign to servers.&lt;br /&gt;
&lt;br /&gt;
So for example, if you plan to have three servers and you plan to allocate each server four virtual CPU cores, you need a minimum of 13 real CPU cores (3 servers x 4 cores each plus at least one core for the node). In this scenario, you will want to choose servers with dual 8-core CPUs, for a total of 16 available real CPU cores. You may choose to buy two 6-core CPUs, for a total of 12 real cores, but you risk congestion still. If all three servers fully utilize their four cores at the same time, the host OS will be left with no available core for its software, which manages the HA stack.&lt;br /&gt;
&lt;br /&gt;
In many cases, however, risking a performance loss under periods of high CPU load is acceptable. In these cases, allocating more virtual cores than you have real cores is fine. Should the load of the servers climb to a point where all real cores are under 100% utilization, then some applications will slow down as they wait for their turn in the CPU.&lt;br /&gt;
&lt;br /&gt;
In the end, the decision whether to over-provision CPU cores or not, and if so by how much, is up to you, the reader. Remember to consider balancing out faster cores with the number of cores. If your expected load will be short bursts of computationally intense jobs, then few-but-faster cores may be the best solution.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Hyper-Threading ====&lt;br /&gt;
&lt;br /&gt;
Intel&#039;s [https://en.wikipedia.org/wiki/Hyper-threading hyper-threading] technology can make a CPU appear to the OS to have twice as many real cores than it actually has. For example, a CPU listed as &amp;quot;4c/8t&amp;quot; (four cores, eight threads) will appear to the node as an 8-core CPU. In fact, you only have four cores and the additional four cores are emulated attempts to make more efficient use of the processing of each core. &lt;br /&gt;
&lt;br /&gt;
Simply put, the idea behind this technology is to &amp;quot;slip in&amp;quot; a second thread when the CPU would otherwise be idle. For example, if the CPU core has to wait for memory to be fetched for the currently active thread, instead of sitting idle, a thread in the second core will be worked on. &lt;br /&gt;
&lt;br /&gt;
How much benefit this gives you in the real world is debatable and highly depended on your applications. For the purposes of HA, it&#039;s recommended to not count the &amp;quot;HT cores&amp;quot; as real cores. That is to say, when calculating load, treat &amp;quot;4c/8t&amp;quot; CPUs as a 4-core CPUs.&lt;br /&gt;
&lt;br /&gt;
=== Six Network Interfaces, Seriously? ===&lt;br /&gt;
&lt;br /&gt;
Yes, seriously.&lt;br /&gt;
&lt;br /&gt;
Obviously, you can put everything on a single network card and your HA software will work, but it would not be advised.&lt;br /&gt;
&lt;br /&gt;
We will go into the network configuration at length later on. For now, here&#039;s an overview:&lt;br /&gt;
&lt;br /&gt;
* Each network needs two links in order to be fault-tolerant. One link will go to the first network switch and the second link will go to the second network switch. This way, the failure of a network cable, port or switch will not interrupt traffic.&lt;br /&gt;
* There are three main networks in an &#039;&#039;Anvil!&#039;&#039;;&lt;br /&gt;
** Back-Channel Network; This is used by the cluster stack and is sensitive to latency. Delaying traffic on this network can cause the nodes to &amp;quot;partition&amp;quot;, breaking the cluster stack.&lt;br /&gt;
** Storage Network; All disk writes will travel over this network. As such, it is easy to saturate this network. Sharing this traffic with other services would mean that it&#039;s very possible to significantly impact network performance under high disk write loads. For this reason, it is isolated.&lt;br /&gt;
** Internet-Facing Network; This network carries traffic to and from your servers. By isolating this network, users of your servers will never experience performance loss during storage or cluster high loads. Likewise, if your users place a high load on this network, it will not impact the ability of the &#039;&#039;Anvil!&#039;&#039; to function properly. It also isolates untrusted network traffic.&lt;br /&gt;
&lt;br /&gt;
So, three networks, each using two links for redundancy, means that we need six network interfaces. It is strongly recommended that you use three separate dual-port network cards. Using a single network card, as we will discuss in detail later, leaves you vulnerable to losing entire networks should the controller fail.&lt;br /&gt;
&lt;br /&gt;
==== A Note on Dedicated IPMI Interfaces ====&lt;br /&gt;
&lt;br /&gt;
Some server manufacturers provide access to [[IPMI]] using the same physical interface as one of the on-board network cards. Usually these companies provide optional upgrades to break the IPMI connection out to a dedicated network connector.&lt;br /&gt;
&lt;br /&gt;
Whenever possible, it is recommended that you go with a dedicated IPMI connection.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve found that it rarely, if ever, is possible for a node to talk to its own network interface using a shared physical port. This is not strictly a problem, but it can certainly make testing and diagnostics easier when the node can ping and query its own IPMI interface over the network.&lt;br /&gt;
&lt;br /&gt;
=== Network Switches ===&lt;br /&gt;
&lt;br /&gt;
The ideal switches to use in HA clusters are [https://en.wikipedia.org/wiki/Stackable_switch stackable] and [https://en.wikipedia.org/wiki/Managed_switch managed] switches in pairs. At the very least, a pair of switches that support [https://en.wikipedia.org/wiki/Virtual_LAN VLANs] is recommended. None of this is strictly required, but here are the reasons they&#039;re recommended:&lt;br /&gt;
&lt;br /&gt;
* VLAN allows for totally isolating the [[BCN]], [[SN]] and [[IFN]] traffic. This adds security and reduces broadcast traffic.&lt;br /&gt;
* Managed switches provide a unified interface for configuring both switches at the same time. This drastically simplifies complex configurations, like setting up VLANs that span the physical switches.&lt;br /&gt;
* Stacking provides a link between the two switches that effectively makes them work like one. Generally, the bandwidth available in the stack cable is much higher than the bandwidth of individual ports. This provides a high-speed link for all three VLANs in one cable and it allows for multiple links to fail without risking performance degradation. We&#039;ll talk more about this later.&lt;br /&gt;
&lt;br /&gt;
Beyond these suggested features, there are a few other things to consider when choosing switches:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!Consideration&lt;br /&gt;
|-&lt;br /&gt;
|[https://en.wikipedia.org/wiki/Maximum_transmission_unit MTU] size&lt;br /&gt;
|&lt;br /&gt;
# The default packet size on a network is 1500 [[bytes]]. If you build your VLANs in software, you need to account for the extra size needed for the VLAN header. If your switch supports &amp;quot;[https://en.wikipedia.org/wiki/Jumbo_Frames Jumbo Frames]&amp;quot;, then there should be no problem. However, some cheap switches do not support jumbo frames, requiring you to reduce the MTU size value for the interfaces on your nodes.&lt;br /&gt;
# If you have particularly large chunks of data to transmit, you may want to enable the largest MTU possible. This maximum value is determined by the smallest MTU in your network equipment. If you have nice network cards that support traditional 9 [[KiB]] MTU, but you have a cheap switch that supports a small jumbo frame, say 4 KiB, your effective MTU is 4 [[KiB]].&lt;br /&gt;
|-&lt;br /&gt;
|Packets Per Second&lt;br /&gt;
|This is a measure of how many packets can be routed per second, and generally is a reflection of the switch&#039;s processing power and memory. Cheaper switches will not have the ability to route a high number of packets at the same time, potentially causing congestion.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multicast]] Groups&lt;br /&gt;
|Some fancy switches, like some Cisco hardware, don&#039;t maintain multicast groups persistently. The cluster software uses multicast for communication, so if your switch drops a multicast group, it will cause your cluster to partition. If you have a managed switch, ensure that persistent multicast groups are enabled. We&#039;ll talk more about this later.&lt;br /&gt;
|-&lt;br /&gt;
|Port speed and count versus Internal Fabric Bandwidth&lt;br /&gt;
|A switch that has, say, 48 [[Gbps]] ports may not be able to route 48 Gbps. This is a problem similar to over-provisioning we discussed above. If an inexpensive 48 port switch has an internal switch fabric of only 20 Gbps, then it can handle only up to 20 saturated ports at a time. Be sure to review the internal fabric capacity and make sure it&#039;s high enough to handle all connected interfaces running full speed. Note, of course, that only one link in a given [[network bonding|bond]] will be active at a time.&lt;br /&gt;
|-&lt;br /&gt;
|Uplink speed&lt;br /&gt;
|If you have a gigabit switch and you simply link the ports between the two switches, the link speed will be limited to 1 gigabit. Normally, all traffic will be kept on one switch, so this is fine. If a single link fails over to the backup switch, then its traffic will bounce up via the uplink cable to the main switch at full speed. However, if a second link fails, both will be sharing the single gigabit uplink, so there is a risk of congestion on the link. If you can&#039;t get stacked switches, which generally have 10 Gbps speeds or higher, then look for switches with 10 Gbps dedicated uplink ports and use those for uplinks.&lt;br /&gt;
|-&lt;br /&gt;
|Uplinks and VLANs&lt;br /&gt;
|When using normal ports for uplinks with VLANs defined in the switch, each uplink port will be restricted to the VLAN it is a member of. In this case, you will need one uplink cable per VLAN.&lt;br /&gt;
|-&lt;br /&gt;
|Port [https://en.wikipedia.org/wiki/Link_aggregation Trunking]&lt;br /&gt;
|If your existing network supports it, choosing a switch with port trunking provides a backup link from the foundation pack switches to the main network. This extends the network redundancy out to the rest of your network. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are numerous other valid considerations when choosing network switches for your &#039;&#039;Anvil!&#039;&#039;. These are the most prescient considerations, though.&lt;br /&gt;
&lt;br /&gt;
=== Why Switched PDUs? ===&lt;br /&gt;
&lt;br /&gt;
We will discuss this in detail later on, but in short, when a node stops responding, we can not simply assume that it is dead. To do so would be to risk a &amp;quot;[[split-brain]]&amp;quot; condition which can lead to data divergence, data loss and data corruption.&lt;br /&gt;
&lt;br /&gt;
To deal with this, we need a mechanism of putting a node that is in an unknown state into a known state. A process called &amp;quot;[[fencing]]&amp;quot;. Many people who build HA platforms use the [[IPMI]] interface for this purpose, as will we. The idea here is that, when a node stops responding, the surviving node connects to the lost node&#039;s [[IPMI]] interface and forces the machine to power off. The IPMI [[BMC]] is, effectively, a little computer inside the main computer, so it will work regardless of what state the node itself is in.&lt;br /&gt;
&lt;br /&gt;
Once the node has been confirmed to be off, the services that had been running on it can be restarted on the remaining good node, safe in knowing that the lost peer is not also hosting these services. In our case, these &amp;quot;services&amp;quot; are the shared storage and the virtual servers.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this though. Actually, two.&lt;br /&gt;
&lt;br /&gt;
# The IPMI draws its power from the same power source as the server itself. If the host node loses power entirely, IPMI goes down with the host.&lt;br /&gt;
# The IPMI BMC has a single network interface and it is a single device. &lt;br /&gt;
&lt;br /&gt;
If we relied on IPMI-based fencing alone, we&#039;d have a single point of failure. If the surviving node can not put the lost node into a known state, it will intentionally hang. The logic being that a hung cluster is better than risking corruption or a [[split-brain]]. This means that, with IPMI-based fencing alone, the loss of power to a single node would not be automatically recoverable.&lt;br /&gt;
&lt;br /&gt;
That just will not do!&lt;br /&gt;
&lt;br /&gt;
To make fencing redundant, we will use switched [[PDU]]s. Think of these as network-connected power bars.&lt;br /&gt;
&lt;br /&gt;
Imagine now that one of the nodes blew itself up. The surviving node would try to connect to its IPMI interface and, of course, get no response. Then it would log into both PDUs (one behind either side of the redundant power supplies) and cut the power going to the node. By doing this, we now have a way of putting a lost node into a known state.&lt;br /&gt;
&lt;br /&gt;
So now, no matter how badly things go wrong, we can always recover!&lt;br /&gt;
&lt;br /&gt;
=== Network Managed UPSes Are Worth It ===&lt;br /&gt;
&lt;br /&gt;
We have found that a surprising number of issues that affect service availability are power related. A network-connected smart UPS allows you to monitor the power coming from the building mains. Thanks to this, we&#039;ve been able to detect far more than simple &amp;quot;lost power&amp;quot; events. We&#039;ve been able to detect failing transformers and regulators, over and under voltage events and so on. Events that, if caught ahead of time, avoid full power outages. It also protects the rest of your gear that isn&#039;t behind a UPS.&lt;br /&gt;
&lt;br /&gt;
So strictly speaking, you don&#039;t need network managed UPSes. However, we have found them to be [http://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427ebgdg6ijlui worth their weight in gold]. We will, of course, be using them in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Dashboard Servers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; will be managed by [[AN!CDB - Cluster Dashboard]], a small little dedicated server. This can be a virtual machine on a laptop or desktop, or a dedicated little server. All that matters is that it can run [[RHEL]] or [[CentOS]] version 6 with a minimal desktop.&lt;br /&gt;
&lt;br /&gt;
Normally, we setup a couple of [http://www.asus.com/ca-en/Eee_Box_PCs/EeeBox_PC_EB1033 ASUS EeeBox] machines, for redundancy of course, hanging off the back of a monitor. Users can connect to the dashboard using a browser from any device and control the servers and nodes easily from it. It also provides [https://en.wikipedia.org/wiki/KVM_switch KVM-like] access to the servers on the &#039;&#039;Anvil!&#039;&#039;, allowing them to work on the servers when they can&#039;t connect over the network. For this reason, you will probably want to pair up the dashboard machines with a monitor that offers a decent resolution to make it easy to see the desktop of the hosted servers.&lt;br /&gt;
&lt;br /&gt;
== What You Should Know Before Beginning ==&lt;br /&gt;
&lt;br /&gt;
It is assumed that you are familiar with Linux systems administration, specifically [[Red Hat]] [[Enterprise Linux]] and its derivatives. You will need to have somewhat advanced networking experience as well. You should be comfortable working in a terminal (directly or over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ssh]]&amp;lt;/span&amp;gt;). Familiarity with [[XML]] will help, but is not terribly required as its use here is pretty self-evident.&lt;br /&gt;
&lt;br /&gt;
If you feel a little out of depth at times, don&#039;t hesitate to set this tutorial aside. Browse over to the components you feel the need to study more, then return and continue on. Finally, and perhaps most importantly, you &#039;&#039;&#039;must&#039;&#039;&#039; have patience! If you have a manager asking you to &amp;quot;go live&amp;quot; with a cluster in a month, tell him or her that it simply &#039;&#039;&#039;won&#039;t happen&#039;&#039;&#039;. If you rush, you will skip important points and &#039;&#039;&#039;you will fail&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Patience is vastly more important than any pre-existing skill.&lt;br /&gt;
&lt;br /&gt;
== A Word on Complexity ==&lt;br /&gt;
&lt;br /&gt;
Introducing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Fabimer principle&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Clustering is not inherently hard, but it is inherently complex. Consider:&lt;br /&gt;
&lt;br /&gt;
* Any given program has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; bugs.&lt;br /&gt;
** [[RHCS]] uses; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, and many more smaller apps.&lt;br /&gt;
** We will be adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DRBD&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GFS2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;KVM&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Right there, we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;N * 10&amp;lt;/span&amp;gt; possible bugs. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;.&lt;br /&gt;
* A cluster has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt; nodes.&lt;br /&gt;
** In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; nodes, each with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; networks across &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; interfaces bonded into pairs.&lt;br /&gt;
** The network infrastructure (Switches, routers, etc). We will be using two managed switches, adding another layer of complexity.&lt;br /&gt;
** This gives us another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Y * (2*(3*2))+2&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;+2&amp;lt;/span&amp;gt; for managed switches. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;B&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Let&#039;s add the human factor. Let&#039;s say that a person needs roughly 5 years of cluster experience to be considered an proficient. For each year less than this, add a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Z&amp;lt;/span&amp;gt; &amp;quot;oops&amp;quot; factor, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(5-Z) * 2&amp;lt;/span&amp;gt;. We&#039;ll call this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt;.&lt;br /&gt;
* So, finally, add up the complexity, using this tutorial&#039;s layout, 0-years of experience and managed switches.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(N * 10) * (Y * (2*(3*2))+2) * ((5-0) * 2) == (A * B * C)&amp;lt;/span&amp;gt; == an-unknown-but-big-number.&lt;br /&gt;
&lt;br /&gt;
This isn&#039;t meant to scare you away, but it is meant to be a sobering statement. Obviously, those numbers are somewhat artificial, but the point remains.&lt;br /&gt;
&lt;br /&gt;
Any one piece is easy to understand, thus, clustering is inherently easy. However, given the large number of variables, you must really understand all the pieces and how they work together. &#039;&#039;&#039;&#039;&#039;DO NOT&#039;&#039;&#039;&#039;&#039; think that you will have this mastered and working in a month. Certainly don&#039;t try to sell clusters as a service without a &#039;&#039;lot&#039;&#039; of internal testing.&lt;br /&gt;
&lt;br /&gt;
Clustering is kind of like chess. The rules are pretty straight forward, but the complexity can take some time to master.&lt;br /&gt;
&lt;br /&gt;
= Overview of Components =&lt;br /&gt;
&lt;br /&gt;
When looking at a cluster, there is a tendency to want to dive right into the configuration file. That is not very useful in clustering.&lt;br /&gt;
&lt;br /&gt;
* When you look at the configuration file, it is quite short.&lt;br /&gt;
&lt;br /&gt;
Clustering isn&#039;t like most applications or technologies. Most of us learn by taking something such as a configuration file, and tweaking it to see what happens. I tried that with clustering and learned only what it was like to bang my head against the wall.&lt;br /&gt;
&lt;br /&gt;
* Understanding the parts and how they work together is critical.&lt;br /&gt;
&lt;br /&gt;
You will find that the discussion on the components of clustering, and how those components and concepts interact, will be much longer than the initial configuration. It is true that we could talk very briefly about the actual syntax, but it would be a disservice. Please don&#039;t rush through the next section, or worse, skip it and go right to the configuration. You will waste far more time than you will save.&lt;br /&gt;
&lt;br /&gt;
* Clustering is easy, but it has a complex web of inter-connectivity. You must grasp this network if you want to be an effective cluster administrator!&lt;br /&gt;
&lt;br /&gt;
== Component; Cman ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; portion of the the cluster is the &#039;&#039;&#039;c&#039;&#039;&#039;luster &#039;&#039;&#039;man&#039;&#039;&#039;ager. In the 3.0 series used in [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; acts mainly as a [[quorum]] provider. That is, is adds up the votes from the cluster members and decides if there is a simple majority. If there is, the cluster is &amp;quot;quorate&amp;quot; and is allowed to provide cluster services. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; service will be used to start and stop all of the components needed to make the cluster operate.&lt;br /&gt;
&lt;br /&gt;
== Component; Corosync ==&lt;br /&gt;
&lt;br /&gt;
Corosync is the heart of the cluster. Almost all other cluster compnents operate though this.&lt;br /&gt;
&lt;br /&gt;
In Red Hat clusters, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is configured via the central &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. It can be configured directly in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt;, but given that we will be building an RHCS cluster, we will only use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. That said, almost all &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync.conf&amp;lt;/span&amp;gt; options are available in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. This is important to note as you will see references to both configuration files when searching the Internet.&lt;br /&gt;
&lt;br /&gt;
Corosync sends messages using [[multicast]] messaging by default. Recently, [[unicast]] support has been added, but due to network latency, it is only recommended for use with small clusters of two to four nodes. We will be using [[multicast]] in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== A Little History ===&lt;br /&gt;
&lt;br /&gt;
There were significant changes between [[RHCS]] the old version 2 and version 3 available on [[EL6]], which we are using.&lt;br /&gt;
&lt;br /&gt;
In the RHCS version 2, there was a component called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;openais&amp;lt;/span&amp;gt; which provided &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt;. The OpenAIS project was designed to be the heart of the cluster and was based around the [http://www.saforum.org/ Service Availability Forum]&#039;s [http://www.saforum.org/Application-Interface-Specification~217404~16627.htm Application Interface Specification]. AIS is an open [[API]] designed to provide inter-operable high availability services.&lt;br /&gt;
&lt;br /&gt;
In 2008, it was decided that the AIS specification was overkill for most clustered applications being developed in the open source community.  At that point, OpenAIS was split in to two projects: Corosync and OpenAIS. The former, Corosync, provides totem, cluster membership, messaging, and basic APIs for use by clustered applications, while the OpenAIS project became an optional add-on to corosync for users who want the full AIS API.&lt;br /&gt;
&lt;br /&gt;
You will see a lot of references to OpenAIS while searching the web for information on clustering. Understanding its evolution will hopefully help you avoid confusion.&lt;br /&gt;
&lt;br /&gt;
=== The Future of Corosync ===&lt;br /&gt;
&lt;br /&gt;
In [[EL6]], &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; is version 1.4. Upstream, however, it&#039;s passed version 2. One of the major changes in the 2+ version is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; becomes a quorum provider, helping to remove the need for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. If you experiment with clustering on [[Fedora]], for example, you will find that cman is gone entirely.&lt;br /&gt;
&lt;br /&gt;
== Concept; Quorum ==&lt;br /&gt;
&lt;br /&gt;
[[Quorum]] is defined as the minimum set of hosts required in order to provide clustered services and is used to prevent [[split-brain]] situations.&lt;br /&gt;
&lt;br /&gt;
The quorum algorithm used by the RHCS cluster is called &amp;quot;simple majority quorum&amp;quot;, which means that more than half of the hosts must be online and communicating in order to provide service. While simple majority quorum is a very common quorum algorithm, other quorum algorithms exist ([[grid quorum]], [[YKD Dyanamic Linear Voting]], etc.).&lt;br /&gt;
&lt;br /&gt;
The idea behind quorum is that, when a cluster splits into two or more partitions, which ever group of machines has quorum can safely start clustered services knowing that no other lost nodes will try to do the same.&lt;br /&gt;
&lt;br /&gt;
Take this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a cluster of four nodes, each with one vote.&lt;br /&gt;
** The cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;. A clear majority, in this case, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; because &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(4/2)+1&amp;lt;/span&amp;gt;, rounded down, is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;.&lt;br /&gt;
** Now imagine that there is a failure in the network equipment and one of the nodes disconnects from the rest of the cluster.&lt;br /&gt;
** You now have two partitions; One partition contains three machines and the other partition has one.&lt;br /&gt;
** The three machines will have quorum, and the other machine will lose quorum.&lt;br /&gt;
** The partition with quorum will reconfigure and continue to provide cluster services.&lt;br /&gt;
** The partition without quorum will withdraw from the cluster and shut down all cluster services.&lt;br /&gt;
&lt;br /&gt;
When the cluster reconfigures and the partition wins quorum, it will fence the node(s) in the partition without quorum. Once the fencing has been confirmed successful, the partition with quorum will begin accessing clustered resources, like shared filesystems.&lt;br /&gt;
&lt;br /&gt;
This also helps explain why an even &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; is not enough to have quorum, a common question for people new to clustering. Using the above scenario, imagine if the split were 2 and 2 nodes. Because either can&#039;t be sure what the other would do, neither can safely proceed. If we allowed an even 50% to have quorum, both partition might try to take over the clustered services and disaster would soon follow.&lt;br /&gt;
&lt;br /&gt;
There is one, and &#039;&#039;&#039;only&#039;&#039;&#039; one except to this rule.&lt;br /&gt;
&lt;br /&gt;
In the case of a two node cluster, as we will be building here, any failure results in a 50/50 split. If we enforced quorum in a two-node cluster, there would never be high availability because and failure would cause both nodes to withdraw. The risk with this exception is that we now place the entire safety of the cluster on [[fencing]], a concept we will cover in a second. Fencing is a second line of defense and something we are loath to rely on alone.&lt;br /&gt;
&lt;br /&gt;
Even in a two-node cluster though, proper quorum can be maintained by using a quorum disk, called a [[qdisk]]. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; on a [[DRBD]] resource comes with its own problems, so we will not be able to use it here.&lt;br /&gt;
&lt;br /&gt;
== Concept; Virtual Synchrony ==&lt;br /&gt;
&lt;br /&gt;
Many cluster operations, like distributed locking and so on, have to occur in the same order across all nodes. This concept is called &amp;quot;virtual synchrony&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; using &amp;quot;closed process groups&amp;quot;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[CPG]]&amp;lt;/span&amp;gt;. A closed process group is simply a private group of processes in a cluster. Within this closed group, all messages between members are ordered. Delivery, however, is not guaranteed. If a member misses messages, it is up to the member&#039;s application to decide what action to take.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at two scenarios showing how locks are handled using CPG:&lt;br /&gt;
&lt;br /&gt;
* The cluster starts up cleanly with two members.&lt;br /&gt;
* Both members are able to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Both want to start it, but need a lock from [[DLM]] to do so.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member has its totem token, and sends its request for the lock.&lt;br /&gt;
** DLM issues a lock for that service to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member requests a lock for the same service.&lt;br /&gt;
** DLM rejects the lock request.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member successfully starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; and announces this to the CPG members.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sees that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:foo&amp;lt;/span&amp;gt; is now running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and no longer tries to start the service.&lt;br /&gt;
&lt;br /&gt;
* The two members want to write to a common area of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; GFS2 partition.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; sends a request for a DLM lock against the FS, gets it.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; sends a request for the same lock, but DLM sees that a lock is pending and rejects the request.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; member finishes altering the file system, announces the changed over CPG and releases the lock.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; member updates its view of the filesystem, requests a lock, receives it and proceeds to update the filesystems.&lt;br /&gt;
** It completes the changes, annouces the changes over CPG and releases the lock.&lt;br /&gt;
&lt;br /&gt;
Messages can only be sent to the members of the CPG while the node has a totem token from corosync.&lt;br /&gt;
&lt;br /&gt;
== Concept; Fencing ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=DO NOT BUILD A CLUSTER WITHOUT PROPER, WORKING AND TESTED FENCING.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:fence_meme.jpg|right|300px|thumb|Laugh, but this is a weekly conversation.]]&lt;br /&gt;
&lt;br /&gt;
Fencing is a &#039;&#039;&#039;absolutely critical&#039;&#039;&#039; part of clustering. Without &#039;&#039;&#039;fully&#039;&#039;&#039; working fence devices, &#039;&#039;&#039;&#039;&#039;your cluster will fail&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sorry, I promise that this will be the only time that I speak so strongly. Fencing really is critical, and explaining the need for fencing is nearly a weekly event. &lt;br /&gt;
&lt;br /&gt;
So then, let&#039;s discuss fencing.&lt;br /&gt;
&lt;br /&gt;
When a node stops responding, an internal timeout and counter start ticking away. During this time, no [[DLM]] locks are allowed to be issued. Anything using DLM, including &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, are effectively hung. The hung node is detected using a totem token timeout. That is, if a token is not received from a node within a period of time, it is considered lost and a new token is sent. After a certain number of lost tokens, the cluster declares the node dead. The remaining nodes reconfigure into a new cluster and, if they have quorum (or if quorum is ignored), a fence call against the silent node is made.&lt;br /&gt;
&lt;br /&gt;
The fence daemon will look at the cluster configuration and get the fence devices configured for the dead node. Then, one at a time and in the order that they appear in the configuration, the fence daemon will call those fence devices, via their fence agents, passing to the fence agent any configured arguments like username, password, port number and so on. If the first fence agent returns a failure, the next fence agent will be called. If the second fails, the third will be called, then the forth and so on. Once the last (or perhaps only) fence device fails, the fence daemon will retry again, starting back at the start of the list. It will do this indefinitely until one of the fence devices succeeds.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow, in point form:&lt;br /&gt;
&lt;br /&gt;
* The totem token moves around the cluster members. As each member gets the token, it sends sequenced messages to the CPG members.&lt;br /&gt;
* The token is passed from one node to the next, in order and continuously during normal operation.&lt;br /&gt;
* Suddenly, one node stops responding.&lt;br /&gt;
** A timeout starts (~&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238&amp;lt;/span&amp;gt;ms by default), and each time the timeout is hit, and error counter increments and a replacement token is created.&lt;br /&gt;
** The silent node responds before the failure counter reaches the limit.&lt;br /&gt;
*** The failure counter is reset to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
*** The cluster operates normally again.&lt;br /&gt;
* Again, one node stops responding.&lt;br /&gt;
** Again, the timeout begins. As each totem token times out, a new packet is sent and the error count increments.&lt;br /&gt;
** The error counts exceed the limit (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; errors is the default); Roughly one second has passed (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;238ms * 4&amp;lt;/span&amp;gt; plus some overhead).&lt;br /&gt;
** The node is declared dead.&lt;br /&gt;
** The cluster checks which members it still has, and if that provides enough votes for quorum.&lt;br /&gt;
*** If there are too few votes for quorum, the cluster software freezes and the node(s) withdraw from the cluster.&lt;br /&gt;
*** If there are enough votes for quorum, the silent node is declared dead.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt;, telling it to fence the node.&lt;br /&gt;
**** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon notifies [[DLM]] and locks are blocked.&lt;br /&gt;
**** Which fence device(s) to use, that is, what &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to call and what arguments to pass, is gathered.&lt;br /&gt;
**** For each configured fence device:&lt;br /&gt;
***** The agent is called and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; waits for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; to exit.&lt;br /&gt;
***** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt;&#039;s exit code is examined. If it&#039;s a success, recovery starts. If it failed, the next configured fence agent is called.&lt;br /&gt;
**** If all (or the only) configured fence fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will start over.&lt;br /&gt;
**** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will wait and loop forever until a fence agent succeeds. During this time, &#039;&#039;&#039;the cluster is effectively hung&#039;&#039;&#039;.&lt;br /&gt;
*** Once a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_agent&amp;lt;/span&amp;gt; succeeds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; notifies DLM and lost locks are recovered.&lt;br /&gt;
**** [[GFS2]] partitions recover using their journal.&lt;br /&gt;
**** Lost cluster resources are recovered as per &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;&#039;s configuration (including file system recovery as needed).&lt;br /&gt;
* Normal cluster operation is restored, minus the lost node.&lt;br /&gt;
&lt;br /&gt;
This skipped a few key things, but the general flow of logic should be there.&lt;br /&gt;
&lt;br /&gt;
This is why fencing is so important. Without a properly configured and tested fence device or devices, the cluster will never successfully fence and the cluster will remain hung until a human can intervene.&lt;br /&gt;
&lt;br /&gt;
=== Is &amp;quot;Fencing&amp;quot; the same as STONITH? ===&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
In the old days, there were two distinct open-source HA clustering stacks. The Linux-HA&#039;s project used the term &amp;quot;STONITH&amp;quot;, an acronym for &amp;quot;Shoot The Other Node In The Head&amp;quot;, for fencing. Red Hat&#039;s cluster stack used the term &amp;quot;fencing&amp;quot; for the same concept.&lt;br /&gt;
&lt;br /&gt;
We prefer the term &amp;quot;fencing&amp;quot; because the fundamental goal is to put the target node into a state where it can not effect cluster resources or provide clustered services. This can be accomplished by powering it off, called &amp;quot;power fencing&amp;quot;, or by disconnecting it from SAN storage and/or network, a process called &amp;quot;fabric fencing&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;STONITH&amp;quot;, based on its acronym, implies power fencing. This is not a big deal, but it is the reason this tutorial sticks with the term &amp;quot;fencing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Component; Totem ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; protocol defines message passing within the cluster and it is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;. A token is passed around all the nodes in the cluster, and nodes can only send messages while they have the token. A node will keep its messages in memory until it gets the token back with no &amp;quot;not ack&amp;quot; messages. This way, if a node missed a message, it can request it be resent when it gets its token. If a node isn&#039;t up, it will simply miss the messages.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;totem&amp;lt;/span&amp;gt; protocol supports something called &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;&#039;, &#039;&#039;&#039;R&#039;&#039;&#039;edundant &#039;&#039;&#039;R&#039;&#039;&#039;ing &#039;&#039;&#039;P&#039;&#039;&#039;rotocol. Through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp&amp;lt;/span&amp;gt;, you can add a second backup ring on a separate network to take over in the event of a failure in the first ring. In RHCS, these rings are known as &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 0&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ring 1&amp;lt;/span&amp;gt;&amp;quot;. The RRP is being re-introduced in RHCS version 3. Its use is experimental and should only be used with plenty of testing.&lt;br /&gt;
&lt;br /&gt;
== Component; Rgmanager ==&lt;br /&gt;
&lt;br /&gt;
When the cluster membership changes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; that it needs to recheck its services. It will examine what changed and then will start, stop, migrate or recover cluster resources as needed.&lt;br /&gt;
&lt;br /&gt;
Within &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, one or more &#039;&#039;resources&#039;&#039; are brought together as a &#039;&#039;service&#039;&#039;. This service is then optionally assigned to a &#039;&#039;failover domain&#039;&#039;, an subset of nodes that can have preferential ordering.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; daemon runs separately from the cluster manager, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. This means that, to fully start the cluster, we need to start both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What about Pacemaker? ===&lt;br /&gt;
&lt;br /&gt;
[[Pacemaker]] is also a resource manager, like rgmanager. You can not use both in the same cluster.&lt;br /&gt;
&lt;br /&gt;
Back prior to 2008, there were two distinct open-source cluster projects:&lt;br /&gt;
&lt;br /&gt;
* Red Hat&#039;s Cluster Service&lt;br /&gt;
* Linux-HA&#039;s Heartbeat&lt;br /&gt;
&lt;br /&gt;
Pacemaker was born out of the Linux-HA project as an advanced resource manager that could use either heartbeat or openais for cluster membership and communication. Unlike RHCS and heartbeat, its sole focus was resource management.&lt;br /&gt;
&lt;br /&gt;
In 2008, plans were made to begin the slow process of merging the two independent stacks into one. As mentioned in the corosync overview, it replaced openais and became the default cluster membership and communication layer for both RHCS and Pacemaker. Development of heartbeat was ended, though [http://www.linbit.com/en/company/news/125-linbit-takes-over-heartbeat-maintenance Linbit] continues to maintain the heartbeat code to this day.&lt;br /&gt;
&lt;br /&gt;
The fence and resource agents, software that acts as a glue between the cluster and the devices and resource they manage, were merged next. You can now use the same set of agents on both pacemaker and RHCS.&lt;br /&gt;
&lt;br /&gt;
Red Hat introduced pacemaker as &amp;quot;Tech Preview&amp;quot; in [[RHEL]] 6.0. It has been available beside RHCS ever since, though support is not offered yet[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6-Beta/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ *].&lt;br /&gt;
&lt;br /&gt;
{{note|1=Pacemaker entered full support with the release of RHEL 6.5. It is also the only available HA stack on RHEL 7 beta. This is a strong indication that, indeed, corosync and pacemaker will be the future HA stack on RHEL.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat has a strict policy of not saying what will happen in the future. That said, the speculation is that Pacemaker will become supported soon and will replace rgmanager entirely in RHEL 7, given that cman and rgmanager no longer exist upstream in Fedora.&lt;br /&gt;
&lt;br /&gt;
So why don&#039;t we use pacemaker here?&lt;br /&gt;
&lt;br /&gt;
We believe that, no matter how promising software looks, stability is king. Pacemaker on other distributions has been stable and supported for a long time. However, on RHEL, it&#039;s a recent addition and the developers have been doing a tremendous amount of work on pacemaker and associated tools. For this reason, we feel that on RHEL 6, pacemaker is too much of a moving target at this time. That said, we do intend to switch to pacemaker some time in the next year or two, depending on how the Red Hat stack evolves.&lt;br /&gt;
&lt;br /&gt;
== Component; Qdisk ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; does not work reliably on a DRBD resource, so we will not be using it in this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
A Quorum disk, known as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;qdisk&amp;lt;/span&amp;gt; is small partition on [[SAN]] storage used to enhance quorum. It generally carries enough votes to allow even a single node to take quorum during a cluster partition. It does this by using configured heuristics, that is custom tests, to decided which node or partition is best suited for providing clustered services during a cluster reconfiguration. These heuristics can be simple, like testing which partition has access to a given router, or they can be as complex as the administrator wishes using custom scripts.&lt;br /&gt;
&lt;br /&gt;
Though we won&#039;t be using it here, it is well worth knowing about when you move to a cluster with [[SAN]] storage.&lt;br /&gt;
&lt;br /&gt;
== Component; DRBD ==&lt;br /&gt;
&lt;br /&gt;
[[DRBD]]; Distributed Replicating Block Device, is a technology that takes raw storage from two nodes and keeps their data synchronized in real time. It is sometimes described as &amp;quot;network [[RAID_level_5#Level_1|RAID Level 1]]&amp;quot;, and that is conceptually accurate. In this tutorial&#039;s cluster, DRBD will be used to provide that back-end storage as a cost-effective alternative to a traditional [[SAN]] device.&lt;br /&gt;
&lt;br /&gt;
DRBD is, fundamentally, a raw block device. If you&#039;ve ever used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[mdadm]]&amp;lt;/span&amp;gt; to create a software RAID array, then you will be familiar with this.&lt;br /&gt;
&lt;br /&gt;
Think of it this way;&lt;br /&gt;
&lt;br /&gt;
With traditional software raid, you would take:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sdb5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With DRBD, you have this:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node1:/dev/sda5&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;node2:/dev/sda5&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;both:/dev/drbd0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, as soon as you create the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;md0&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd0&amp;lt;/span&amp;gt; device, you pretend like the member devices no longer exist. You format a [[filesystem]] onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/md0&amp;lt;/span&amp;gt;, use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; as an [[LVM]] physical volume, and so on.&lt;br /&gt;
&lt;br /&gt;
The main difference with DRBD is that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; will always be the same on both nodes. If you write something to node 1, it&#039;s instantly available on node 2, and vice versa. Of course, this means that what ever you put on top of DRBD has to be &amp;quot;cluster aware&amp;quot;. That is to say, the program or file system using the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; device has to understand that the contents of the disk might change because of another node.&lt;br /&gt;
&lt;br /&gt;
== Component; Clustered LVM ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the raw storage for the cluster, we must next consider partitions. This is where Clustered [[LVM]], known as [[CLVM]], comes into play.&lt;br /&gt;
&lt;br /&gt;
CLVM is ideal in that by using [[DLM]], the distributed lock manager. It won&#039;t allow access to cluster members outside of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt;&#039;s closed process group, which, in turn, requires quorum.&lt;br /&gt;
&lt;br /&gt;
It is ideal because it can take one or more raw devices, known as &amp;quot;physical volumes&amp;quot;, or simple as [[PV]]s, and combine their raw space into one or more &amp;quot;volume groups&amp;quot;, known as [[VG]]s. These volume groups then act just like a typical hard drive and can be &amp;quot;partitioned&amp;quot; into one or more &amp;quot;logical volumes&amp;quot;, known as [[LV]]s. These LVs are where [[KVM]]&#039;s virtual machine guests will exist and where we will create our [[GFS2]] clustered file system.&lt;br /&gt;
&lt;br /&gt;
LVM is particularly attractive because of how flexible it is. We can easily add new physical volumes later, and then grow an existing volume group to use the new space. This new space can then be given to existing logical volumes, or entirely new logical volumes can be created. This can all be done while the cluster is online offering an upgrade path with no down time.&lt;br /&gt;
&lt;br /&gt;
== Component; GFS2 ==&lt;br /&gt;
&lt;br /&gt;
With [[DRBD]] providing the clusters raw storage space, and [[Clustered LVM]] providing the logical partitions, we can now look at the clustered file system. This is the role of the Global File System version 2, known simply as [[GFS2]].&lt;br /&gt;
&lt;br /&gt;
It works much like standard filesystem, with user-land tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck.gfs2&amp;lt;/span&amp;gt; and so on. The major difference is that it and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; use the cluster&#039;s [[DLM|distributed locking mechanism]] provided by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; daemon. Once formatted, the GFS2-formatted partition can be mounted and used by any node in the cluster&#039;s [[CPG|closed process group]]. All nodes can then safely read from and write to the data on the partition simultaneously.&lt;br /&gt;
&lt;br /&gt;
{{note|1=GFS2 is &#039;&#039;&#039;only&#039;&#039;&#039; supported when run on top of Clustered LVM [[LV]]s. This is because, in certain error states, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_controld&amp;lt;/span&amp;gt; will call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to disconnect the GFS2 partition from its storage in certain failure states.}}&lt;br /&gt;
&lt;br /&gt;
== Component; DLM ==&lt;br /&gt;
&lt;br /&gt;
One of the major roles of a cluster is to provide [[DLM|distributed locking]] for clustered storage and resource management.&lt;br /&gt;
&lt;br /&gt;
Whenever a resource, GFS2 filesystem or clustered LVM LV needs a lock, it sends a request to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; which runs in userspace. This communicates with DLM in kernel. If the lockspace does not yet exist, DLM will create it and then give the lock to the requester. Should a subsequant lock request come in for the same lockspace, it will be rejected. Once the application using the lock is finished with it, it will release the lock. After this, another node may request and receive a lock for the lockspace.&lt;br /&gt;
&lt;br /&gt;
If a node fails, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_controld&amp;lt;/span&amp;gt; that a fence is pending and new lock requests will block. After a successful fence, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; will alert DLM that the node is gone and any locks the victim node held are released. At this time, other nodes may request a lock on the lockspaces the lost node held and can perform recovery, like replaying a GFS2 filesystem journal, prior to resuming normal operation.&lt;br /&gt;
&lt;br /&gt;
Note that DLM locks are not used for actually locking the file system. That job is still handled by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;plock()&amp;lt;/span&amp;gt; calls ([[POSIX]] locks).&lt;br /&gt;
&lt;br /&gt;
== Component; KVM ==&lt;br /&gt;
&lt;br /&gt;
Two of the most popular open-source virtualization platforms available in the Linux world today and [[Xen]] and [[KVM]]. The former is maintained by [http://www.citrix.com/xenserver Citrix] and the other by [http://www.redhat.com/solutions/virtualization/ Redhat]. It would be difficult to say which is &amp;quot;better&amp;quot;, as they&#039;re both very good. Xen can be argued to be more mature where KVM is the &amp;quot;official&amp;quot; solution supported by Red Hat in [[EL6]].&lt;br /&gt;
&lt;br /&gt;
We will be using the KVM [[hypervisor]] within which our highly-available virtual machine guests will reside. It is a type-1 hypervisor, which means that the host operating system runs directly on the bare hardware. Contrasted against Xen, which is a type-2 hypervisor where even the installed OS is itself just another virtual machine.&lt;br /&gt;
&lt;br /&gt;
= Node Installation =&lt;br /&gt;
&lt;br /&gt;
We need a baseline, a minimum system requirement of sorts. I will refer fairly frequently to the specific setup I used. Please don&#039;t take this as &amp;quot;the ideal setup&amp;quot; though... Every cluster will have its own needs, and you should plan and purchase for your particular needs.&lt;br /&gt;
&lt;br /&gt;
== Node Host Names ==&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&lt;br /&gt;
&lt;br /&gt;
We need to decide what naming convention and IP ranges to use for our nodes and their networks.&lt;br /&gt;
&lt;br /&gt;
The IP addresses and subnets you decide to use are completely up to you. The host names though need to follow a certain standard, &#039;&#039;&#039;if&#039;&#039;&#039; you wish to use the [[AN!CDB]] dashboard, as we will do here. Specifically, the node names on your nodes must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; for node #1 and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for node #2. The reason for this will be discussed later. &lt;br /&gt;
&lt;br /&gt;
The node host name convention that we&#039;ve created is this:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-cYYn0{1,2}&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; is a two or three letter prefix used to denote the company, group or person who owns the &#039;&#039;Anvil!&#039;&#039;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cYY&amp;lt;/span&amp;gt; is a simple zero-padded sequence number number.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n0{1,2}&amp;lt;/span&amp;gt; indicated the node in the cluster.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, the &#039;&#039;Anvil!&#039;&#039; is owned and operated by &amp;quot;Alteeve&#039;s Niche!&amp;quot;, so the prefix &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an&amp;lt;/span&amp;gt;&amp;quot; is used. This is the fifth cluster we&#039;ve got, so the cluster name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;, so the host name&#039;s cluster number is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c05&amp;lt;/span&amp;gt;. Thus, node #1 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and node #2 is named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we have three distinct networks, we have three network-specific suffixes we apply to these host names which we will map to subnets in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; later.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.bcn&amp;lt;/span&amp;gt;; Back-Channel Network host name.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.sn&amp;lt;/span&amp;gt;; Storage Network hostname.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;hostname&amp;gt;.ifn&amp;lt;/span&amp;gt;; Internet-Facing Network host name.&lt;br /&gt;
&lt;br /&gt;
Again, what you use is entirely up to you. Just remember that the node&#039;s host name must end in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;n02&amp;lt;/span&amp;gt; for AN!CDB to work.&lt;br /&gt;
&lt;br /&gt;
== Foundation Pack Host Names ==&lt;br /&gt;
&lt;br /&gt;
The foundation pack devices, switches, PDUs and UPSes, can support multiple &#039;&#039;Anvil!&#039;&#039; platforms. Likewise, the [[AN!CDB|dashboard]] servers support multiple &#039;&#039;Anvil!&#039;&#039;s as well. For this reason, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cXX&amp;lt;/span&amp;gt; portion of the host name does not make sense when choosing host names for these devices.&lt;br /&gt;
&lt;br /&gt;
As always, you are free to choose host names that make sense to you. For this tutorial, the following host names are used;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Device&lt;br /&gt;
!Host name&lt;br /&gt;
!Examples&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|Network Switches&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-sYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Switch #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Switch #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-s02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Switched [[PDU]]s&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-pYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* PDU #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p01&amp;lt;/span&amp;gt;&lt;br /&gt;
* PDU #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-p02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Network Managed [[UPS]]es&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-uYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* UPS #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
* UPS #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Dashboard Servers&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx-mYY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space:nowrap;&amp;quot;|&lt;br /&gt;
* Dashboard #1; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m01&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dashboard #2; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-m02&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; prefix is the owner&#039;s prefix and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YY&amp;lt;/span&amp;gt; is a simple sequence number. Note that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; letter was chosen for historical reasons. The dashboard used to be called &amp;quot;monitoring servers&amp;quot;. For consistency with existing dashboards, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; has remained. Note also that the dashboards will connect to both the [[BCN]] and [[SN]], so like the nodes, host names with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.bcn&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.ifn&amp;lt;/span&amp;gt; suffixes will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OS Installation ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=[[EL6]].1 shipped with a version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[corosync]]&amp;lt;/span&amp;gt; that had a token retransmit bug. On slower systems, there would be a form of race condition which would cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt; tokens the be retransmitted and cause significant performance problems. This has been resolved in [[EL6]].2 so please be sure to upgrade.}}&lt;br /&gt;
&lt;br /&gt;
Beyond being based on [[RHEL]] 6, there are no requirements for how the operating system is installed. This tutorial is written using &amp;quot;minimal&amp;quot; installs, and as such, installation instructions will be provided that will install all needed packages if they aren&#039;t already installed on your nodes.&lt;br /&gt;
&lt;br /&gt;
== Network Security Considerations ==&lt;br /&gt;
&lt;br /&gt;
When building production clusters, you will want to consider two options with regard to network security.&lt;br /&gt;
&lt;br /&gt;
First, the interfaces connected to an untrusted network, like the Internet, should not have an IP address, though the interfaces themselves will need to be up so that virtual machines can route through them to the outside world. Alternatively, anything inbound from the virtual machines or inbound from the untrusted network should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt;ed by the firewall.&lt;br /&gt;
&lt;br /&gt;
Second, if you can not run the cluster communications or storage traffic on dedicated network connections over isolated subnets, you will need to configure the firewall to block everything except the ports needed by storage and cluster traffic.&lt;br /&gt;
&lt;br /&gt;
{{note|1=As of [[EL6]].2, you can now use [[unicast]] for totem communication instead of multicast. This is &#039;&#039;&#039;not&#039;&#039;&#039; advised, and should only be used for clusters of two or three nodes on networks where unresolvable [[multicast]] issues exist. If using [[gfs2]], as we do here, using unicast for totem is strongly discouraged.}}&lt;br /&gt;
&lt;br /&gt;
== SELinux Considerations ==&lt;br /&gt;
&lt;br /&gt;
There are two important changes needed to make our &#039;&#039;Anvil!&#039;&#039; work with [[SELinux]]. Both are presented in this tutorial when they&#039;re first needed. If you do not plan to follow this tutorial linearly, please be sure to read:&lt;br /&gt;
&lt;br /&gt;
* [[#SELinux and apcupsd|SELinux and apcupsd]]&lt;br /&gt;
* [[#Solving_vm01-win2008_.22Failure_to_Enable.22_Error|Solving vm01-win2008 &amp;quot;Failure to Enable Error&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
Before we begin, let&#039;s take a look at a block diagram of what we&#039;re going to build. This will help when trying to see what we&#039;ll be talking about.&lt;br /&gt;
&lt;br /&gt;
== A Map! ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Nodes                                                                                        \_/                                                                                           &lt;br /&gt;
  ____________________________________________________________________________             _____|____              ____________________________________________________________________________ &lt;br /&gt;
 | an-c05n01.alteeve.ca                                                       |  /--------{_Internet_}---------\  |                                                       an-c05n02.alteeve.ca |&lt;br /&gt;
 |                                 Network:                                   |  |                             |  |                                   Network:                                 |&lt;br /&gt;
 |                                 _________________     _____________________|  |  _________________________  |  |_____________________     _________________                                 |&lt;br /&gt;
 |      Servers:                  |      vbr2       |---| bond2               |  | | an-s01         Switch 1 | |  |               bond2 |---|      vbr2       |                  Servers:      |&lt;br /&gt;
 |      _______________________   |   10.255.50.1   |   | ____________________|  | |____ Internet-Facing ____| |  |____________________ |   |   10.255.50.2   |  .........................     |&lt;br /&gt;
 |     | [ vm01-win2008 ]      |  |_________________|   || eth2               =----=_01_]    Network    [_02_=----=               eth2 ||   |_________________|  :      [ vm01-win2008 ] :     |&lt;br /&gt;
 |     |   ____________________|    | : | | : : | |     || 00:1B:21:81:C3:34 ||  | |____________________[_24_=-/  || 00:1B:21:81:C2:EA ||     : : | | : : | :    :____________________   :     |&lt;br /&gt;
 |     |  | NIC 1              =----/ : | | : : | |     ||___________________||  | | an-s02         Switch 2 |    ||___________________||     : : | | : : | :----=              NIC 1 |  :     |&lt;br /&gt;
 |     |  | 10.255.1.1        ||      : | | : : | |     | ____________________|  | |____                 ____|    |____________________ |     : : | | : : |      :|        10.255.1.1 |  :     |&lt;br /&gt;
 |     |  | ..:..:..:..:..:.. ||      : | | : : | |     || eth5               =----=_01_]  VLAN ID 300  [_02_=----=               eth5 ||     : : | | : : |      :| ..:..:..:..:..:.. |  :     |&lt;br /&gt;
 |     |  |___________________||      : | | : : | |     || A0:36:9F:02:E0:05 ||  | |____________________[_24_=-\  || A0:36:9F:07:D6:2F ||     : : | | : : |      :|___________________|  :     |&lt;br /&gt;
 |     |   ____                |      : | | : : | |     ||___________________||  |                             |  ||___________________||     : : | | : : |      :                ____   :     |&lt;br /&gt;
 |  /--=--[_c:_]               |      : | | : : | |     |_____________________|  \-----------------------------/  |_____________________|     : : | | : : |      :               [_c:_]--=--\  |&lt;br /&gt;
 |  |  |_______________________|      : | | : : | |      _____________________|                                   |_____________________      : : | | : : |      :.......................:  |  |&lt;br /&gt;
 |  |                                 : | | : : | |     | bond1               |     _________________________     |               bond1 |     : : | | : : |                                 |  |&lt;br /&gt;
 |  |     .........................   : | | : : | |     | 10.10.50.1          |    | an-s01         Switch 1 |    |          10.10.50.2 |     : : | | : : |    _______________________      |  |&lt;br /&gt;
 |  |     : [ vm02-win2012 ]      :   : | | : : | |     | ____________________|    |____     Storage     ____|    |____________________ |     : : | | : : |   |      [ vm02-win2012 ] |     |  |&lt;br /&gt;
 |  |     :   ____________________:   : | | : : | |     || eth1               =----=_09_]    Network    [_10_=----=               eth1 ||     : : | | : : |   |____________________   |     |  |&lt;br /&gt;
 |  |     :  | NIC 1              =---: | | : : | |     || 00:19:99:9C:9B:9F ||    |_________________________|    || 00:19:99:9C:A0:6D ||     : : | | : : \---=              NIC 1 |  |     |  |&lt;br /&gt;
 |  |     :  | 10.255.1.2        |:     | | : : | |     ||___________________||    | an-s02         Switch 2 |    ||___________________||     : : | | : :     ||        10.255.1.2 |  |     |  |&lt;br /&gt;
 |  |     :  | ..:..:..:..:..:.. |:     | | : : | |     | ____________________|    |____                 ____|    |____________________ |     : : | | : :     || ..:..:..:..:..:.. |  |     |  |&lt;br /&gt;
 |  |     :  |___________________|:     | | : : | |     || eth4               =----=_09_]  VLAN ID 200  [_10_=----=               eth4 ||     : : | | : :     ||___________________|  |     |  |&lt;br /&gt;
 |  |     :   ____                :     | | : : | |     || A0:36:9F:02:E0:04 ||    |_________________________|    || A0:36:9F:07:D6:2E ||     : : | | : :     |                ____   |     |  |&lt;br /&gt;
 |  |  /--=--[_c:_]               :     | | : : | |     ||___________________||                                   ||___________________||     : : | | : :     |               [_c:_]--=--\  |  |&lt;br /&gt;
 |  |  |  :.......................:     | | : : | |  /--|_____________________|                                   |_____________________|--\  : : | | : :     |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                | | : : | |  |   _____________________|                                   |_____________________   |  : : | | : :                                |  |  |&lt;br /&gt;
 |  |  |   _______________________      | | : : | |  |  | bond0               |     _________________________     |               bond0 |  |  : : | | : :     .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm03-win7 ]         |     | | : : | |  |  | 10.20.50.1          |    | an-s01         Switch 1 |    |          10.20.50.2 |  |  : : | | : :     :      [ vm02-win2012 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|     | | : : | |  |  | ____________________|    |____  Back-Channel   ____|    |____________________ |  |  : : | | : :     :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-----/ | : : | |  |  || eth0               =----=_13_]    Network    [_14_=----=               eth0 ||  |  : : | | : :-----=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.3        ||       | : : | |  |  || 00:19:99:9C:9B:9E ||    |_________________________|    || 00:19:99:9C:A0:6C ||  |  : : | | :       :|        10.255.1.3 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||       | : : | |  |  ||___________________||    | an-s02         Switch 2 |    ||___________________||  |  : : | | :       :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||       | : : | |  |  || eth3               =----=_13_]  VLAN ID 100  [_14_=----=               eth3 ||  |  : : | | :       :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |       | : : | |  |  || 00:1B:21:81:C3:35 ||    |_________________________|    || 00:1B:21:81:C2:EB ||  |  : : | | :       :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |       | : : | |  |  ||___________________||                                   ||___________________||  |  : : | | :       :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|       | : : | |  |  |_____________________|                                   |_____________________|  |  : : | | :       :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                  | : : | |  |                        |                                   |                        |  : : | | :                                  |  |  |&lt;br /&gt;
 |  |  |   _______________________        | : : | |  |                        |                                   |                        |  : : | | :       .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm04-win8 ]         |       | : : | |  \                        |                                   |                       /   : : | | :       :         [ vm04-win8 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|       | : : | |   \                       |                                   |                      /    : : | | :       :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | NIC 1              =-------/ : : | |    |                      |                                   |                      |    : : | | :-------=              NIC 1 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.4        ||         : : | |    |                      |                                   |                      |    : : | |         :|        10.255.1.4 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||         : : | |    |                      |                                   |                      |    : : | |         :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||         : : | |    |                      |                                   |                      |    : : | |         :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   ____                |         : : | |    |                      |                                   |                      |    : : | |         :                ____   :  |  |  |&lt;br /&gt;
 |  +--|-=--[_c:_]                |         : : | |    |                      |                                   |                      |    : : | |         :               [_c:_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|         : : | |    |                      |                                   |                      |    : : | |         :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                    : : | |    |                      |                                   |                      |    : : | |                                    |  |  |&lt;br /&gt;
 |  |  |  .........................         : : | |    |                      |                                   |                      |    : : | |          _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm05-freebsd9 ]     :         : : | |    |                      |                                   |                      |    : : | |         |     [ vm05-freebsd9 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:         : : | |    |                      |                                   |                      |    : : | |         |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | em0                =---------: : | |    |                      |                                   |                      |    : : | \---------=                em0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.5        |:           : | |    |                      |                                   |                      |    : : |           ||        10.255.1.5 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:           : | |    |                      |                                   |                      |    : : |           || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:           : | |    |                      |                                   |                      |    : : |           ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :           : | |    |                      |                                   |                      |    : : |           |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_ada0_]             :           : | |    |                      |                                   |                      |    : : |           |             [_ada0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:           : | |    |                      |                                   |                      |    : : |           |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                      : | |    |                      |                                   |                      |    : : |                                      |  |  |&lt;br /&gt;
 |  |  |  .........................           : | |    |                      |                                   |                      |    : : |            _______________________   |  |  |&lt;br /&gt;
 |  |  |  : [ vm06-solaris11 ]    :           : | |    |                      |                                   |                      |    : : |           |    [ vm06-solaris11 ] |  |  |  |&lt;br /&gt;
 |  |  |  :   ____________________:           : | |    |                      |                                   |                      |    : : |           |____________________   |  |  |  |&lt;br /&gt;
 |  |  |  :  | net0               =-----------: | |    |                      |                                   |                      |    : : \-----------=               net0 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | 10.255.1.6        |:             | |    |                      |                                   |                      |    : :             ||        10.255.1.6 |  |  |  |  |&lt;br /&gt;
 |  |  |  :  | ..:..:..:..:..:.. |:             | |    |                      |                                   |                      |    : :             || ..:..:..:..:..:.. |  |  |  |  |&lt;br /&gt;
 |  |  |  :  |___________________|:             | |    |                      |                                   |                      |    : :             ||___________________|  |  |  |  |&lt;br /&gt;
 |  |  |  :   ______              :             | |    |                      |                                   |                      |    : :             |              ______   |  |  |  |&lt;br /&gt;
 |  |  +--=--[_c3d0_]             :             | |    |                      |                                   |                      |    : :             |             [_c3d0_]--=--+  |  |&lt;br /&gt;
 |  |  |  :.......................:             | |    |                      |                                   |                      |    : :             |_______________________|  |  |  |&lt;br /&gt;
 |  |  |                                        | |    |                      |                                   |                      |    : :                                        |  |  |&lt;br /&gt;
 |  |  |   _______________________              | |    |                      |                                   |                      |    : :             .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm07-rhel6 ]        |             | |    |                      |                                   |                      |    : :             :        [ vm07-rhel6 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|             | |    |                      |                                   |                      |    : :             :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =-------------/ |    |                      |                                   |                      |    : :-------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.7        ||               |    |                      |                                   |                      |    :               :|        10.255.1.7 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||               |    |                      |                                   |                      |    :               :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||               |    |                      |                                   |                      |    :               :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |               |    |                      |                                   |                      |    :               :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |               |    |                      |                                   |                      |    :               :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|               |    |                      |                                   |                      |    :               :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                          |    |                      |                                   |                      |    :                                          |  |  |&lt;br /&gt;
 |  |  |   _______________________                |    |                      |                                   |                      |    :               .........................  |  |  |&lt;br /&gt;
 |  |  |  | [ vm08-sles11 ]       |               |    |                      |                                   |                      |    :               :       [ vm08-sles11 ] :  |  |  |&lt;br /&gt;
 |  |  |  |   ____________________|               |    |                      |                                   |                      |    :               :____________________   :  |  |  |&lt;br /&gt;
 |  |  |  |  | eth0               =---------------/    |                      |                                   |                      |    :---------------=               eth0 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | 10.255.1.8        ||                    |                      |                                   |                      |                    :|        10.255.1.8 |  :  |  |  |&lt;br /&gt;
 |  |  |  |  | ..:..:..:..:..:.. ||                    |                      |                                   |                      |                    :| ..:..:..:..:..:.. |  :  |  |  |&lt;br /&gt;
 |  |  |  |  |___________________||                    |                      |                                   |                      |                    :|___________________|  :  |  |  |&lt;br /&gt;
 |  |  |  |   _____               |                    |                      |                                   |                      |                    :               _____   :  |  |  |&lt;br /&gt;
 |  +--|--=--[_vda_]              |                    |                      |                                   |                      |                    :              [_vda_]--=--|--+  |&lt;br /&gt;
 |  |  |  |_______________________|                    |                      |                                   |                      |                    :.......................:  |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |                                               |                      |                                   |                      |                                               |  |  |&lt;br /&gt;
 |  |  |    Storage:                                   |                      |                                   |                      |                                   Storage:    |  |  |&lt;br /&gt;
 |  |  |    __________                                 |                      |                                   |                      |                                 __________    |  |  |&lt;br /&gt;
 |  |  |   [_/dev/sda_]                                |                      |                                   |                      |                                [_/dev/sda_]   |  |  |&lt;br /&gt;
 |  |  |     |   ___________    _______                |                      |                                   |                      |                _______    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda1_]--[_/boot_]               |                      |                                   |                      |               [_/boot_]--[_/dev/sda1_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ________               |                      |                                   |                      |               ________    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda2_]--[_&amp;lt;swap&amp;gt;_]              |                      |                                   |                      |              [_&amp;lt;swap&amp;gt;_]--[_/dev/sda2_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ___                    |                      |                                   |                      |                    ___    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda3_]--[_/_]                   |                      |                                   |                      |                   [_/_]--[_/dev/sda3_]--+     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |                      |                                   |                      |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     +--[_/dev/sda5_]--[_r0_]--[_/dev/drbd0_]--+                      |                                   |                      +--[_/dev/drbd0_]--[_r0_]--[_/dev/sda5_]--+     |  |  |&lt;br /&gt;
 |  |  |     |                                    |    |                      |                                   |                      |    |                                    |     |  |  |&lt;br /&gt;
 |  |  |     |                                    \----|--\                   |                                   |                   /--|----/                                    |     |  |  |&lt;br /&gt;
 |  |  |     |   ___________    ____    ____________   |  |                   |                                   |                   |  |   ____________    ____    ___________   |     |  |  |&lt;br /&gt;
 |  |  |     \--[_/dev/sda6_]--[_r1_]--[_/dev/drbd1_]--/  |                   |                                   |                   |  \--[_/dev/drbd1_]--[_r1_]--[_/dev/sda6_]--/     |  |  |&lt;br /&gt;
 |  |  |                                          |       |                   |                                   |                   |       |                                          |  |  |&lt;br /&gt;
 |  |  |   Clustered LVM:                         |       |                   |                                   |                   |       |                      Clustered LVM:      |  |  |&lt;br /&gt;
 |  |  |   _________________________________      |       |                   |                                   |                   |       |   _________________________________      |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm02-win2012_]-----+  |  |&lt;br /&gt;
 |  |  |   __________________________________     |       |                   |                                   |                   |       |   __________________________________     |  |  |&lt;br /&gt;
 |  |  +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+       |                   |                                   |                   |       +--[_/dev/an-c05n01_vg0/vm05-freebsd9_]----+  |  |&lt;br /&gt;
 |  |  |   ___________________________________    |       |                   |                                   |                   |       |   ___________________________________    |  |  |&lt;br /&gt;
 |  |  \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/       |                   |                                   |                   |       \--[_/dev/an-c05n01_vg0/vm06-solaris11_]---/  |  |&lt;br /&gt;
 |  |                                                     |                   |                                   |                   |                                                     |  |&lt;br /&gt;
 |  |      _________________________________              |                   |                                   |                   |           _________________________________         |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm01-win2008_]-------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm01-win2008_]--------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm03-win7_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm03-win7_]-----------+  |&lt;br /&gt;
 |  |      ______________________________                 |                   |                                   |                   |           ______________________________            |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm04-win8_]----------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm04-win8_]-----------+  |&lt;br /&gt;
 |  |      _______________________________                |                   |                                   |                   |           _______________________________           |  |&lt;br /&gt;
 |  +-----[_/dev/an-c05n02_vg0/vm07-rhel6_]---------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm07-rhel6_]----------+  |&lt;br /&gt;
 |  |      ________________________________               |                   |                                   |                   |           ________________________________          |  |&lt;br /&gt;
 |  \-----[_/dev/an-c05n02_vg0/vm08-sles11_]--------------+                   |                                   |                   +----------[_/dev/an-c05n02_vg0/vm08-sles11_]---------/  |&lt;br /&gt;
 |         ___________________________                    |                   |                                   |                   |           ___________________________                  |&lt;br /&gt;
 |     /--[_/dev/an-c05n01_vg0/shared_]-------------------/                   |                                   |                   \----------[_/dev/an-c05n01_vg0/shared_]--\              |&lt;br /&gt;
 |     |   _________                                                          |     _________________________     |                                                  ________   |              |&lt;br /&gt;
 |     \--[_/shared_]                                                         |    | an-s01         Switch 1 |    |                                                 [_shared_]--/              |&lt;br /&gt;
 |                                                        ____________________|    |____  Back-Channel   ____|    |____________________                                                        |&lt;br /&gt;
 |                                                       | IPMI               =----=_03_]    Network    [_04_=----=               IPMI |                                                       |&lt;br /&gt;
 |                                                       | 10.20.51.1        ||    |_________________________|    ||        10.20.51.2 |                                                       |&lt;br /&gt;
 |                                  _________    _____   | 00:19:99:9C:9B:9E ||    | an-s02         Switch 2 |    || 00:19:99:9A:D8:E8 |   _____    _________                                  |&lt;br /&gt;
 |                                 {_sensors_}--[_BMC_]--|___________________||    |                         |    ||___________________|--[_BMC_]--{_sensors_}                                 |&lt;br /&gt;
 |                                                             ______ ______  |    |       VLAN ID 100       |    |  ______ ______                                                             |&lt;br /&gt;
 |                                                            | PSU1 | PSU2 | |    |____   ____   ____   ____|    | | PSU1 | PSU2 |                                                            |&lt;br /&gt;
 |____________________________________________________________|______|______|_|    |_03_]_[_07_]_[_08_]_[_04_|    |_|______|______|____________________________________________________________|&lt;br /&gt;
                                                                   || ||             |      |      |       |             || ||                                                                  &lt;br /&gt;
                                       /---------------------------||-||-------------|------/      \-------|-------------||-||---------------------------\                                      &lt;br /&gt;
                                       |                           || ||             |                     |             || ||                           |                                      &lt;br /&gt;
                        _______________|___                        || ||   __________|________     ________|__________   || ||                        ___|_______________                       &lt;br /&gt;
                       |             UPS 1 |                       || ||  |             PDU 1 |   |             PDU 2 |  || ||                       |             UPS 2 |                      &lt;br /&gt;
                       | an-u01            |                       || ||  | an-p01            |   | an-p02            |  || ||                       | an-u02            |                      &lt;br /&gt;
             _______   | 10.20.3.1         |                       || ||  | 10.20.2.1         |   | 10.20.2.2         |  || ||                       | 10.20.3.1         |   _______            &lt;br /&gt;
            {_Mains_}==| 00:C0:B7:58:3A:5A |=======================||=||==| 00:C0:B7:56:2D:AC |   | 00:C0:B7:59:55:7C |==||=||=======================| 00:C0:B7:C8:1C:B4 |=={_Mains_}           &lt;br /&gt;
                       |___________________|                       || ||  |___________________|   |___________________|  || ||                       |___________________|                      &lt;br /&gt;
                                                                   || ||                 || ||     || ||                 || ||                                                                  &lt;br /&gt;
                                                                   || \\===[ Port 1 ]====// ||     || \\====[ Port 2 ]===// ||                                                                  &lt;br /&gt;
                                                                   \\======[ Port 1 ]=======||=====//                       ||                                                                  &lt;br /&gt;
                                                                                            \\==============[ Port 2 ]======//                                                                  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:keanu-woah_01.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Subnets ==&lt;br /&gt;
&lt;br /&gt;
The cluster will use three separate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/16&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;255.255.0.0&amp;lt;/span&amp;gt;) networks;&lt;br /&gt;
&lt;br /&gt;
{{note|1=There are situations where it is not possible to add additional network cards, blades being a prime example. In these cases it will be up to the admin to decide how to proceed. If there is sufficient bandwidth, you can merge all networks, but it is advised in such cases to isolate IFN traffic from the SN/BCN traffic using [[VLAN]]s.}}&lt;br /&gt;
&lt;br /&gt;
If you plan to have two or more &#039;&#039;Anvil!&#039;&#039; platforms on the same network, then it is recommended that you use the third octal of the IP addresses to identify the cluster. We&#039;ve found the following works well:&lt;br /&gt;
&lt;br /&gt;
* Third octal is the cluster ID times 10&lt;br /&gt;
* Fourth octal is the node ID.&lt;br /&gt;
&lt;br /&gt;
In our case, we&#039;re building our fifth cluster, so node #1 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.1&amp;lt;/span&amp;gt; and node #2 will always have the final part of its IP be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x.y.50.2&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Purpose&lt;br /&gt;
!Subnet&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Internet-Facing Network ([[IFN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Servers hosted by the &#039;&#039;Anvil!&#039;&#039; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.1.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the server&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|-&lt;br /&gt;
|Storage Network ([[SN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
|-&lt;br /&gt;
|Back-Channel Network ([[BCN]])&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.0/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* Each node will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Node-specific [[IPMI]] or other out-of-band management devices will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; matches the node ID.&lt;br /&gt;
* Network switches will use the IP addresses &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.1.x&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the switch&#039;s sequence number.&lt;br /&gt;
* Switched [[PDU]]s, which we will use as backup fence devices, will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.2.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the PDU&#039;s sequence number.&lt;br /&gt;
* Network-managed [[UPS]]es with use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.3.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the UPS&#039;s sequence number.&lt;br /&gt;
* [[AN!CDB|Dashboard]] servers will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.4.x&amp;lt;/span&amp;gt; where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; is the dashboard&#039;s sequence number.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We will be using six interfaces, bonded into three pairs of two NICs in Active/Passive (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) configuration. Each link of each bond will be on alternate switches. We will also configure affinity by specifying interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; as primary for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; interfaces, respectively. This way, when everything is working fine, all traffic is routed through the same switch for maximum performance.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Red Hat supports bonding modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; as of [[RHEL]] 6.4. We do not recommend these bonding modes as we&#039;ve found the most reliable and consistent ability to survive switch failure and recovery with mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; only. If you wish to use a different bonding more, please be sure to test various failure modes extensively!}}&lt;br /&gt;
&lt;br /&gt;
If you can not install six interfaces in your server, then four interfaces will do with the [[SN]] and [[BCN]] networks merged.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you wish to merge the [[SN]] and [[BCN]] onto one interface, test to ensure that the storage traffic will not block cluster communication. Test by forming your cluster and then pushing your storage to maximum read and write performance for an extended period of time (minimum of several seconds). If the cluster partitions, you will need to do some advanced quality-of-service or other network configuration to ensure reliable delivery of cluster network traffic.}}&lt;br /&gt;
&lt;br /&gt;
[[image:brocade_icx6610_stock_01.jpg|thumb|right|375px|Brocade [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page ICX6610] switches. Photo by Brocade.]]&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use two [http://www.brocade.com/products/all/switches/product-details/icx-6610-switch/specifications.page Brocade ICX6610] switches, stacked.&lt;br /&gt;
&lt;br /&gt;
* Brocade ICX6610 [[Brocade Notes|stack switch configuration]].&lt;br /&gt;
&lt;br /&gt;
We will be using three [[VLAN]]s to isolate the three networks:&lt;br /&gt;
&lt;br /&gt;
* [[BCN]] will have VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[SN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;.&lt;br /&gt;
* [[IFN]] will have VLAN ID number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All other unassigned ports will be in the default VLAN ID of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, effectively disabling those ports.&lt;br /&gt;
&lt;br /&gt;
The actual mapping of interfaces to bonds to networks will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Subnet&lt;br /&gt;
!Cable Colour&lt;br /&gt;
![[VLAN]] ID&lt;br /&gt;
!Link 1&lt;br /&gt;
!Link 2&lt;br /&gt;
!Bond&lt;br /&gt;
!IP&lt;br /&gt;
|-&lt;br /&gt;
|[[BCN]]&lt;br /&gt;
|White&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[SN]]&lt;br /&gt;
|Green&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[IFN]]&lt;br /&gt;
|Black&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.x.y/16&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== A Note on STP ===&lt;br /&gt;
&lt;br /&gt;
Scanning Tree Protocol, [[STP]], is a protocol used for detecting and protecting against switch loops. Without it, if both ends of the same cable plugged into the same switch or VLAN, or if two cables run between the same pair of switches, a [[broadcast storm]] could cause the switches to hang and traffic would stop routing.&lt;br /&gt;
&lt;br /&gt;
The problem with STP in HA clusters though is that the attempt to detect loops requires blocking all other traffic for a short time. Though this is short, it is usually long enough to cause corosync to think that the peer node has failed, triggering a fence action. &lt;br /&gt;
&lt;br /&gt;
For this reason, we need to disable STP, either globally or at least on the ports used by corosync and drbd. How you actually do this will depend on the make and model of switch you have.&lt;br /&gt;
&lt;br /&gt;
With STP disabled, at least partially, the onus does fall on you to ensure that no one causes a switch loop. Please be sure to inform anyone who might plug things into the cluster&#039;s switches about this issue. Ensure that people are careful about what they plug into the switches and that new connections will not trigger a loop.&lt;br /&gt;
&lt;br /&gt;
== Setting Up the Network ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The following steps can easily get confusing, given how many files we need to edit. Losing access to your server&#039;s network is a very real possibility! &#039;&#039;&#039;Do not continue without direct access to your servers!&#039;&#039;&#039; If you have out-of-band access via [[iKVM]], console redirection or similar, be sure to test that it is working before proceeding.}}&lt;br /&gt;
&lt;br /&gt;
=== Planning The Use of Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
In production clusters, I generally intentionally get three separate dual-port controllers (two on-board interfaces plus two separate dual-port PCIe cards). I then ensure that no bond uses two interfaces on the same physical board. Thus, should a card or its bus interface fail, none of the bonds will fail completely.&lt;br /&gt;
&lt;br /&gt;
Lets take a look at an example layout;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ____________________                            &lt;br /&gt;
| [ an-c05n01 ]      |                           &lt;br /&gt;
|         ___________|            _______              &lt;br /&gt;
|        |     ______|           | bond0 |             &lt;br /&gt;
|        | O  | eth0 =-----------=---.---=------{&lt;br /&gt;
|        | n  |_____||  /--------=--/    |             &lt;br /&gt;
|        | b         |  |        |_______|             &lt;br /&gt;
|        | o   ______|  |         _______        &lt;br /&gt;
|        | a  | eth1 =--|--\     | bond1 |      &lt;br /&gt;
|        | r  |_____||  |   \----=--.----=------{&lt;br /&gt;
|        | d         |  |  /-----=--/    |       &lt;br /&gt;
|        |___________|  |  |     |_______|       &lt;br /&gt;
|         ___________|  |  |      _______        &lt;br /&gt;
|        |     ______|  |  |     | bond2 |       &lt;br /&gt;
|        | P  | eth2 =--|--|-----=---.---=------{&lt;br /&gt;
|        | C  |_____||  |  |  /--=--/    |       &lt;br /&gt;
|        | I         |  |  |  |  |_______|       &lt;br /&gt;
|        | e   ______|  |  |  |                  &lt;br /&gt;
|        |    | eth3 =--/  |  |                  &lt;br /&gt;
|        | 1  |_____||     |  |                  &lt;br /&gt;
|        |___________|     |  |                  &lt;br /&gt;
|         ___________|     |  |                  &lt;br /&gt;
|        |     ______|     |  |                  &lt;br /&gt;
|        | P  | eth4 =-----/  |                  &lt;br /&gt;
|        | C  |_____||        |                  &lt;br /&gt;
|        | I         |        |                  &lt;br /&gt;
|        | e   ______|        |                  &lt;br /&gt;
|        |    | eth5 =--------/                  &lt;br /&gt;
|        | 2  |_____||                           &lt;br /&gt;
|        |___________|                           &lt;br /&gt;
|____________________|                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider the possible failure scenarios:&lt;br /&gt;
&lt;br /&gt;
* The on-board controllers fail;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 1&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
* The PCIe #1 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; falls back onto &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PCIe 2&amp;lt;/span&amp;gt; controller.&lt;br /&gt;
* The PCIe #2 controller fails&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; is unaffected.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; remains on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; interface but losses its redundancy as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; is down.&lt;br /&gt;
&lt;br /&gt;
In all three failure scenarios, no network interruption occurs making for the most robust configuration possible.&lt;br /&gt;
&lt;br /&gt;
=== Connecting Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
As we will see soon, each node can be fenced either by calling its [[IPMI]] interface or by calling the [[PDU]] and cutting the node&#039;s power. Each of these methods are inherently single points of failure as each has only one network connection. To work around this concern, we will connect all IPMI interfaces to one switch and the PDUs to the secondary switch. This way, should a switch fail, only one of the two fence devices will fail and fencing in general will still be possible via the alternate fence device.&lt;br /&gt;
&lt;br /&gt;
By convention, we always connect the IPMI interfaces to the primary switch and the PDUs to the second switch.&lt;br /&gt;
&lt;br /&gt;
= Let&#039;s Build! =&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to need to install a bunch of programs, and one of those programs is needed before we can reconfigure the network. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge-utils&amp;lt;/span&amp;gt; has to be installed right away, so now is a good time to just install everything we need.&lt;br /&gt;
&lt;br /&gt;
== Why so Much Duplication of Commands? ==&lt;br /&gt;
&lt;br /&gt;
Most, but &#039;&#039;&#039;not&#039;&#039;&#039; all, commands will be issues equally on both nodes. At least up until we start configuring the cluster. To make it clear what to run on which node, all commands are defined either beside or under the node name on which to run the command.&lt;br /&gt;
&lt;br /&gt;
This does lead to a lot of duplication, but it&#039;s important to make sure it is clear when some command runs only on one node or the other. So please be careful, particularly later on, that you don&#039;t accidentally run a command on the wrong node.&lt;br /&gt;
&lt;br /&gt;
== Red Hat Enterprise Linux Specific Steps ==&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux is a commercial operating system that includes access to their repositories. This requires purchasing [http://www.redhat.com/products/enterprise-linux/server/ entitlements] and then [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/entitlements.html registering] machines with their [https://rhn.redhat.com Red Hat Network].&lt;br /&gt;
&lt;br /&gt;
This tutorial uses [[GFS2]], which is provided by their [http://www.redhat.com/products/enterprise-linux-add-ons/resilient-storage/ Resilient Storage Add-On]. The includes the [http://www.redhat.com/products/enterprise-linux-add-ons/high-availability/ High-Availability Add-On] which provides the rest of the HA cluster stack. &lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve finished your install, you can quickly register your node with RHN and add the resilient storage add-on with the following two commands.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You need to replace &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$user&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;$pass&amp;lt;/span&amp;gt; with your RHN account details.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n01.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rhnreg_ks --username &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --force --profilename &amp;quot;an-c05n02.alteeve.ca&amp;quot;&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-rs-6&lt;br /&gt;
rhn-channel --add --user &amp;quot;$user&amp;quot; --password &amp;quot;$pass&amp;quot; --channel=rhel-x86_64-server-optional-6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get any errors from the above commands, please contact your support representative. They will be able to help sort out any account or entitlement issues.&lt;br /&gt;
&lt;br /&gt;
== Update the OS ==&lt;br /&gt;
&lt;br /&gt;
Before we begin at all, let&#039;s update our OS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Required Programs ==&lt;br /&gt;
&lt;br /&gt;
This will install all the software needed to run the &#039;&#039;Anvil!&#039;&#039; and configure [[IPMI]] for use as a fence device. This won&#039;t cover [[DRBD]] or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; which will be covered in dedicated sections below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install cman corosync rgmanager ricci gfs2-utils ntp libvirt lvm2-cluster \&lt;br /&gt;
            qemu-kvm qemu-kvm-tools virt-install virt-viewer syslinux wget gpm \&lt;br /&gt;
            rsync freeipmi freeipmi-bmc-watchdog freeipmi-ipmidetectd OpenIPMI \&lt;br /&gt;
            OpenIPMI-libs OpenIPMI-tools fence-agents vim man ccs bridge-utils \&lt;br /&gt;
            openssh-clients perl screen dmidecode acpid mlocate gd \&lt;br /&gt;
            policycoreutils-python expect perl-Time-HiRes openssl-devel \&lt;br /&gt;
            postfix cyrus-sasl cyrus-sasl-plain perl-TermReadKey perl-XML-Simple \&lt;br /&gt;
            perl-Net-SSH2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we go any further, we&#039;ll want to destroy the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge. We&#039;re going to be creating our own bridge that gives our servers direct access to the outside network.&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; does &#039;&#039;&#039;not&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/null &amp;gt;/etc/libvirt/qemu/networks/default.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you already see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; when you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;, the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; bridge has already started. You can stop and disable it with the following commands;&lt;br /&gt;
&lt;br /&gt;
* If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; &#039;&#039;&#039;does&#039;&#039;&#039; exist:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh net-destroy default&lt;br /&gt;
virsh net-autostart default --disable&lt;br /&gt;
virsh net-undefine default&lt;br /&gt;
/etc/init.d/iptables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virbr0&amp;lt;/span&amp;gt; should be gone now and it won&#039;t return.&lt;br /&gt;
&lt;br /&gt;
== Installing Programs Needed for Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Sep. 01, 2014; As of a recent update, the perl modules installed in this section no longer work. The most recent release of the monitoring and alert system has been changed to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;postfix&amp;lt;/span&amp;gt; running as a secured local relay to the desired mail server. This section of the tutorial will be rewritten as soon as possible to reflect the new mail system.}}&lt;br /&gt;
&lt;br /&gt;
The alert system will be using is written in perl. Some modules need to be installed from source, which requires the develop environment group and some development libraries to be installed. If you prefer to monitor your nodes another way, then you can skip this section.&lt;br /&gt;
&lt;br /&gt;
This installs a group of programs used for development environments.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum groupinstall development&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lots of yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need a few more packages still. This steps adds those packages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install perl-CPAN perl-YAML-Tiny perl-Net-SSLeay perl-CGI openssl-devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;some more yum output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next stage installs some perl modules that are not available as RPM packages. Specifically, it tells perl to not prompt for input and just do the install. This saves a lot of questions and answers. If you need to do a non-standard [[CPAN]] install, skip the first line and you will run interactively.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The most recent version of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;YAML&amp;lt;/span&amp;gt; fails to install because it depends on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Module::Install::TestBase&amp;lt;/span&amp;gt;, which in turn depends on itself, and so fails to install. Please skip this part for now. If you need assistance, please feel free to [[Support|contact us]] and we will be happy to assist.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PERL_MM_USE_DEFAULT=1&lt;br /&gt;
perl -MCPAN -e &#039;install Test::More&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install(&amp;quot;YAML&amp;quot;)&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Moose::Role&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Throwable::Error&#039;&lt;br /&gt;
perl -MCPAN -e &#039;install Email::Sender::Transport::SMTP::TLS&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a massive amount of CPAN output, test and build messages... No seriously, go grab a coffee&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done! &lt;br /&gt;
&lt;br /&gt;
We&#039;ll setup the alert system a little later on. Now though, all the dependencies will have been met.&lt;br /&gt;
&lt;br /&gt;
== Switch Network Daemons ==&lt;br /&gt;
&lt;br /&gt;
The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; daemon is much more flexible and is perfect for machines like laptops which move around networks a lot. However, it does this by making a lot of decisions for you and changing the network as it sees fit. As good as this is for laptops and the like, it&#039;s not appropriate for servers. We will want to use the traditional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum remove NetworkManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; to start with the system.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig --list network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Altering Which Daemons Start on Boot ==&lt;br /&gt;
&lt;br /&gt;
Several of the applications we installed above include [[daemon]]s that either start on boot or stay off on boot. Likewise, some daemons remain stopped after they&#039;re installed, and we want to start them now.&lt;br /&gt;
&lt;br /&gt;
As we work on each component, we&#039;ll discuss in more detail why we want each to either start or stop on boot. For now, let&#039;s just make the changes.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt; command to make sure the daemons we want to start on boot do so.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig network on&lt;br /&gt;
chkconfig ntpd on&lt;br /&gt;
chkconfig ricci on&lt;br /&gt;
chkconfig modclusterd on&lt;br /&gt;
chkconfig ipmi on&lt;br /&gt;
chkconfig iptables on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next, we&#039;ll tell the system what daemons to leave off on boot.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig acpid off&lt;br /&gt;
chkconfig ip6tables off&lt;br /&gt;
chkconfig clvmd off&lt;br /&gt;
chkconfig gfs2 off&lt;br /&gt;
chkconfig libvirtd off&lt;br /&gt;
chkconfig cman off&lt;br /&gt;
chkconfig rgmanager off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now start the daemons we&#039;ve installed and want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd start&lt;br /&gt;
/etc/init.d/ricci start&lt;br /&gt;
/etc/init.d/modclusterd start&lt;br /&gt;
/etc/init.d/ipmi start&lt;br /&gt;
/etc/init.d/iptables start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, stop the daemons we don&#039;t want running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd stop&lt;br /&gt;
/etc/init.d/acpid stop&lt;br /&gt;
/etc/init.d/ip6tables stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can verify that the services you want to start will and the ones you don&#039;t want to won&#039;t using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chkconfig&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
acpid          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
blk-availability	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
bmc-watchdog   	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
cgconfig       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
cgred          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
clvmd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cman           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
corosync       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpglockd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
cpuspeed       	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
dnsmasq        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
drbd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ebtables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gfs2           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
gpm            	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
haldaemon      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ip6tables      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ipmi           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ipmidetectd    	0:off	1:off	2:off	3:on	4:off	5:on	6:off&lt;br /&gt;
ipmievd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsi          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
iscsid         	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
kdump          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
ksm            	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ksmtuned       	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirt-guests 	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
libvirtd       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
messagebus     	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
modclusterd    	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
netfs          	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
nfslock        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
ntpdate        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
numad          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
oddjobd        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
psacct         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
quota_nld      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
radvd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rdisc          	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
restorecond    	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rgmanager      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rhnsd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rhsmcertd      	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
ricci          	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rngd           	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rpcbind        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcgssd        	0:off	1:off	2:off	3:on	4:on	5:on	6:off&lt;br /&gt;
rpcsvcgssd     	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
saslauthd      	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
smartd         	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
svnserve       	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off&lt;br /&gt;
winbind        	0:off	1:off	2:off	3:off	4:off	5:off	6:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you did a minimal OS install, or any install without a graphical interface, you will be booting into [https://en.wikipedia.org/wiki/Runlevel#Red_Hat_Linux_and_Fedora run-level] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;. If you did install a graphical interface, which is not wise, then your default run-level will either be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;. You can determine which by looking in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/inittab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once you know the run-level you&#039;re using, look for the daemon you are interested in and the see if it&#039;s set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:on&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x:off&amp;lt;/span&amp;gt;. That will confirm that the associated daemon is set to start on boot or not, respectively.&lt;br /&gt;
&lt;br /&gt;
== Network Security ==&lt;br /&gt;
&lt;br /&gt;
The interfaces connected to the [[IFN]] are usually connected to an untrusted network, like the Internet. If you do not need access to the IFN from the nodes themselves, you can increase security by not assigning an IP address to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; interface which we will configure shortly. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge device will need to be up so that virtual machines can route through it to the outside world, of course.&lt;br /&gt;
&lt;br /&gt;
If you do decide to assign an IP to the nodes&#039; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;, you will want to restrict inbound access as much as possible. A good policy is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DROP&amp;lt;/span&amp;gt; all traffic inbound from the hosted servers, unless you trust them specifically. &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to open ports for both Red Hat&#039;s high-availability add-on components and LinBit&#039;s DRBD software. You can find details here:&lt;br /&gt;
&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html#s1-iptables_firewall-CA RHEL 6 Cluster Configuration, Firewall Setup]&lt;br /&gt;
* [http://www.drbd.org/users-guide-8.3/s-prepare-network.html Linbit&#039;s DRBD, Firewall Configuration]&lt;br /&gt;
&lt;br /&gt;
Specifically, we&#039;ll be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ACCEPT&amp;lt;/span&amp;gt;ing the ports listed below on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Component&lt;br /&gt;
!Protocol&lt;br /&gt;
!Port&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[dlm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;21064&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[drbd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;+&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[luci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8084&amp;lt;/span&amp;gt;&lt;br /&gt;
|&#039;&#039;Optional&#039;&#039; web-based configuration tool, not used in this tutorial but documented for reference.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[modclusterd]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16851&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ricci]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[TCP]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11111&amp;lt;/span&amp;gt;&lt;br /&gt;
|Each [[DRBD]] resource will use an additional port, generally counting up (ie: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt; will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7791&amp;lt;/span&amp;gt; and so on).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[totem]]&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[UDP]]/[[multicast]]&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5404&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;5405&amp;lt;/span&amp;gt;&lt;br /&gt;
|Uses a multicast group for cluster communications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuring iptables ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; is an entire topic on its own. There are many good tutorials on the Internet discussing it, including an [[TLUG Talk: Netfilter|older introduction to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; tutorial]] hosted here. If you are unfamiliar with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt;, it is well worth taking a break from this tutorial and getting familiar with it, in concept if nothing else.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This opens up enough ports for 100 virtual servers. This is entirely arbitrary range, which you probably want to reduce (or possibly increase). This also allows incoming connections from both the [[BCN]] and [[IFN]], which you may want to change. Please look below for the &#039;remote desktop&#039; rules comment.}}&lt;br /&gt;
&lt;br /&gt;
The first thing we want to do is see what the current firewall policy is. We can do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt;, a tool designed to backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; but also very useful for seeing what configuration is currently in memory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:17 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [440:262242]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:17 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Wed Nov 13 15:49:51 2013&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [336:129880]&lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Wed Nov 13 15:49:51 2013&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This tutorial will create two DRBD resources. Each resource will use a different [[TCP]] port. By convention, they start at port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and increment up per resource. So we will be opening ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7788&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7789&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Open ports;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [52:8454]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cman (corosync&#039;s totem)&lt;br /&gt;
iptables -I INPUT -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 -d 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport -p udp -s 10.20.0.0/16 --dports 5404,5405 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# dlm&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 21064 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# ricci&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 11111 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# modclusterd&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 16851 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# multicast (igmp; Internet group management protocol)&lt;br /&gt;
iptables -I INPUT -p igmp -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DRBD resource 0 and 1 - on the SN&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7788 -j ACCEPT&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.10.0.0/16 -d 10.10.0.0/16 --dport 7789 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# KVM live-migration ports on BCN&lt;br /&gt;
iptables -I INPUT -p tcp -m tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 49152:49216 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow remote desktop access to servers on both the IFN and BCN. This opens 100 ports. If you want&lt;br /&gt;
# to change this range, put the range &#039;5900:(5900+VM count)&#039;.&lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.20.0.0/16 -d 10.20.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
iptables -I INPUT -m state --state NEW -p tcp -s 10.255.0.0/16 -d 10.255.0.0/16 --dport 5900:5999 -j ACCEPT &lt;br /&gt;
&lt;br /&gt;
# See the new configuration&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 13:55:54 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [16:5452]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 13:55:54 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, the cluster stack should work, but we&#039;re not done yet. The changes we made above altered packet filtering in memory, but the configuration has not been saved to disk. This configuration is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/iptables&amp;lt;/span&amp;gt;. You could pipe the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables-save&amp;lt;/span&amp;gt; to it, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; initialization script provides a facility to save the configuration, so we will use it instead.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;iptables&amp;lt;/span&amp;gt; and check that the changes stuck.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:06:43 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41947:617170766]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:06:43 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/iptables restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iptables: Flushing firewall rules:                         [  OK  ]&lt;br /&gt;
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]&lt;br /&gt;
iptables: Unloading modules:                               [  OK  ]&lt;br /&gt;
iptables: Applying firewall rules:                         [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables-save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.4.7 on Tue Mar 25 14:07:00 2014&lt;br /&gt;
*filter&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:FORWARD ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [41570:54856696]&lt;br /&gt;
-A INPUT -s 10.255.0.0/16 -d 10.255.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m tcp --dport 49152:49216 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7789 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.10.0.0/16 -d 10.10.0.0/16 -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT &lt;br /&gt;
-A INPUT -p igmp -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -s 10.20.0.0/16 -d 10.20.0.0/16 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT &lt;br /&gt;
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT &lt;br /&gt;
-A INPUT -p icmp -j ACCEPT &lt;br /&gt;
-A INPUT -i lo -j ACCEPT &lt;br /&gt;
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT &lt;br /&gt;
-A INPUT -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
-A FORWARD -j REJECT --reject-with icmp-host-prohibited &lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Tue Mar 25 14:07:00 2014&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to enable any other kind of access or otherwise modify the firewall on each node, please do so now. This way, as you proceed with building the &#039;&#039;Anvil!&#039;&#039;, you&#039;ll hit firewall problems as soon as they arise.&lt;br /&gt;
&lt;br /&gt;
== Mapping Physical Network Interfaces to ethX Device Names ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This process is a little lengthy and it would add a fair amount of length to document the process on both nodes. So for this section, only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will be shown. Please repeat this process for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:an-c05n01_crappy_back_pic_showing_NIC_names_01.jpg|thumb|500px|right|Awesome quality picture of labelled interfaces.]]&lt;br /&gt;
&lt;br /&gt;
Consistency is the mother of stability.&lt;br /&gt;
&lt;br /&gt;
When you install [[RHEL]], it somewhat randomly assigns an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ethX&amp;lt;/span&amp;gt; device to each physical network interfaces. Purely technically speaking, this is fine. So long as you know which interface has which device name, you can setup the node&#039;s networking.&lt;br /&gt;
&lt;br /&gt;
However!&lt;br /&gt;
&lt;br /&gt;
Consistently assigning the same device names to physical interfaces makes supporting and maintaining nodes a lot easier!&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got six physical network interfaces, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. As you recall from earlier, we want to make sure that each pair of interfaces for each network spans two physical network cards. &lt;br /&gt;
&lt;br /&gt;
Most servers have at least two on-board network cards labelled &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;quot; and &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;quot;. These tend to correspond to lights on the front of the server, so we will start by naming these interfaces &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;, respectively. After that, you are largely free to assign names to interfaces however you see fit.&lt;br /&gt;
&lt;br /&gt;
What matters most of all is that, whatever order you choose, it&#039;s consistent across your &#039;&#039;Anvil!&#039;&#039; nodes.&lt;br /&gt;
&lt;br /&gt;
Before we touch anything, let&#039;s make a backup of what we have. This way, we have an easy out in case we &amp;quot;oops&amp;quot; a files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /root/backups/&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
created directory /root/backups&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
network-scripts/ifcfg-lo&lt;br /&gt;
network-scripts/ifdown -&amp;gt; ../../../sbin/ifdown&lt;br /&gt;
network-scripts/ifdown-bnep&lt;br /&gt;
network-scripts/ifdown-eth&lt;br /&gt;
network-scripts/ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-ipv6&lt;br /&gt;
network-scripts/ifdown-isdn -&amp;gt; ifdown-ippp&lt;br /&gt;
network-scripts/ifdown-post&lt;br /&gt;
network-scripts/ifdown-ppp&lt;br /&gt;
network-scripts/ifdown-routes&lt;br /&gt;
network-scripts/ifdown-sit&lt;br /&gt;
network-scripts/ifdown-tunnel&lt;br /&gt;
network-scripts/ifup -&amp;gt; ../../../sbin/ifup&lt;br /&gt;
network-scripts/ifup-aliases&lt;br /&gt;
network-scripts/ifup-bnep&lt;br /&gt;
network-scripts/ifup-eth&lt;br /&gt;
network-scripts/ifup-ippp&lt;br /&gt;
network-scripts/ifup-ipv6&lt;br /&gt;
network-scripts/ifup-isdn -&amp;gt; ifup-ippp&lt;br /&gt;
network-scripts/ifup-plip&lt;br /&gt;
network-scripts/ifup-plusb&lt;br /&gt;
network-scripts/ifup-post&lt;br /&gt;
network-scripts/ifup-ppp&lt;br /&gt;
network-scripts/ifup-routes&lt;br /&gt;
network-scripts/ifup-sit&lt;br /&gt;
network-scripts/ifup-tunnel&lt;br /&gt;
network-scripts/ifup-wireless&lt;br /&gt;
network-scripts/init.ipv6-global&lt;br /&gt;
network-scripts/net.hotplug&lt;br /&gt;
network-scripts/network-functions&lt;br /&gt;
network-scripts/network-functions-ipv6&lt;br /&gt;
&lt;br /&gt;
sent 134870 bytes  received 655 bytes  271050.00 bytes/sec&lt;br /&gt;
total size is 132706  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Making Sure All Network Interfaces are Started ===&lt;br /&gt;
&lt;br /&gt;
What we&#039;re going to do is watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;, unplug each cable and see which interface shows a lost link. This will tell us what &#039;&#039;current&#039;&#039; name is given to a particular physical interface. We&#039;ll write the current name down beside the name of the interface we want. Once we&#039;ve done this to all interfaces, we&#039;ll now how we have to move names around.&lt;br /&gt;
&lt;br /&gt;
Before we can pull cables though, we have to tell the system to start all of the interfaces. By default, all but one or two interfaces will be disabled on boot.&lt;br /&gt;
&lt;br /&gt;
Run this to see which interfaces are up;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:303118 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:152952 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:344900765 (328.9 MiB)  TX bytes:14424290 (13.7 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, only the interface currently named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; was started. We&#039;ll need to edit the other interface configuration files to tell them to start when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; starts. To do this, we edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-ethX&amp;lt;/span&amp;gt; files and change &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT&amp;lt;/span&amp;gt; variable to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ONBOOT=&amp;quot;yes&amp;quot;&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
By default, most interfaces will be set to try and acquire an IP address from a [[DHCP on an RPM-based OS|DHCP]] server, We can see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; already has an IP address, so to save time, we&#039;re going to tell the other interfaces to start without an IP address at all. If we didn&#039;t do this, restarting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; would take a long time waiting for DHCP requests to time out.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We skip &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth4&amp;lt;/span&amp;gt; in the next step because it&#039;s already up.}}&lt;br /&gt;
&lt;br /&gt;
Now we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the files. This is a lot faster and easier than editing each file by hand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Change eth0 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&lt;br /&gt;
# Change eth1 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&lt;br /&gt;
# Change eth2 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&lt;br /&gt;
# Change eth3 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&lt;br /&gt;
# Change eth5 to start on boot with no IP address.&lt;br /&gt;
sed -i &#039;s/ONBOOT=.*/ONBOOT=&amp;quot;yes&amp;quot;/&#039;        /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
sed -i &#039;s/BOOTPROTO=.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see how the file was changed by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to compare the backed up version against the edited one. Let&#039;s look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt; to see this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-28 17:20:38.978458128 -0400&lt;br /&gt;
@@ -2 +2 @@&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -5 +5 @@&lt;br /&gt;
-ONBOOT=&amp;quot;no&amp;quot;&lt;br /&gt;
+ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent. You can check the other files as well to confirm that they were edited as well, if you wish. Once you are happy with the changes, restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; initialization script.&lt;br /&gt;
&lt;br /&gt;
{{note|1= You may see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[FAILED]&amp;lt;/span&amp;gt; while stopping some interfaces, this is not a concern.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Determining IP information for eth4... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, we&#039;ll see all six interfaces have been started!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2433 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:150042 (146.5 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:35  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c335/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:2416 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:148176 (144.7 KiB)  TX bytes:3066 (2.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:04  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e004/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:36 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1026 (1.0 KiB)  TX bytes:5976 (5.8 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr A0:36:9F:02:E0:05  &lt;br /&gt;
          inet6 addr: fe80::a236:9fff:fe02:e005/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:1606 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:98242 (95.9 KiB)  TX bytes:2102 (2.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:308572 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153402 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345254511 (329.2 MiB)  TX bytes:14520378 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:2052 (2.0 KiB)  TX bytes:3114 (3.0 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3540 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3540 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652436 (2.5 MiB)  TX bytes:2652436 (2.5 MiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can start creating the list of what physical interfaces have what current names.&lt;br /&gt;
&lt;br /&gt;
=== Finding Current Names for Physical Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Once you know how you want your interfaces, create a little table like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we want to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; to watch the system log file &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; and print to screen messages as they&#039;re written to the log. To do this, run;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run this, the cursor will just sit there and nothing will be printed to screen at first. This is fine, this tells us that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; is waiting for new records. We&#039;re now going to methodically unplug each network cable, wait a moment and then plug it back in. Each time we do this, we&#039;ll write down the interface name that was reported as going down and then coming back up. &lt;br /&gt;
&lt;br /&gt;
The first cable we&#039;re going to unplug is the one in the physical interface we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:36:06 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 17:36:19 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see that the physical interface that we &#039;&#039;want&#039;&#039; to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; is currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;. So we&#039;ll add that to our chart.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll unplug the cable we want to make &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:38:01 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 17:38:04 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;, so we&#039;ll write that in beside the &amp;quot;Want&amp;quot; column&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep doing this for the other four cables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 17:39:28 an-c05n01 kernel: e1000e: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:30 an-c05n01 kernel: e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:35 an-c05n01 kernel: e1000e: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:37 an-c05n01 kernel: e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 17:39:40 an-c05n01 kernel: igb: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:43 an-c05n01 kernel: igb: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 17:39:47 an-c05n01 kernel: igb: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 17:39:51 an-c05n01 kernel: igb: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The finished table is this;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Have&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we know how we want to move the names around!&lt;br /&gt;
&lt;br /&gt;
=== Building the MAC Address List ===&lt;br /&gt;
&lt;br /&gt;
Every network interface has a unique [[MAC]] address assigned to it when it is built. Think of this sort of like a globally unique serial number. Because it&#039;s guaranteed to be unique, it&#039;s a convenient way for the [[operating system]] to create a persistent map between real interfaces and names. If we didn&#039;t use these, then each time you rebooted your node, it would possibly mean that the names get juggled. Not very good.&lt;br /&gt;
&lt;br /&gt;
[[RHEL]] uses two files for creating this map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysconfig/network-scripts/ifcfg-eth*&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt; can be rebuilt by running a command, so we&#039;re not going to worry about it. We&#039;ll just delete in a little bit and then recreate it.&lt;br /&gt;
&lt;br /&gt;
The files we care about are the six &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files. Inside each of these is a variable named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt;. The value set here will tell the OS what physical network interface the given file is configuring. We know from the list we created how we want to move the files around. &lt;br /&gt;
&lt;br /&gt;
To recap:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; MAC address in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So lets create a new table. This one we will use to write down the MAC addresses we want to set for each device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we know that the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is the one we want to move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; to show the information for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; interface only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.255.0.33  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:315979 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:153610 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:345711965 (329.6 MiB)  TX bytes:14555290 (13.8 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We want the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; value, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;. This will be moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;, so lets write that down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt; to be the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;. We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; again, but this time we&#039;ll do a little [[bash]]-fu to reduce the output to just the MAC address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth5 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:19:99:9C:9B:9F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This simply reduced the output to just the line with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; line in it, then it split the line on spaces and printed just the fifth value, which is the MAC address currently assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;. We&#039;ll write this down beside &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we want to move the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;. So lets get the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; MAC address and add it to the list as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth0 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:34&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we want to move &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth1 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1B:21:81:C3:35&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second to last one is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;, which will move to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth2 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:04&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; moves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig eth3 | grep HWaddr | awk &#039;{print $5}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A0:36:9F:02:E0:05&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our complete list of new MAC address is;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Device &lt;br /&gt;
!New MAC address&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9E&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9C:9B:9F&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:34&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1B:21:81:C3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:04&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;A0:36:9F:02:E0:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
=== Changing the Interface Device Names ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step is best done when you have direct access to the node. The reason is that the following changes require the network to be totally stopped in order to work without a reboot. If you can&#039;t get physical access, then when we get to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start_udev&amp;lt;/span&amp;gt; step, reboot the node instead.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re about to change which physical interfaces have which device names. If we don&#039;t stop the network first, we won&#039;t be able to restart them later. If we waited until later, the kernel would see a conflict between what it thinks the MAC-to-name mapping should be compared to what it sees in the configuration. The only way around this is a reboot, which is kind of a waste. So by stopping the network now, we clear the kernel&#039;s view of the network and avoid the problem entirely.&lt;br /&gt;
&lt;br /&gt;
So, stop the network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm that it&#039;s stopped by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt;. It should return nothing at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;No output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Next, delete the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/udev/rules.d/70-persistent-net.rules&amp;lt;/span&amp;gt; file. We&#039;ll regenerate it after we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/udev/rules.d/70-persistent-net.rules &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
rm: remove regular file `/etc/udev/rules.d/70-persistent-net.rules&#039;? y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to edit each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; files and change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; value to the new addresses we wrote down in our list. Let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the new value from our list;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the file and then move on to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&amp;lt;/span&amp;gt; entry to the new MAC address;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Continue editing the other four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-eth{2..5}&amp;lt;/span&amp;gt; files in the same manner.&lt;br /&gt;
&lt;br /&gt;
Once all the files have been edited, we will regenerate the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70-persistent-net.rules&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
start_udev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting udev:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Test the New Network Name Mapping ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start networking again and see if the remapping worked!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:  &lt;br /&gt;
Bringing up interface eth4:&lt;br /&gt;
Determining IP information for eth4...PING 10.255.255.254 (10.255.255.254) from 10.255.0.33 eth4: 56(84) bytes of data.&lt;br /&gt;
&lt;br /&gt;
--- 10.255.255.254 ping statistics ---&lt;br /&gt;
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3000ms&lt;br /&gt;
pipe 3&lt;br /&gt;
 failed.&lt;br /&gt;
                                                           [FAILED]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What happened!?&lt;br /&gt;
&lt;br /&gt;
If you recall, the old &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; device was the interface we moved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;. The new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; is not plugged into a network with access to our DHCP server, so it failed to get an IP address. To fix this, we&#039;ll disable DHCP on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt; and enable it on the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; (which used to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;none&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
sed -i &#039;s/BOOTPROTO.*/BOOTPROTO=&amp;quot;dhcp&amp;quot;/&#039; /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll restart the network and this time we should be good.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth1:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth2:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth3:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth4:                              [  OK  ]&lt;br /&gt;
Shutting down interface eth5:                              [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface eth0:&lt;br /&gt;
Determining IP information for eth0... done.&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Bringing up interface eth1:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth2:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth3:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth4:                                [  OK  ]&lt;br /&gt;
Bringing up interface eth5:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last step is to again &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system log and then unplug and plug-in the cables. If everything went well, they should be in the right order now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 28 18:44:24 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:27 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:31 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:34 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:35 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:38 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:39 an-c05n01 kernel: e1000e: eth3 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:42 an-c05n01 kernel: e1000e: eth3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Oct 28 18:44:45 an-c05n01 kernel: igb: eth4 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:49 an-c05n01 kernel: igb: eth4 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Oct 28 18:44:50 an-c05n01 kernel: igb: eth5 NIC Link is Down&lt;br /&gt;
Oct 28 18:44:54 an-c05n01 kernel: igb: eth5 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo! Done!&lt;br /&gt;
&lt;br /&gt;
At this point, I like to refresh the backup. We&#039;re going to be making more changes later at it would be nice to not have to redo this step again, should something go wrong.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/sysconfig/network-scripts /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
network-scripts/&lt;br /&gt;
network-scripts/ifcfg-eth0&lt;br /&gt;
network-scripts/ifcfg-eth1&lt;br /&gt;
network-scripts/ifcfg-eth2&lt;br /&gt;
network-scripts/ifcfg-eth3&lt;br /&gt;
network-scripts/ifcfg-eth4&lt;br /&gt;
network-scripts/ifcfg-eth5&lt;br /&gt;
&lt;br /&gt;
sent 1955 bytes  received 130 bytes  4170.00 bytes/sec&lt;br /&gt;
total size is 132711  speedup is 63.65&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Repeat this process for the other node. Once both nodes have the matching physical interface to device names, we&#039;ll be ready to move on to the next step!&lt;br /&gt;
&lt;br /&gt;
== Configuring our Bridge, Bonds and Interfaces ==&lt;br /&gt;
&lt;br /&gt;
To setup our network, we will need to edit the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-bondX&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; scripts.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; device is a bridge, like a virtual network switch, which will be used to route network connections between the virtual machines and the outside world, via the [[IFN]]. If you look in the [[#Network|network map]], you will see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; virtual interface connects to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, which links to the outside world, and it connects to all servers. Just like a normal switch does. You will also note that the bridge will have the [[IP]] addresses, not the bonded interface &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;. It will instead be slaved to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; virtual devices work a lot like the network version of [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]] arrays. They take two real links and turn them into one redundant link. In our case, each link in the bond will go to a different switch, protecting our links for interface, cable, port or entire switch failures. Should any of these fail, the bond will switch to the backup link so quickly that the applications on the nodes will not notice anything happened.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Bridge configuration files &#039;&#039;&#039;must&#039;&#039;&#039; have a file name which will sort &#039;&#039;&#039;after&#039;&#039;&#039; the interface and bridge files. The actual device name can be whatever you want though. If the system tries to start a bridge before its slaved interface is up, it will fail. I personally like to use the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbrX&amp;lt;/span&amp;gt; for &amp;quot;&#039;&#039;&#039;v&#039;&#039;&#039;irtual machine &#039;&#039;&#039;br&#039;&#039;&#039;idge&amp;quot;. You can use whatever makes sense to you, with the above concern in mind.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to be editing a lot of files. It&#039;s best to lay out what we&#039;ll be doing in a chart. So our setup will be:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Node&lt;br /&gt;
!BCN IP and Device&lt;br /&gt;
!SN IP and Device&lt;br /&gt;
!IFN IP and Device&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.1&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.10.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.50.2&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; slaved)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating New Network Configuration Files ===&lt;br /&gt;
&lt;br /&gt;
The new bond and bridge devices we want to create do not exist at all yet. So we will start by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt;ing the configuration files we will need.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-bond{0,1,2}&lt;br /&gt;
touch /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Bridge ===&lt;br /&gt;
&lt;br /&gt;
We&#039;ll start in reverse order, crafting the bridge&#039;s script first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bridge:&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-vbr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bridge&lt;br /&gt;
DEVICE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
TYPE=&amp;quot;Bridge&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.255.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
GATEWAY=&amp;quot;10.255.255.254&amp;quot;&lt;br /&gt;
DNS1=&amp;quot;8.8.8.8&amp;quot;&lt;br /&gt;
DNS2=&amp;quot;8.8.4.4&amp;quot;&lt;br /&gt;
DEFROUTE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you have a Red Hat account, you can read up on what the [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html option above] mean, and specifics of [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html bridge] devices. In case you don&#039;t though, here is a summary:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the actual name given to this device. Generally is matches the file name. In this case, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; and the file name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt;. This matching of file name to device name is by convention and not strictly required.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Ethernet&amp;lt;/span&amp;gt;, the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bridge&amp;lt;/span&amp;gt;, as we use here. Note that these values are &#039;&#039;&#039;case-sensitive&#039;&#039;&#039;! By setting this here, we&#039;re telling the [[OS]] that we&#039;re creating a bridge device.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NM_CONTROLLED&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, which is the default, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;, as we set here. This tells [[Network Manager]] that it is not allowed to manage this device. We&#039;ve removed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NetworkManager&amp;lt;/span&amp;gt; package, so this is not strictly needed, but we&#039;ll add it just in case it gets installed in the future.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BOOTPROTO&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;, which we&#039;re using here, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dhcp&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bootp&amp;lt;/span&amp;gt; if you want the interface to get an IP from a DHCP or BOOTP server, respectively. We&#039;re setting it to static, so we want this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPADDR&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the [[dotted-decimal]] IP address we&#039;re assigning to this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NETMASK&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the dotted-decimal [[subnet mask]] for this interface.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;GATEWAY&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address the node will contact when we it needs to send traffic to other networks, like the Internet.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS1&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the primary domain name server to use when the node needs to translate a host or domain name into an IP address which wasn&#039;t found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DNS2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the IP address of the backup domain name server, should the primary DNS server specified above fail.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt;&lt;br /&gt;
|This can be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;, as we&#039;ve set it here, or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;. If two or more interfaces has &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEFROUTE&amp;lt;/span&amp;gt; set, the interface with this variable set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; will be used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating the Bonded Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;ll can create the three bonding configuration files. This is where two physical network interfaces are tied together to work like a single, highly available network interface. You can think of a bonded interface as being akin to [[TLUG_Talk:_Storage_Technologies_and_Theory#Level_1|RAID level 1]]; A new virtual device is created out of two real devices.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to see a long line called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html BONDING_OPTS]&amp;lt;/span&amp;gt;&amp;quot;. Let&#039;s look at the meaning of these options before we look at the configuration; &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the Linux kernel what kind of bond we&#039;re creating here. There are [https://www.kernel.org/doc/Documentation/networking/bonding.txt seven modes] available, each with a numeric value representing them. We&#039;re going use the &amp;quot;Active/Passive&amp;quot; mode, known as mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active-backup&amp;lt;/span&amp;gt;). As of [[RHEL]] 6.4, modes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-rr&amp;lt;/span&amp;gt;) and mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;balance-xor&amp;lt;/span&amp;gt;) are supported for use with [[corosync]]. Given the proven reliability of surviving numerous tested failure and recovery tests though, AN! still strongly recommends mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;miimon&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the kernel how often, in milliseconds, to check for unreported link failures. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt; which tells the bonding driver to check if the network cable has been unplugged or plugged in every 100 milliseconds. Most modern drivers will report link state via their driver, so this option is not strictly required, but it is recommended for extra safety.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;use_carrier&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; tells the driver to use the driver to maintain the link state. Some drivers don&#039;t support that. If you run into trouble where the link shows as up when it&#039;s actually down, get a new network card or try changing this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120000&amp;lt;/span&amp;gt; tells the driver to delay switching back to the primary interface for 120,000 milliseconds (120 seconds / 2 minutes). This is designed to give the switch connected to the primary interface time to finish booting. Setting this too low may cause the bonding driver to switch back before the network switch is ready to actually move data. Some switches will not provide a link until it is fully booted, so please experiment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;downdelay&amp;lt;/span&amp;gt;&lt;br /&gt;
|Setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; tells the driver not to wait before changing the state of an interface when the link goes down. That is, when the driver detects a fault, it will switch to the backup interface immediately. This is the default behaviour, but setting this here insures that it is reset when the interface is reset, should the delay be somehow set elsewhere.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first bond we&#039;ll configure is for the Back-Channel Network.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; BCN Bond&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth0&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.20.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up is the bond for the Storage Network;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.1&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; SN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond1&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth1&amp;quot;&lt;br /&gt;
IPADDR=&amp;quot;10.10.50.2&amp;quot;&lt;br /&gt;
NETMASK=&amp;quot;255.255.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, we setup the bond for the Internet-Facing Network.&lt;br /&gt;
&lt;br /&gt;
Here we see a new option:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BRIDGE=&amp;quot;vbr2&amp;quot;&amp;lt;/span&amp;gt;; This tells the system that this bond is to be connected to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge when it is started.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; IFN Bond:&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Bond&lt;br /&gt;
DEVICE=&amp;quot;bond2&amp;quot;&lt;br /&gt;
BRIDGE=&amp;quot;vbr2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
BONDING_OPTS=&amp;quot;mode=1 miimon=100 use_carrier=1 updelay=120000 downdelay=0 primary=eth2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with the bonds!&lt;br /&gt;
&lt;br /&gt;
=== Alter the Interface Configurations ===&lt;br /&gt;
&lt;br /&gt;
With the bridge and bonds in place, we can now alter the interface configurations.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve already edited these back when we were remapping the physical interface to device names. This time, we&#039;re going to clean them up, add a comment and slave them to their parent bonds. Note that the only difference between each node&#039;s given config file will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWADDR&amp;lt;/span&amp;gt; variable&#039;s value. &lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 1;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6C&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:9B:9F&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 1&lt;br /&gt;
DEVICE=&amp;quot;eth1&amp;quot;&lt;br /&gt;
HWADDR=&amp;quot;00:19:99:9C:A0:6D&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 1:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:34&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 1&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EA&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth2&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* BCN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C3:35&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Back-Channel Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;00:1B:21:81:C2:EB&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth3&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:04&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth4&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Storage Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2E&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth4&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond1&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* IFN &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, Link 2:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:02:E0:05&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth5&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/sysconfig/network-scripts/ifcfg-eth5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Internet-Facing Network - Link 2&lt;br /&gt;
HWADDR=&amp;quot;A0:36:9F:07:D6:2F&amp;quot;&lt;br /&gt;
DEVICE=&amp;quot;eth5&amp;quot;&lt;br /&gt;
NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
ONBOOT=&amp;quot;yes&amp;quot;&lt;br /&gt;
MASTER=&amp;quot;bond2&amp;quot;&lt;br /&gt;
SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the variables is not really important, from a technical perspective. However, we&#039;ve found that having the order consistent as possible between configs and nodes goes a long way to simplifying support and problem solving. It certainly helps reduce human error as well.&lt;br /&gt;
&lt;br /&gt;
If we compare the newly updated configs with one of the backups, we&#039;ll see a couple interesting things;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/network-scripts/ifcfg-eth0	2013-10-28 18:39:59.000000000 -0400&lt;br /&gt;
+++ /etc/sysconfig/network-scripts/ifcfg-eth0	2013-10-29 13:25:03.443343494 -0400&lt;br /&gt;
@@ -1,2 +1 @@&lt;br /&gt;
-DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
-BOOTPROTO=&amp;quot;dhcp&amp;quot;&lt;br /&gt;
+# Back-Channel Network - Link 1&lt;br /&gt;
@@ -4 +3,3 @@&lt;br /&gt;
-NM_CONTROLLED=&amp;quot;yes&amp;quot;&lt;br /&gt;
+DEVICE=&amp;quot;eth0&amp;quot;&lt;br /&gt;
+NM_CONTROLLED=&amp;quot;no&amp;quot;&lt;br /&gt;
+BOOTPROTO=&amp;quot;none&amp;quot;&lt;br /&gt;
@@ -6,2 +7,2 @@&lt;br /&gt;
-TYPE=&amp;quot;Ethernet&amp;quot;&lt;br /&gt;
-UUID=&amp;quot;ea03dc97-019c-4acc-b4d6-bc42d30d9e36&amp;quot;&lt;br /&gt;
+MASTER=&amp;quot;bond0&amp;quot;&lt;br /&gt;
+SLAVE=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The notable part is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID&amp;lt;/span&amp;gt; where removed. These are not required, so we generally remove them. If you prefer to keep them, that is fine, too.&lt;br /&gt;
&lt;br /&gt;
== Loading the New Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you&#039;re connected to the nodes over the network and if the current IP was assigned by DHCP (or is otherwise different from the IP set in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;), your network connection will break. You will need to reconnect with the IP address you set.}}&lt;br /&gt;
&lt;br /&gt;
Simply restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;network&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/network restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down interface eth0:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth1:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth2:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth3:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond0/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth4:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond1/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down interface eth5:  /etc/sysconfig/network-scripts/ifdown-eth: line 116: /sys/class/net/bond2/bonding/slaves: No such file or directory&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Shutting down loopback interface:                          [  OK  ]&lt;br /&gt;
Bringing up loopback interface:                            [  OK  ]&lt;br /&gt;
Bringing up interface bond0:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond1:                               [  OK  ]&lt;br /&gt;
Bringing up interface bond2:                               [  OK  ]&lt;br /&gt;
Bringing up interface vbr2:                                [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These errors are normal. They&#039;re caused because we changed the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-ethX&amp;lt;/span&amp;gt; configuration files to reference bonded interfaces that, at the time we restarted the network, did not yet exist. If you restart the network again, you will see that the errors no longer appear.&lt;br /&gt;
&lt;br /&gt;
=== Verifying the New Network Config ===&lt;br /&gt;
&lt;br /&gt;
The first check to make sure everything works is to simply run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; and make sure everything we expect to be there is, in fact, there.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          inet addr:10.20.50.1  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9e/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:821080 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160713 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:392278922 (374.1 MiB)  TX bytes:15344030 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          inet addr:10.10.50.1  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:9b9f/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:6030 (5.8 KiB)  TX bytes:13752 (13.4 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:512206 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:222 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:34650974 (33.0 MiB)  TX bytes:25375 (24.7 KiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:570073 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:160669 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:377010981 (359.5 MiB)  TX bytes:15339986 (14.6 MiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:4644 (4.5 KiB)  TX bytes:4602 (4.4 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:262105 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:19438941 (18.5 MiB)  TX bytes:22295 (21.7 KiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9E  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:251007 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15267941 (14.5 MiB)  TX bytes:4044 (3.9 KiB)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:9B:9F  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:1386 (1.3 KiB)  TX bytes:9150 (8.9 KiB)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:250101 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:34 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:15212033 (14.5 MiB)  TX bytes:3080 (3.0 KiB)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3543 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3543 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2652772 (2.5 MiB)  TX bytes:2652772 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C3:34  &lt;br /&gt;
          inet addr:10.255.50.1  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c334/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4425 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:127 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:225580 (220.2 KiB)  TX bytes:17449 (17.0 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          inet addr:10.20.50.2  Bcast:10.20.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06c/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:485064 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:29542689 (28.1 MiB)  TX bytes:3060 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond1     Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          inet addr:10.10.50.2  Bcast:10.10.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::219:99ff:fe9c:a06d/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:420 (420.0 b)  TX bytes:3018 (2.9 KiB)&lt;br /&gt;
&lt;br /&gt;
bond2     Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING PROMISC MASTER MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:884093 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161539 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:414267432 (395.0 MiB)  TX bytes:15355495 (14.6 MiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242549 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14772701 (14.0 MiB)  TX bytes:2082 (2.0 KiB)&lt;br /&gt;
          Memory:ce660000-ce680000 &lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:180 (180.0 b)  TX bytes:2040 (1.9 KiB)&lt;br /&gt;
          Memory:ce6c0000-ce6e0000 &lt;br /&gt;
&lt;br /&gt;
eth2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:641600 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:161526 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:399497547 (380.9 MiB)  TX bytes:15354517 (14.6 MiB)&lt;br /&gt;
          Interrupt:24 Memory:ce240000-ce260000 &lt;br /&gt;
&lt;br /&gt;
eth3      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6C  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242515 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769988 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Interrupt:34 Memory:ce2a0000-ce2c0000 &lt;br /&gt;
&lt;br /&gt;
eth4      Link encap:Ethernet  HWaddr 00:19:99:9C:A0:6D  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:240 (240.0 b)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce400000-ce500000 &lt;br /&gt;
&lt;br /&gt;
eth5      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:242493 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:14769885 (14.0 MiB)  TX bytes:978 (978.0 b)&lt;br /&gt;
          Memory:ce500000-ce600000 &lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:3545 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:3545 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:2658626 (2.5 MiB)  TX bytes:2658626 (2.5 MiB)&lt;br /&gt;
&lt;br /&gt;
vbr2      Link encap:Ethernet  HWaddr 00:1B:21:81:C2:EA  &lt;br /&gt;
          inet addr:10.255.50.2  Bcast:10.255.255.255  Mask:255.255.0.0&lt;br /&gt;
          inet6 addr: fe80::21b:21ff:fe81:c2ea/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:16091 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:777873 (759.6 KiB)  TX bytes:20304 (19.8 KiB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, everything is there!&lt;br /&gt;
&lt;br /&gt;
Next up is to verify the bonds. To do this, we can examine special files in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; virtual file system. These expose the kernel&#039;s view of things as if they were tradition files. So by reading these files, we can see how the bonded interfaces are operating in real time.&lt;br /&gt;
&lt;br /&gt;
There are three, one for each bond. Let&#039;s start by looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt; &amp;quot;file&amp;quot;, then we&#039;ll look at the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6c&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:eb&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the variables and values we see for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above:&lt;br /&gt;
&lt;br /&gt;
* Bond variables;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Bonding Mode&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which bonding mode is currently active. Here we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fault-tolerance (active-backup)&amp;lt;/span&amp;gt;, which is exactly what we wanted when we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt; in the bond&#039;s configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; if it is available. Recall that we set a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary&amp;lt;/span&amp;gt; interface to ensure that, when everything is working properly, all network traffic goes through the same switch to avoid congestion on the stack/uplink cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Currently Active Slave&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which interface is being used at this time. If this shows the secondary interface, then either the primary has failed, or the primary has recovered by the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer hasn&#039;t yet expired.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the effective link state of the bond. If either one of the slaved interfaces is active, this will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Polling Interval (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|If you recall, this was set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;ms, which tells the bond driver to verify the link state of the slaved interfaces.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Up Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us how long the bond driver will wait before switching to the secondary interface. We want immediate fail-over, so we have this set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Down Delay (ms)&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us that the bond will wait for two minutes after a slaved interface comes up before it will consider it ready for use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Slaved interface variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave Interface&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name of the slaved device. The values below this reflect that named interface&#039;s state.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;&lt;br /&gt;
|This shows the current link state of the interface. Values you will see are: &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;up&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt;. The first two are obvious. The third is the link state between when the link comes up and before the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; timer expires.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Speed&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1000 Mbps&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you the link speed that the current interface is operating at. If it&#039;s ever lower than you expect, look in the switch configuration for statically set speeds. If that&#039;s not it, try another network cable.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Duplex&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells you whether the given interface can send and receive network traffic at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;full&amp;lt;/span&amp;gt;, or not, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;. All modern devices should support full duplex, so if you see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;half&amp;lt;/span&amp;gt;, examine your switch and cables.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Link Failure Count&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|When the bond driver starts, this is set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Each time the link &amp;quot;fails&amp;quot;, which includes an intentional unplugging of the cable, this counter increments. There is no hard in this increasing if the &amp;quot;errors&amp;quot; where intentional or known. It can be useful in detecting flaky connections though, should you find this number to be higher than expected.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Permanent HW addr&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:19:99:9c:9b:9e&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;00:1b:21:81:c3:35&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the real MAC address of the slaved interface. Those who are particularly observant will have noticed that, in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; output above, both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; showed the same MAC address. This is partly how active-passive bonding is able to fail over so extremely quickly. The MAC address of which ever interface is active will appear in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;HWaddr&amp;lt;/span&amp;gt; address of both bond members.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Slave queue ID&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|In other bonding modes, this can be used to help direct certain traffic down certain slaved interface links. We won&#039;t use this so it should always be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:04&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:a0:6d&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last bond is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:34&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:02:e0:05&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c2:ea&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: a0:36:9f:07:d6:2f&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That covers the bonds! The last thing to look at are the bridges. We can check them using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;brctl&amp;lt;/span&amp;gt; (bridge control) tool;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name	bridge id		STP enabled	interfaces&lt;br /&gt;
vbr2		8000.001b2181c334	no		bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brctl show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bridge name     bridge id               STP enabled     interfaces&lt;br /&gt;
vbr2            8000.001b2181c2ea       no              bond2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are four variables; Let&#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge name&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the device name we set when we created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifcfg-vbr2&amp;lt;/span&amp;gt; configuration file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bridge id&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c334&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8000.001b2181c2ea&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is an automatically create unique ID for the given bridge.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;STP enabled&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us where [https://en.wikipedia.org/wiki/Spanning_Tree_Protocol spanning tree protocol] is enabled or not. Default is to be disabled, which is fine. If you enable it, it will help protect against loops that can cause broadcast storms and flood your network. Given how difficult it is to accidentally &amp;quot;plug both ends of a cable into the same switch&amp;quot;, it&#039;s generally safe to leave off.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;interfaces&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells us which network interfaces are &amp;quot;plugged into&amp;quot; the bridge. We don&#039;t have any servers yet, so only &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt; is plugged in, which is the link that provides a route out to the real world. Later, when we create our servers, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; file will be created for each server&#039;s interface. These are the virtual &amp;quot;network cables&amp;quot; providing a link between the servers and the bridge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
== Adding Everything to /etc/hosts ==&lt;br /&gt;
&lt;br /&gt;
If you recall from the [[AN!Cluster Tutorial 2#Network]] section, we&#039;ve got two nodes, each with three networks and an IPMI interface, two network switches, two switched PDUs and two UPSes. We&#039;re also going to create two dashboard servers, each of which will have a connection to the [[BCN]] and the [[IFN]]. &lt;br /&gt;
&lt;br /&gt;
All of these have IP addresses. We want to be able to address them by names, which we can do by adding them to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file. If you prefer to have this centralized, you can always use internal DNS servers instead, but that is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
The format of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ip_addres&amp;gt;	&amp;lt;name&amp;gt;[ &amp;lt;name2&amp;gt; &amp;lt;name...&amp;gt; &amp;lt;nameN&amp;gt;]&amp;lt;/span&amp;gt;. We want the short domain and full domain name to resolve to the [[BCN]] IP address on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network. For this, we&#039;ll have multiple names on the BCN entry and then a single name for the [[SN]] and [[IFN]] entries.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&lt;br /&gt;
### Nodes &lt;br /&gt;
# an-c05n01&lt;br /&gt;
10.20.50.1	an-c05n01.bcn an-c05n01 an-c05n01.alteeve.ca&lt;br /&gt;
10.20.51.1	an-c05n01.ipmi&lt;br /&gt;
10.10.50.1	an-c05n01.sn&lt;br /&gt;
10.255.50.1	an-c05n01.ifn&lt;br /&gt;
&lt;br /&gt;
# an-c05n02&lt;br /&gt;
10.20.50.2	an-c05n02.bcn an-c05n02 an-c05n02.alteeve.ca&lt;br /&gt;
10.20.51.2	an-c05n02.ipmi&lt;br /&gt;
10.10.50.2	an-c05n02.sn&lt;br /&gt;
10.255.50.2	an-c05n02.ifn&lt;br /&gt;
&lt;br /&gt;
### Foundation Pack&lt;br /&gt;
# Network Switches&lt;br /&gt;
10.20.1.1	an-s01 an-s01.alteeve.ca&lt;br /&gt;
10.20.1.2	an-s02 an-s02.alteeve.ca	# Only accessible when out of the stack&lt;br /&gt;
&lt;br /&gt;
# Switched PDUs&lt;br /&gt;
10.20.2.1	an-p01 an-p01.alteeve.ca&lt;br /&gt;
10.20.2.2	an-p02 an-p02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
# Network-monitored UPSes&lt;br /&gt;
10.20.3.1	an-u01 an-u01.alteeve.ca&lt;br /&gt;
10.20.3.2	an-u02 an-u02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
### Monitor Packs&lt;br /&gt;
10.20.4.1	an-m01 an-m01.alteeve.ca&lt;br /&gt;
10.255.4.1	an-m01.ifn&lt;br /&gt;
10.20.4.2	an-m02 an-m02.alteeve.ca&lt;br /&gt;
10.255.4.2	an-m02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save this to both nodes and then you can test that the names resolve properly using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gethostip -d $name&amp;lt;/span&amp;gt;. Lets look at the names we gave to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and verify they resolve to the desired IP addresses.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n01.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.bcn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.sn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.10.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ifn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.255.50.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gethostip -d an-c05n02.ipmi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
10.20.51.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Test resolution of the foundation pack devices and the monitor packs as well. If they all resolve properly, we&#039;re ready to move on.&lt;br /&gt;
&lt;br /&gt;
== What is IPMI ==&lt;br /&gt;
&lt;br /&gt;
[[IPMI]], short for &amp;quot;Intelligent Platform Management Interface&amp;quot;, is a standardized network-attched device built in to many servers. It is a stand-alone device which allows external people and devices the ability to log in and check the state of the host server. It can read the various sensor values, press the power and reset switches, report whether the host node is powered on or not and so forth.&lt;br /&gt;
&lt;br /&gt;
Many companies build on the basic IPMI standard by adding advanced features like remote console access over the network, ability to monitor devices plugged into the server like the RAID controller and its hard drives and so on. Each vendor generally has a name for their implementation of IPMI;&lt;br /&gt;
&lt;br /&gt;
* Fujitsu calls theirs [http://globalsp.ts.fujitsu.com/dmsp/Publications/public/ds-iRMC-S3.pdf iRMC]&lt;br /&gt;
* HP calls theirs [https://en.wikipedia.org/wiki/HP_Integrated_Lights-Out iLO]&lt;br /&gt;
* Dell calls theirs [https://en.wikipedia.org/wiki/Dell_DRAC DRAC]&lt;br /&gt;
* IBM calls their [https://en.wikipedia.org/wiki/Remote_Supervisor_Adapter RSA]&lt;br /&gt;
&lt;br /&gt;
Various other vendors will have different names as well. In most cases though, they will all support the generic IPMI interface and Linux tools. We&#039;re going to use these tools to configure each node&#039;s IPMI &amp;quot;BMC&amp;quot;, Baseboard Management Controller, for use as a fence device.&lt;br /&gt;
&lt;br /&gt;
The idea here is this;&lt;br /&gt;
&lt;br /&gt;
If a node stops responding, the remaining surviving node can&#039;t simply assume the peer is off. We&#039;ll go into the details of &amp;quot;why not?&amp;quot; later in the fencing section. The remaining node will log into the peer&#039;s IPMI BMC and ask it to power off the host. Once off, the surviving node will verify that the power is off, confirming that the peer is certainly no longer alive and offering clustered services. With this known, recovery can safely begin.&lt;br /&gt;
&lt;br /&gt;
We need to assign an IP address to each IPMI BMC and then configure the user name and password to use later when connecting.&lt;br /&gt;
&lt;br /&gt;
We will also use the sensor values reported by the IPMI BMC in our monitoring and alert system. If, for example, a temperate climbs too high or too fast, the alert system will be able to see this and fire off an alert. &lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section walks through configuring IPMI on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. Please repeat for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We installed the needed IPMI tools earlier and we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; to start on boot. Verify that it&#039;s running now;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ipmi status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ipmi_msghandler module loaded.&lt;br /&gt;
ipmi_si module loaded.&lt;br /&gt;
ipmi_devintf module loaded.&lt;br /&gt;
/dev/ipmi0 exists.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; daemon is running and it was able to talk to the BMC. If this failed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/ipmi0&amp;lt;/span&amp;gt; would not exist. If this is the case for you, please find what make and model of IPMI BMC is used in your server and look for known issues with that chip.&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;ll check is that we can query IPMI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;chassis&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool chassis status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
System Power         : on&lt;br /&gt;
Power Overload       : false&lt;br /&gt;
Power Interlock      : inactive&lt;br /&gt;
Main Power Fault     : false&lt;br /&gt;
Power Control Fault  : false&lt;br /&gt;
Power Restore Policy : previous&lt;br /&gt;
Last Power Event     : &lt;br /&gt;
Chassis Intrusion    : inactive&lt;br /&gt;
Front-Panel Lockout  : inactive&lt;br /&gt;
Drive Fault          : false&lt;br /&gt;
Cooling/Fan Fault    : false&lt;br /&gt;
Sleep Button Disable : not allowed&lt;br /&gt;
Diag Button Disable  : allowed&lt;br /&gt;
Reset Button Disable : allowed&lt;br /&gt;
Power Button Disable : allowed&lt;br /&gt;
Sleep Button Disabled: false&lt;br /&gt;
Diag Button Disabled : false&lt;br /&gt;
Reset Button Disabled: false&lt;br /&gt;
Power Button Disabled: false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! If you get something like this, you&#039;re past 90% of the potential problems.&lt;br /&gt;
&lt;br /&gt;
We can check more information on the hosts using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mc&amp;lt;/span&amp;gt; to query the management controller.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool mc info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device ID                 : 2&lt;br /&gt;
Device Revision           : 2&lt;br /&gt;
Firmware Revision         : 1.1&lt;br /&gt;
IPMI Version              : 2.0&lt;br /&gt;
Manufacturer ID           : 10368&lt;br /&gt;
Manufacturer Name         : Fujitsu Siemens&lt;br /&gt;
Product ID                : 611 (0x0263)&lt;br /&gt;
Product Name              : Unknown (0x263)&lt;br /&gt;
Device Available          : yes&lt;br /&gt;
Provides Device SDRs      : no&lt;br /&gt;
Additional Device Support :&lt;br /&gt;
    Sensor Device&lt;br /&gt;
    SDR Repository Device&lt;br /&gt;
    SEL Device&lt;br /&gt;
    FRU Inventory Device&lt;br /&gt;
    IPMB Event Receiver&lt;br /&gt;
    Bridge&lt;br /&gt;
    Chassis Device&lt;br /&gt;
Aux Firmware Rev Info     : &lt;br /&gt;
    0x05&lt;br /&gt;
    0x08&lt;br /&gt;
    0x00&lt;br /&gt;
    0x41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some servers will report the details of &amp;quot;field replaceable units&amp;quot;; components than can be swapped out as needed. Every server will report different data here, but you can see what our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://manuals.ts.fujitsu.com/file/10963/rx300s6-ba-en.pdf RX300 S6]&amp;lt;/span&amp;gt; returns below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool fru print&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
FRU Device Description : Builtin FRU Device (ID 0)&lt;br /&gt;
 Device not present (Requested sensor, data, or record not found)&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : Chassis (ID 2)&lt;br /&gt;
 Chassis Type			 : Rack Mount Chassis&lt;br /&gt;
 Chassis Extra			 : RX300S6R1&lt;br /&gt;
 Product Manufacturer  : FUJITSU&lt;br /&gt;
 Product Name          : PRIMERGY RX300 S6&lt;br /&gt;
 Product Part Number   : ABN:K1344-V101-2204&lt;br /&gt;
 Product Version       : GS01&lt;br /&gt;
 Product Serial        : xxxxxxxxxx&lt;br /&gt;
 Product Asset Tag     : 15&lt;br /&gt;
 Product Extra         : 25a978&lt;br /&gt;
 Product Extra         : 0263&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : MainBoard (ID 3)&lt;br /&gt;
 Board Mfg Date        : Wed Dec 22 07:36:00 2010&lt;br /&gt;
 Board Mfg             : FUJITSU&lt;br /&gt;
 Board Product         : D2619&lt;br /&gt;
 Board Serial          : xxxxxxxx&lt;br /&gt;
 Board Part Number     : S26361-D2619-N15&lt;br /&gt;
 Board Extra           : WGS10 GS02&lt;br /&gt;
 Board Extra           : 02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU1 (ID 7)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&lt;br /&gt;
FRU Device Description : PSU2 (ID 8)&lt;br /&gt;
 Unknown FRU header version 0x02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can check all the sensor value using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; as well. This is actually what the cluster monitor we&#039;ll install later does.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool sdr list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ambient          | 27.50 degrees C   | ok&lt;br /&gt;
Systemboard      | 43 degrees C      | ok&lt;br /&gt;
CPU1             | 34 degrees C      | ok&lt;br /&gt;
CPU2             | 37 degrees C      | ok&lt;br /&gt;
DIMM-1A          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2A          | disabled          | ns&lt;br /&gt;
DIMM-3A          | disabled          | ns&lt;br /&gt;
DIMM-1B          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2B          | disabled          | ns&lt;br /&gt;
DIMM-3B          | disabled          | ns&lt;br /&gt;
DIMM-1C          | 29 degrees C      | ok&lt;br /&gt;
DIMM-2C          | disabled          | ns&lt;br /&gt;
DIMM-3C          | disabled          | ns&lt;br /&gt;
DIMM-1D          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2D          | disabled          | ns&lt;br /&gt;
DIMM-3D          | disabled          | ns&lt;br /&gt;
DIMM-1E          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2E          | disabled          | ns&lt;br /&gt;
DIMM-3E          | disabled          | ns&lt;br /&gt;
DIMM-1F          | 33 degrees C      | ok&lt;br /&gt;
DIMM-2F          | disabled          | ns&lt;br /&gt;
DIMM-3F          | disabled          | ns&lt;br /&gt;
BATT 3.0V        | 3.13 Volts        | ok&lt;br /&gt;
STBY 3.3V        | 3.35 Volts        | ok&lt;br /&gt;
iRMC 1.2V STBY   | 1.19 Volts        | ok&lt;br /&gt;
iRMC 1.8V STBY   | 1.80 Volts        | ok&lt;br /&gt;
LAN 1.0V STBY    | 1.01 Volts        | ok&lt;br /&gt;
LAN 1.8V STBY    | 1.81 Volts        | ok&lt;br /&gt;
MAIN 12V         | 12 Volts          | ok&lt;br /&gt;
MAIN 5.15V       | 5.18 Volts        | ok&lt;br /&gt;
MAIN 3.3V        | 3.37 Volts        | ok&lt;br /&gt;
IOH 1.1V         | 1.10 Volts        | ok&lt;br /&gt;
IOH 1.8V         | 1.80 Volts        | ok&lt;br /&gt;
ICH 1.5V         | 1.50 Volts        | ok&lt;br /&gt;
IOH 1.1V AUX     | 1.09 Volts        | ok&lt;br /&gt;
CPU1 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
CPU2 1.8V        | 1.80 Volts        | ok&lt;br /&gt;
Total Power      | 190 Watts         | ok&lt;br /&gt;
PSU1 Power       | 100 Watts         | ok&lt;br /&gt;
PSU2 Power       | 80 Watts          | ok&lt;br /&gt;
CPU1 Power       | 5.50 Watts        | ok&lt;br /&gt;
CPU2 Power       | 4.40 Watts        | ok&lt;br /&gt;
Fan Power        | 15.84 Watts       | ok&lt;br /&gt;
Memory Power     | 8 Watts           | ok&lt;br /&gt;
HDD Power        | 45 Watts          | ok&lt;br /&gt;
FAN1 SYS         | 5340 RPM          | ok&lt;br /&gt;
FAN2 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN3 SYS         | 4920 RPM          | ok&lt;br /&gt;
FAN4 SYS         | 5160 RPM          | ok&lt;br /&gt;
FAN5 SYS         | 5100 RPM          | ok&lt;br /&gt;
FAN1 PSU1        | 6360 RPM          | ok&lt;br /&gt;
FAN2 PSU1        | 6480 RPM          | ok&lt;br /&gt;
FAN1 PSU2        | 6480 RPM          | ok&lt;br /&gt;
FAN2 PSU2        | 6240 RPM          | ok&lt;br /&gt;
I2C1 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C2 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C3 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C4 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C5 error ratio | 0 unspecified     | ok&lt;br /&gt;
I2C6 error ratio | 0 unspecified     | ok&lt;br /&gt;
SEL Level        | 0 unspecified     | ok&lt;br /&gt;
Ambient          | 0x02              | ok&lt;br /&gt;
CPU1             | 0x80              | ok&lt;br /&gt;
CPU2             | 0x80              | ok&lt;br /&gt;
Power Unit       | 0x01              | ok&lt;br /&gt;
PSU              | Not Readable      | ns&lt;br /&gt;
PSU1             | 0x02              | ok&lt;br /&gt;
PSU2             | 0x02              | ok&lt;br /&gt;
Fanboard Row 2   | 0x00              | ok&lt;br /&gt;
FAN1 SYS         | 0x01              | ok&lt;br /&gt;
FAN2 SYS         | 0x01              | ok&lt;br /&gt;
FAN3 SYS         | 0x01              | ok&lt;br /&gt;
FAN4 SYS         | 0x01              | ok&lt;br /&gt;
FAN5 SYS         | 0x01              | ok&lt;br /&gt;
FAN1 PSU1        | 0x01              | ok&lt;br /&gt;
FAN2 PSU1        | 0x01              | ok&lt;br /&gt;
FAN1 PSU2        | 0x01              | ok&lt;br /&gt;
FAN2 PSU2        | 0x01              | ok&lt;br /&gt;
FanBoard         | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x02              | ok&lt;br /&gt;
DIMM-1A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-2A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-1B          | 0x02              | ok&lt;br /&gt;
DIMM-1B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-2B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-1C          | 0x02              | ok&lt;br /&gt;
DIMM-1C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-2C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-1D          | 0x02              | ok&lt;br /&gt;
DIMM-1D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-2D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-1E          | 0x02              | ok&lt;br /&gt;
DIMM-1E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-2E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-1F          | 0x02              | ok&lt;br /&gt;
DIMM-1F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-2F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
DIMM-3A          | 0x01              | ok&lt;br /&gt;
DIMM-3B          | 0x01              | ok&lt;br /&gt;
DIMM-3C          | 0x01              | ok&lt;br /&gt;
DIMM-3D          | 0x01              | ok&lt;br /&gt;
DIMM-3E          | 0x01              | ok&lt;br /&gt;
DIMM-3F          | 0x01              | ok&lt;br /&gt;
Watchdog         | 0x00              | ok&lt;br /&gt;
iRMC request     | 0x00              | ok&lt;br /&gt;
I2C1             | 0x02              | ok&lt;br /&gt;
I2C2             | 0x02              | ok&lt;br /&gt;
I2C3             | 0x02              | ok&lt;br /&gt;
I2C4             | 0x02              | ok&lt;br /&gt;
I2C5             | 0x02              | ok&lt;br /&gt;
I2C6             | 0x02              | ok&lt;br /&gt;
Config backup    | 0x00              | ok&lt;br /&gt;
Total Power      | 0x01              | ok&lt;br /&gt;
PSU1 Power       | 0x01              | ok&lt;br /&gt;
PSU2 Power       | 0x01              | ok&lt;br /&gt;
CPU1 Power       | 0x01              | ok&lt;br /&gt;
CPU2 Power       | 0x01              | ok&lt;br /&gt;
Memory Power     | 0x01              | ok&lt;br /&gt;
Fan Power        | 0x01              | ok&lt;br /&gt;
HDD Power        | 0x01              | ok&lt;br /&gt;
Power Level      | 0x01              | ok&lt;br /&gt;
Power Level      | 0x08              | ok&lt;br /&gt;
CPU detection    | 0x00              | ok&lt;br /&gt;
System Mgmt SW   | Not Readable      | ns&lt;br /&gt;
NMI              | 0x00              | ok&lt;br /&gt;
Local Monitor    | 0x02              | ok&lt;br /&gt;
Pwr Btn override | 0x00              | ok&lt;br /&gt;
System BIOS      | Not Readable      | ns&lt;br /&gt;
iRMC             | Not Readable      | ns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can narrow that call down to just see temperature, power consumption and what not. That&#039;s beyond the scope of this tutorial though. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; is great for seeing all the neat stuff you can do.&lt;br /&gt;
&lt;br /&gt;
=== Finding our IPMI LAN Channel ===&lt;br /&gt;
&lt;br /&gt;
Before we can configure it though, we need to find our &amp;quot;LAN channel&amp;quot;. Different manufacturers will use different channels, so we need to be able to find the one we&#039;re using.&lt;br /&gt;
&lt;br /&gt;
To find it, simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool lan print X&amp;lt;/span&amp;gt;. Increment &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, until you get a response.&lt;br /&gt;
&lt;br /&gt;
So first, let&#039;s query LAN channel 1.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Channel 1 is not a LAN channel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
No luck; Let&#039;s try channel 2.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Found it! So we know that this server uses LAN channel 2. We&#039;ll need to use this for the next steps.&lt;br /&gt;
&lt;br /&gt;
=== Reading IPMI Data ===&lt;br /&gt;
&lt;br /&gt;
Now that we can read our IPMI data, it&#039;s time to set some values.&lt;br /&gt;
&lt;br /&gt;
We know that we want to set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI interface to have the IP &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.51.1/16&amp;lt;/span&amp;gt;. We also need to setup a user on the IPMI BMC so that we can log in from other nodes.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s set the IP address. Remember to use the LAN channel you found on your server. We don&#039;t actually have a gateway on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.0.0/16&amp;lt;/span&amp;gt; network, but some devices insist on a default gateway being set. For this reason, we&#039;ll always set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.255.255.254&amp;lt;/span&amp;gt; as the gateway server. You will want to adjust this (or not use it at all) for your network.&lt;br /&gt;
&lt;br /&gt;
This requires four calls;&lt;br /&gt;
&lt;br /&gt;
# Tell the interface to use a static IP address.&lt;br /&gt;
# Set the IP address&lt;br /&gt;
# Set the subnet mask&lt;br /&gt;
# (optional) Set the default gateway&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 ipsrc static&lt;br /&gt;
ipmitool lan set 2 ipaddr 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN IP Address to 10.20.51.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 netmask 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Subnet Mask to 255.255.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan set 2 defgw ipaddr 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Setting LAN Default Gateway IP to 10.20.255.254&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll again print the LAN channel information and we should see that the IP address has been set.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool lan print 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Set in Progress         : Set Complete&lt;br /&gt;
Auth Type Support       : NONE MD5 PASSWORD &lt;br /&gt;
Auth Type Enable        : Callback : NONE MD5 PASSWORD &lt;br /&gt;
                        : User     : NONE MD5 PASSWORD &lt;br /&gt;
                        : Operator : NONE MD5 PASSWORD &lt;br /&gt;
                        : Admin    : NONE MD5 PASSWORD &lt;br /&gt;
                        : OEM      : NONE MD5 PASSWORD &lt;br /&gt;
IP Address Source       : Static Address&lt;br /&gt;
IP Address              : 10.20.51.1&lt;br /&gt;
Subnet Mask             : 255.255.0.0&lt;br /&gt;
MAC Address             : 00:19:99:9a:d8:e8&lt;br /&gt;
SNMP Community String   : public&lt;br /&gt;
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10&lt;br /&gt;
Default Gateway IP      : 10.20.255.254&lt;br /&gt;
802.1q VLAN ID          : Disabled&lt;br /&gt;
802.1q VLAN Priority    : 0&lt;br /&gt;
RMCP+ Cipher Suites     : 0,1,2,3,6,7,8,17&lt;br /&gt;
Cipher Suite Priv Max   : OOOOOOOOXXXXXXX&lt;br /&gt;
                        :     X=Cipher Suite Unused&lt;br /&gt;
                        :     c=CALLBACK&lt;br /&gt;
                        :     u=USER&lt;br /&gt;
                        :     o=OPERATOR&lt;br /&gt;
                        :     a=ADMIN&lt;br /&gt;
                        :     O=OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Find the IPMI User ID ===&lt;br /&gt;
&lt;br /&gt;
Next up is to find the IPMI administrative user name and user ID. We&#039;ll record the name for later use in the cluster setup. We&#039;ll use the ID to update the user&#039;s password.&lt;br /&gt;
&lt;br /&gt;
To see the list of users, run the following.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user list 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ID  Name	     Callin  Link Auth	IPMI Msg   Channel Priv Limit&lt;br /&gt;
1                    true    true       true       Unknown (0x00)&lt;br /&gt;
2   admin            true    true       true       OEM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you see an error like &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Get User Access command failed (channel 2, user 3): Unknown (0x32)&amp;lt;/span&amp;gt;&amp;quot;, it is safe to ignore.}}&lt;br /&gt;
&lt;br /&gt;
Normally you should see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ADMINISTRATOR&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Channel Priv Limit&amp;lt;/span&amp;gt; column. Above we see that the user named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; with ID &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;OEM&amp;lt;/span&amp;gt;, so that is the user we will use.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; in the next argument corresponds to the user ID, not the LAN channel!}}&lt;br /&gt;
&lt;br /&gt;
To set the password to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt;, run the following command and then enter the word &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;secret&amp;lt;/span&amp;gt; twice.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool user set password 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password for user 2: &lt;br /&gt;
Password for user 2: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Testing the IPMI Connection From the Peer ===&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;ve set each node&#039;s IPMI BMC network address and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin&amp;lt;/span&amp;gt; user&#039;s password. Now it&#039;s time to make sure it works.&lt;br /&gt;
&lt;br /&gt;
In the example above, we walked through setting up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s IPMI BMC. So here, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and try to connect to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ipmi&amp;lt;/span&amp;gt; to make sure everything works.&lt;br /&gt;
&lt;br /&gt;
* From &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n01.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now let&#039;s test from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; connecting to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ipmi&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipmitool -I lanplus -U admin -P secret -H an-c05n02.ipmi chassis power status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Chassis Power is on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woohoo!&lt;br /&gt;
&lt;br /&gt;
== Setting up SSH ==&lt;br /&gt;
&lt;br /&gt;
Setting up [[SSH]] shared keys will allow your nodes to pass files between one another and execute commands remotely without needing to enter a password. This will be needed later when we want to enable applications like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and its tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SSH is, on its own, a very big topic. If you are not familiar with SSH, please take some time to learn about it before proceeding. A great first step is the [http://en.wikipedia.org/wiki/Secure_Shell Wikipedia] entry on SSH, as well as the SSH [[man]] page; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man ssh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[SSH]] can be a bit confusing keeping connections straight in you head. When you connect to a remote machine, you start the connection on your machine as the user you are logged in as. This is the source user. When you call the remote machine, you tell the machine what user you want to log in as. This is the remote user.&lt;br /&gt;
&lt;br /&gt;
=== Create the RSA Keys ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section covers setting up [[SSH]] for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please be sure to follow these steps for both nodes.}}&lt;br /&gt;
&lt;br /&gt;
You will need to create an SSH key for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on each node. Once created, we will need to copy the &amp;quot;public key&amp;quot; into a special file on both nodes to enable connecting to either node without a password.&lt;br /&gt;
&lt;br /&gt;
Lets start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The &#039;4095&#039; is just to screw with brute-forces a bit. :)&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 root@an-c05n01.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|     .E.         |&lt;br /&gt;
|     .o.         |&lt;br /&gt;
|      .o. .      |&lt;br /&gt;
|      ...*       |&lt;br /&gt;
|     .. S o      |&lt;br /&gt;
|    .  = o       |&lt;br /&gt;
|   . ...+ .      |&lt;br /&gt;
|    o ++ +       |&lt;br /&gt;
|     ++.+        |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will create two files: the private key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa&amp;lt;/span&amp;gt; and the public key called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/id_rsa.pub&amp;lt;/span&amp;gt;. The private &#039;&#039;&#039;&#039;&#039;must never&#039;&#039;&#039;&#039;&#039; be group or world readable! That is, it should be set to mode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0600&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you look closely when you created the ssh key, the node&#039;s fingerprint is show (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40&amp;lt;/span&amp;gt; for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; above). Make a note of the fingerprint for each machine, and then compare it to the one presented to you when you ssh to a machine for the first time. If you are presented with a fingerprint that doesn&#039;t match, you could be facing a &amp;quot;man in the middle&amp;quot; attack. &lt;br /&gt;
&lt;br /&gt;
To look up a fingerprint in the future, you can run the following;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -l -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
4095 1a:cf:8b:69:5e:9b:92:c2:51:0d:49:7f:ce:98:0f:40 /root/.ssh/id_rsa.pub (RSA)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two newly generated files should look like;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Private key&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
MIIJIwIBAAKCAgBk3o54tw1f0BJ0UOp/OWpLa5VaKDIKKmwe7Um6kcmDVBO8Itbg&lt;br /&gt;
7FxXHxX6Xi/CqoqjPEwvpjSgBVSGF5IkSAcAdyKEmqJ0pM3A4Hg+g1JehQLx3k2v&lt;br /&gt;
DPfIcTvsIGEkS63XZiOs6t1sPubgjKw9encpYHq4s2Z26Ux/w85FbIMCR3oNroG2&lt;br /&gt;
scU4OJnICosoibsEXheaDzUl8fIpEkIHGVK4iOy2Y2CoxEKw5bE1yBv0KlRKrN9i&lt;br /&gt;
jFvoq2eAUG+NtjOxaG9DK3IgITQVd1PDgoBqEvEJK/kdfckGQu47cKGJS8bzgWLD&lt;br /&gt;
vXprg9OsXBu/MZSVK1AjvL3pfZEOT/k1B6gWu2ww7hGWVZj2IXnFcRv4TMs+DXg2&lt;br /&gt;
xZm7pWTkPLNxFzqtAZH60jXZmbPAFNDNS7M3Qs6oBCFlvUL00vFNu3uoM2NARG0V&lt;br /&gt;
bvLT0zb8dhQDpV2KoGsKUFGsDo773rH7AtBBPEzODgxjTk7rH+0Rt38JLN8T5XeO&lt;br /&gt;
RUitX9MS5abjis6DZ5agm8Swd3cpAK7g5yeKdxmUA774i+BlkkH1VdsdBT9RImvc&lt;br /&gt;
/OfVly208jpNRisCQgP4FTlEFG9YOeQ416euJ6xX5oP+I6z9f0rMzQEprh0WgT5r&lt;br /&gt;
/oIKfjwF3v109rquUZLxrLYb8qkomwWnxPD4VL7GPUU0hzgr+h+xRWI0nQIBIwKC&lt;br /&gt;
AgBfGvtb38rIDVM6eC2N5a1dDaoTLTZ+nQbbVMHby0j4KrOFf+8r14pDg7Wi6xcW&lt;br /&gt;
oMvbvIJYz+h5nqAmqIJ5+sTF7KuEV0i3HwsjkdB1dIDcxo2/edQ3VV6nC62G3LNc&lt;br /&gt;
vGIUO7s8ou4G+XqZNC1eiWkJwV3EFtzzxgZMlAugiuHsNMOJPiKHru0mYUCJaQbd&lt;br /&gt;
FCVb46/aZhwrF1IJd51XJoExpav8bFPSUqVHs/7a79/XlZ/uov6BfQYzJURUaRi4&lt;br /&gt;
0Fyf9MCtC7S/NT+8d9KiZRn9nNSiP2c5EDKQ4AUwuqbvKjCccq2T+8syK9Y0y9+l&lt;br /&gt;
o8abRhhcNZ0d+gxslIvhiuBOtTTV7Fy6zYyhSkAOzF33kl+jDDm2nNvxjxFU3Lo1&lt;br /&gt;
qSP7n2yedz5QKOvwykmwN/uzn5FWSmKc5GdL/t+yu94zf0eR9pDhkg0u9dXFkim0&lt;br /&gt;
Hq8RsW1vH4aD0BBMiBn34EbnaQaotX7lAUxfTjG0iZ9z8T48NIqPf/66evqUk3bx&lt;br /&gt;
VoFS79GkW8yWrXQX6B3oUAtm10aeP9Htz+AQIPdatO9pREIzE6UbEnc2kSrzFcJh&lt;br /&gt;
4hmarrQgJq7qzFjgRLBgjiOsdEo5SGLTFh17UIh5k/deeTxLsGSFuBbpz5+jr4tt&lt;br /&gt;
0s4wcmamTR8ruURGh+4i/Px6F9QsechnIMKGNthWVxhEawKCAQEA2kCH/FL/A7Ib&lt;br /&gt;
fCt0PFvCKWeF1V+PhdzEdkIRvS3OusWP9Z+py6agh3kAFWjOZT16WgYPeftMKYaE&lt;br /&gt;
3Wiixfx+99ta0eQiKqozYgB3pg5UWdxsXv30jrTyRuhhEBId2lGV6/eHgGYs48s1&lt;br /&gt;
oCCrljsVmWd+p4uSAplIBewCv7YPsxl3DZJTV6DFRD9mnuqjrqozSM+UsoMPRTPZ&lt;br /&gt;
7AyaDxeb63LiWTq6T/gLHptmu8K0SLvDkzA5LeBWKUNFcMHpWODpzjPj5J4Mtulr&lt;br /&gt;
R8oLtEy/2ZyWi7n8JuOt+swTsZDN0Qzcpzw9MU1RWs0sqGvTO91bMjc+FYew7wuZ&lt;br /&gt;
CEZxX4VxSQKCAQB2ULaKc4Oersq7Z3fQXIynLNT8lZ/AKQaAH/SdLL7IGKWRZ9eA&lt;br /&gt;
VOQNnZnThnKMDbDS8GPOpjzfjPDP8L7Y6NOVgc6ETGEdvoXomZv+sqpwx3BWszNK&lt;br /&gt;
18FfV0HhLv0MFHAPfMIqPqhhYUDnDAt/yWFViujIIrllmXjH9JGZDdPgzsupPToZ&lt;br /&gt;
FKC5UAYeAZwpaX2AROrfACscn99kNsTE7F8HtMQ//iT+M0rHVTzhVBnm1/e3eY1J&lt;br /&gt;
9L6WUbCPzBeiNFNC+y9+0nZk0tkgJk+qUPYdnaQL44TtlZMT1iWKg3C6dgrjbbaG&lt;br /&gt;
tFZmwh2/hf0Aovycpn/Fm2PKwxved64FnDy1AoIBABK1Evhe4qiLm/SzRHozwC9v&lt;br /&gt;
RfxYpebnCYZ6sRA3IFkm4HQjoNbxBnIDDqK/1y0/yKihbwp0oCDRBBL6VxhI167Y&lt;br /&gt;
SZz2TBJJGljbd/hKXwBjWb7/0yIsxE84fVkmH9Dia++ngKSbCyl30WV/JKZ6F8tS&lt;br /&gt;
A4q0MRYqZUJWDt07fbBEAuPn+IPalJDSO/7+K0l8TYnl6CyO5A0+9WwBFITzZSLP&lt;br /&gt;
VTrZJemY6wKfmxdoddpZPKY3VVu0JKRzevsJToP2BWlyKXn+6yWe+pEf8l/pUkXa&lt;br /&gt;
OMol4mm7vnSVJkJrf1sPuyRG/e5IdLAC9TMB7YjJ1J3nelmd6pglkMYx7HXm3dMC&lt;br /&gt;
ggEAUSFnOl3WmLJfIWuFW60tP28y9lf4g8RcOpmRytzal9Zi510mDtsgCVYgVogU&lt;br /&gt;
CEPm9ws9H/z2iqnJsyi9YYm1qFkCo9yaXYn1bEwTMk6gwlzfUWTv+M51+DvVZzYp&lt;br /&gt;
3GXJLzD6K5it+aHGGsZuSP8eLAd7DOScYuzlG2XgLm/hvrmwOYkR5U/5Lp1GBfJ5&lt;br /&gt;
tf8xfIcHdFfjDFBeqx49yNyY71dh//66R+ioTivR+ZjBTdXrsQLkinvwZxNxwbCF&lt;br /&gt;
PAaffmMZQQVYf6aGQe5ig2q3ZMPeNAm6PIPSkUJi4qNF/DOvseTU7qeLtC1WOi/9&lt;br /&gt;
8c7ZGvXT9TdaXya0BkNwA9jZKwKCAQBUDqjJ7Q/nlxLifyOInW1RbwbUFzh7mdfC&lt;br /&gt;
w6362II2gIz0JRg7HQHMwfbY5t+ELi9Rsdn90wlPQ08cK42goKW46Nt30g+AoQ/N&lt;br /&gt;
0maLzbrn5BffAtI7XM0a4i3dZ/yjS0/NW39km0YnTe49W6CBBf91fChIfm+jvYna&lt;br /&gt;
ihA9x/SgyuBUvQ1bCrMzMM024TxhCkvvKI2MDmJNJHOeqovYFAXiHFGPmftunu1K&lt;br /&gt;
oDRUPb6j5gTBhxAV1ZPHKCee7EIFwi/jJ/31oMLEJp5RnAdrW+FitPjQ7hcoRStm&lt;br /&gt;
VZAoapBJb37xa1kq/7hHYf2bPVdrcO8AeStpjEh6GbtYmy2pWlFy&lt;br /&gt;
-----END RSA PRIVATE KEY-----&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is line-wrapped to make it easier to read. Real keys should be a single line.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public key&#039;&#039;&#039; (single line, but wrapped here to make it more readable):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_rsa.pub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgBKYiBxI06RGiar5rt121+tO1crpa9MwL+K5qtlx0IrL7QUDxi+hvdXg3sTS6+R/mnLDE8eS&lt;br /&gt;
ulgRX4fHweNbM96wnl2N9mOnODLJftWPbPUHFpTc/0bDRcXq4rB+V+NvXG1i74W1si8Fp/R5wnPmF7yo/ZjN2zXLhwesOVY3Cnmur+O19&lt;br /&gt;
80O4lT7Zl5Q0mALNkriouhD+FzQZnMky8X2MM4dmnYqctCI54jbgD0vN09uUu8KyGycV9BFW7ScfGBEvow4/+8YW+my4bG0SBjJki7eOK&lt;br /&gt;
W3fvr58cybXO+UBqLFO7yMe5jf0fClyz6MFn+PRPR37QQy4GIC+4MCaYaiCx2P/K+K/ZxH621Q8nBE9TdNCw6iVqlt5Si3x2UzxOlrYLZ&lt;br /&gt;
nvB1BfzY92Rd/RNP5bz17PapaOMLjkx6iIAEDbp2lL5vzGp+1S30SX956sX/4CYWVTg+MAwok9mUcyj60VU+ldlPDuN7UYUi8Wmoa6Jsu&lt;br /&gt;
ozstUNBCsUcKzt5FEBy4vOwOMtyu3cD4rQrn3eGXfZ1a4QpLnR2H9y7EnM4nfGdQ/OVjMecAtHUxx3FDltHgiSkQDEF9R4s3z6NLZ2mda&lt;br /&gt;
TU9A5zm+1rMW1ZLhGkfna/h2KV9o8ZNx79WyKMheajL4lgi495D7c6fF4GBgX7u7qrdZyCj2cXgrgT4nGwM2Z81Q== root@an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now do the same thing on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to generate its key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -N &amp;quot;&amp;quot; -b 4095 -f ~/.ssh/id_rsa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Generating public/private rsa key pair.&lt;br /&gt;
Created directory &#039;/root/.ssh&#039;.&lt;br /&gt;
Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;
Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;
The key fingerprint is:&lt;br /&gt;
68:71:fb:87:88:e3:c2:89:49:ad:d0:55:7d:1c:05:b6 root@an-c05n02.alteeve.ca&lt;br /&gt;
The key&#039;s randomart image is:&lt;br /&gt;
+--[ RSA 4095]----+&lt;br /&gt;
|       . .++.    |&lt;br /&gt;
|      . ..o.     |&lt;br /&gt;
|     .. ..E      |&lt;br /&gt;
|    .  + .       |&lt;br /&gt;
| . o  o S        |&lt;br /&gt;
|. o .. . o .     |&lt;br /&gt;
| o = .o . o .    |&lt;br /&gt;
|  + +. .   .     |&lt;br /&gt;
|     ..          |&lt;br /&gt;
+-----------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Populate known_hosts ===&lt;br /&gt;
&lt;br /&gt;
Normally, the first time you try to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; into a computer, you will be asked to verify that the fingerprint reported by the target server is valid. We just created our nodes, so we can trust that we&#039;re connecting to the actual target machine we think we are.&lt;br /&gt;
&lt;br /&gt;
Seeing as we&#039;re comfortable with this, we can use a nifty program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh-keyscan&amp;lt;/span&amp;gt; to read the fingerprint of the target machine and copy the resulting key to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file. We&#039;ll need to do this for all variations of the host names for each node. This alone means that we need to add ten fingerprints, five for the five names of each node.&lt;br /&gt;
&lt;br /&gt;
This is somewhat tedious, so we&#039;ll do this once on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy the populated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; later.&lt;br /&gt;
&lt;br /&gt;
If you recall from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; section, we&#039;ve got five possible host names per node. We&#039;ll call all of them now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with [[bash]] redirections, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt; ~/.ssh/known_hosts&amp;lt;/span&amp;gt; file tells the OS, &amp;quot;Take the returned text that would have been printed to screen and instead append it to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/known_hosts&amp;lt;/span&amp;gt;&amp;quot;. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; didn&#039;t exist yet, so it was created.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll repeat this, once for each host name for either node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n01.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n01.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all the host names for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Now we&#039;ll repeat the steps for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.alteeve.ca &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.alteeve.ca SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02 SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.bcn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.bcn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.sn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.sn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-keyscan an-c05n02.ifn &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# an-c05n02.ifn SSH-2.0-OpenSSH_5.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now we won&#039;t get asked to verify the target machine&#039;s RSA fingerprint when we try to connect later. More importantly, if the fingerprint ever changes, it will generate a very noisy alert telling us that something nasty, like a fake target having replaced our peer, might have happened.&lt;br /&gt;
&lt;br /&gt;
The last step is to copy this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, saving us the hassle of running all those commands a second time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/known_hosts root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: Permanently added the RSA host key for IP address &#039;10.20.50.2&#039; to the list of known hosts.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that warning, it&#039;s a one time thing. Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to continue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
known_hosts&lt;br /&gt;
&lt;br /&gt;
sent 4817 bytes  received 31 bytes  1077.33 bytes/sec&lt;br /&gt;
total size is 4738  speedup is 0.98&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
=== Copy Public Keys to Enable SSH Without a Password ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This only disabled the need for passwords when connecting from one node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; use to the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user. It does not remove the need for passwords from any other machines or users!}}&lt;br /&gt;
&lt;br /&gt;
In order to enable password-less login, we need to create a file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; and put both nodes&#039; public key in it. We will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll copy the local &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; file. This will create the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file and add the local public RSA in one step.&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; to print the contents of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s public key to screen, but redirect the key to the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02 &amp;quot;cat /root/.ssh/id_rsa.pub&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Enter the password for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done. Now we can verify that both keys have been added to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat ~/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I&#039;m truncating the output below to make it more readable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n01.alteeve.ca&lt;br /&gt;
ssh-rsa &amp;lt;key snipped&amp;gt; root@an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now we can copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and, with luck, enter the password one last time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av ~/.ssh/authorized_keys root@an-c05n02:/root/.ssh/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@an-c05n02&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
authorized_keys&lt;br /&gt;
&lt;br /&gt;
sent 1577 bytes  received 31 bytes  643.20 bytes/sec&lt;br /&gt;
total size is 1494  speedup is 0.93&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to test connecting from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should not get any prompt at all.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@an-c05n02&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Last login: Tue Oct 29 14:02:19 2013 from ...cable.user.start.ca&lt;br /&gt;
[root@an-c05n02 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice! Just type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exit&amp;lt;/span&amp;gt; to return to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
logout&lt;br /&gt;
Connection to an-c05n02 closed.&lt;br /&gt;
[root@an-c05n01 ~]# &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh&amp;lt;/span&amp;gt; from either node to connect to the other node using any of the host names we set! Note that the physical network you use for the connection will depend on the host name you use. When you used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; above, you connect using the [[BCN]]. Had you instead used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;, we would have connected over the [[SN]].&lt;br /&gt;
&lt;br /&gt;
== Setting Up UPS Monitoring ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that you are using [http://www.apc.com/site/apc/index.cfm?ISOCountryCode=ca APC] brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] network management cards. If you use another make or model, please be sure that it uses a network connection, not USB or serial, and that it is supported by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://www.apcupsd.com/ apcupsd]&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
We always recommend that you have two network-managed [[UPS]]es backing either switched [[PDU]]. This protects your &#039;&#039;Anvil!&#039;&#039; against power outages, of course, but they can also protect against distorted input power, under and over voltage events and other power anomalies. &lt;br /&gt;
&lt;br /&gt;
The reason we recommend network managed UPSes, instead of passive UPSes, is that it allows for monitoring incoming power and alerting on notable events. We have found that power events are the most common issues in production. Being alerted to power events can allow you to deal with issues that might otherwise effect other equipment in your facility that isn&#039;t or can&#039;t be protected by UPSes.&lt;br /&gt;
&lt;br /&gt;
=== Installing apcupsd ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; program is not available in the normal [[RHEL]] or [[CentOS]] repositories. So you can either [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Build_From_Source|build it yourself]] or install a version pre-built by us. In production, it certainly makes sense to build your own as it&#039;s most secure. If you wish, you could also [[Setup_apcupsd_For_Multiple_Network-Enabled_APC_UPSes_On_EL6#Installing_on_CentOS|install from ELRepo]].&lt;br /&gt;
&lt;br /&gt;
For the purpose of this tutorial, we&#039;ll download the version from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; servers as it&#039;s the simplest option.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving https://alteeve.ca/files/apcupsd/apcupsd-latest.el6.x86_64.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:apcupsd                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring Apcupsd For Two UPSes ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Much of the credit for this section belongs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s [http://www.apcupsd.org/manual/manual.html#controlling-multiple-upses-on-one-machine project documentation] on the topic. It&#039;s been edited somewhat to better suit our needs.}}&lt;br /&gt;
&lt;br /&gt;
By default, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; only supports one UPS. The practical side effect of this is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will initiate a shut down as soon as the first UPS is low on batteries. This makes no sense if the second UPS is still full or running on AC.&lt;br /&gt;
&lt;br /&gt;
So we&#039;re going to make two main changes here;&lt;br /&gt;
&lt;br /&gt;
# Disable the ability for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down of the node.&lt;br /&gt;
# Configure &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to support two (or more) UPSes.&lt;br /&gt;
&lt;br /&gt;
Before we begin, we will make a backup of the default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.conf&amp;lt;/span&amp;gt; file. Then we&#039;re going to rename it and configure it for the first UPS. Once it&#039;s configured, we will copy it for the second UPS and change just the variable values that differ.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once it&#039;s configured and working, we&#039;ll copy our new configuration to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
We [[#Foundation_Pack_Host_Names|decided earlier]] to name our UPSes &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;. We&#039;re going to use these names in the configuration and log file names used for each UPS. So let&#039;s backup the original configuration file and then rename it to match our first UPS.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.conf.anvil&lt;br /&gt;
mv /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
ls -lah /etc/apcupsd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 108K&lt;br /&gt;
drwxr-xr-x.  3 root root 4.0K Nov 26 17:34 .&lt;br /&gt;
drwxr-xr-x. 90 root root  12K Nov 25 17:28 ..&lt;br /&gt;
-rwxr--r--.  1 root root 3.9K Mar  4  2013 apccontrol&lt;br /&gt;
-rw-r--r--.  1 root root  13K Mar  4  2013 apcupsd.an-u01.conf&lt;br /&gt;
-rw-r--r--.  1 root root  13K Nov 26 15:49 apcupsd.conf.anvil&lt;br /&gt;
-rw-r--r--.  1 root root  607 Mar  4  2013 apcupsd.css&lt;br /&gt;
-rwxr--r--.  1 root root  460 Mar  4  2013 changeme&lt;br /&gt;
-rwxr--r--.  1 root root  487 Mar  4  2013 commfailure&lt;br /&gt;
-rwxr--r--.  1 root root  488 Mar  4  2013 commok&lt;br /&gt;
-rwxr-xr-x.  1 root root  17K Mar  4  2013 hid-ups&lt;br /&gt;
-rw-r--r--.  1 root root  662 Mar  4  2013 hosts.conf&lt;br /&gt;
-rwxr-xr-x.  1 root root  626 May 28  2002 make-hiddev&lt;br /&gt;
-rw-r--r--.  1 root root 2.3K Mar  4  2013 multimon.conf&lt;br /&gt;
-rwxr--r--.  1 root root  455 Mar  4  2013 offbattery&lt;br /&gt;
-rwxr--r--.  1 root root  420 Mar  4  2013 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, we&#039;re going to create a new directory called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;. We&#039;ll copy some of the existing scripts into it and then create a new script that will disabled automatic shut down of the node. We&#039;re doing this so that future updates to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; won&#039;t replace our scripts. We&#039;ll see how we use this shortly.&lt;br /&gt;
&lt;br /&gt;
Once the directory is created, we&#039;ll copy the scripts we want. Next, we&#039;ll create a new script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;doshutdown&amp;lt;/span&amp;gt; which will do nothing expect exit with return code &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;99&amp;lt;/span&amp;gt;. This return code tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that the shut down action has been disabled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /etc/apcupsd/null&lt;br /&gt;
cp /etc/apcupsd/apccontrol /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/c* /etc/apcupsd/null/&lt;br /&gt;
cp /etc/apcupsd/o* /etc/apcupsd/null/&lt;br /&gt;
echo &amp;quot;exit 99&amp;quot; &amp;gt; /etc/apcupsd/null/doshutdown&lt;br /&gt;
chown root:root /etc/apcupsd/null/doshutdown&lt;br /&gt;
chmod 744 /etc/apcupsd/null/doshutdown&lt;br /&gt;
cat /etc/apcupsd/null/doshutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
exit 99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /etc/apcupsd/null/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 36K&lt;br /&gt;
drwxr-xr-x. 2 root root 4.0K Nov 26 17:39 .&lt;br /&gt;
drwxr-xr-x. 3 root root 4.0K Nov 26 17:34 ..&lt;br /&gt;
-rwxr--r--. 1 root root 3.9K Nov 26 17:35 apccontrol&lt;br /&gt;
-rwxr--r--. 1 root root  460 Nov 26 17:36 changeme&lt;br /&gt;
-rwxr--r--. 1 root root  487 Nov 26 17:36 commfailure&lt;br /&gt;
-rwxr--r--. 1 root root  488 Nov 26 17:36 commok&lt;br /&gt;
-rwxr--r--. 1 root root    8 Nov 26 17:39 doshutdown&lt;br /&gt;
-rwxr--r--. 1 root root  455 Nov 26 17:36 offbattery&lt;br /&gt;
-rwxr--r--. 1 root root  420 Nov 26 17:36 onbattery&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now it&#039;s time to change the variables in the configuration file. Before we do though, lets look at the variables we&#039;re going to edit, what value we will set them to for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; and what they do. We&#039;ll look at the specific variables we need to change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&#039;s configuration file later.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name to use for this UPS when writing log entries or reporting status information. It should be less than eight characters long. We&#039;re going to use the short host name for the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSTYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;snmp&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; that we will communicate with this UPS using [[SNMP]] to talk to the network management card in the UPS.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the connection string needed for establishing the SNMP connection to the UPS. It&#039;s separated into four sections, each section separated by colons. The first value is the host name or IP address of the UPS. The second section is the [[TCP]] port to connect to, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;161&amp;lt;/span&amp;gt; on APC brand UPSes. The third and fourth sections are the vendor name and SNMP community, respectively. We&#039;re using the vendor name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;APC_NOTRAP&amp;lt;/span&amp;gt; in order to disable SNMP traps. The community should usually be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;private&amp;lt;/span&amp;gt;, unless you changed it in the network management card itself.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;POLLTIME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; how often, in seconds, to query the UPS status. The default is once per minute, but we will want twice per minute in order to match the scan frequency of the monitoring and alter system we will use later.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;SCRIPTDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to use the scripts in our new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory instead of the default ones.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PWRFAILDIR&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/apcupsd/null&amp;lt;/span&amp;gt;&lt;br /&gt;
|Some UPSes need to be powered off themselves when the power is about to run out of the batteries. This is controlled by a file written to this directory which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s shut down script looks for. We&#039;ve disabled shut down, but to be safe and thorough, we will disable this as well by pointing it at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;BATTERYLEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this percentage left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MINUTES&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; to initiate a shut down once the UPS reports this many minutes of run time left in the batteries. We&#039;ve disabled automatic shut down, but just the same, we&#039;ll set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3551&amp;lt;/span&amp;gt;&lt;br /&gt;
|The default value here is fine for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, but it is important to highlight here. We will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; to query &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt;&#039;s data over the network, even though it&#039;s on the same machine. Each UPS we monitor will have an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon running and listening on a dedicated [[TCP]] port. The first UPS, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt;, will listen on the default port. Which port we specify when using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcaccess&amp;lt;/span&amp;gt; later will determine which UPS status information is returned.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ANNOY&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&lt;br /&gt;
|Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; will start &amp;quot;annoying&amp;quot; the users of the system to save their work and log out five minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;300&amp;lt;/span&amp;gt; seconds) before calling the shut down of the server. We&#039;re disabling automatic shut down, so this needs to be disabled.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is where events related to this UPS are recorded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this in mind, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; to edit the file. If you are more comfortable with a text editor, please use that instead. You can refer to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; at the end of this section to see exactly what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the name of the UPS and domain once.&lt;br /&gt;
ups=&amp;quot;an-u01&amp;quot;&lt;br /&gt;
domain=&amp;quot;alteeve.ca&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS name. Note the odd syntax; There are two &#039;UPSNAME&#039; entries&lt;br /&gt;
# in the config and we only want to change the first instance.&lt;br /&gt;
sed -i &amp;quot;0,/#UPSNAME/s/^#UPSNAME/UPSNAME/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Configure the UPS access&lt;br /&gt;
sed -i &amp;quot;s/^UPSTYPE.*/UPSTYPE snmp/&amp;quot;                                  /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the poll time.&lt;br /&gt;
sed -i &amp;quot;s/^#POLLTIME/POLLTIME/&amp;quot;     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^POLLTIME.*/POLLTIME 30/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Update the script directories&lt;br /&gt;
sed -i &amp;quot;s/^SCRIPTDIR.*/SCRIPTDIR \/etc\/apcupsd\/null/&amp;quot;   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^PWRFAILDIR.*/PWRFAILDIR \/etc\/apcupsd\/null/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Change the shut down thresholds and disable the shut down annoy message&lt;br /&gt;
sed -i &amp;quot;s/^BATTERYLEVEL .*/BATTERYLEVEL 0/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^MINUTES .*/MINUTES 0/&amp;quot;           /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^ANNOY .*/ANNOY 0/&amp;quot;               /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# The NIS port isn&#039;t changing, but this makes sure it really is what we want.&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3551/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# Finally, update the event log file name.&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
&lt;br /&gt;
# End with a &#039;diff&#039; of the updated configuration against the backup we made.&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.conf.anvil /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.conf.anvil	2013-11-26 15:49:47.852153374 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 19:58:17.810278390 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-#UPSNAME&lt;br /&gt;
+UPSNAME an-u01&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -76,8 +76,8 @@&lt;br /&gt;
 #                            3052. If this parameter is empty or missing, the &lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
-UPSTYPE apcsmart&lt;br /&gt;
-DEVICE /dev/ttyS0&lt;br /&gt;
+UPSTYPE snmp&lt;br /&gt;
+DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -86,7 +86,7 @@&lt;br /&gt;
 #   will improve apcupsd&#039;s responsiveness to certain events at the cost of&lt;br /&gt;
 #   higher CPU utilization. The default of 60 is appropriate for most&lt;br /&gt;
 #   situations.&lt;br /&gt;
-#POLLTIME 60&lt;br /&gt;
+POLLTIME 30&lt;br /&gt;
 &lt;br /&gt;
 # LOCKFILE &amp;lt;path to lockfile&amp;gt;&lt;br /&gt;
 #   Path for device lock file. Not used on Win32.&lt;br /&gt;
@@ -94,14 +94,14 @@&lt;br /&gt;
 &lt;br /&gt;
 # SCRIPTDIR &amp;lt;path to script directory&amp;gt;&lt;br /&gt;
 #   Directory in which apccontrol and event scripts are located.&lt;br /&gt;
-SCRIPTDIR /etc/apcupsd&lt;br /&gt;
+SCRIPTDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # PWRFAILDIR &amp;lt;path to powerfail directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the powerfail flag file. This file&lt;br /&gt;
 #   is created when apcupsd initiates a system shutdown and is&lt;br /&gt;
 #   checked in the OS halt scripts to determine if a killpower&lt;br /&gt;
 #   (turning off UPS output power) is required.&lt;br /&gt;
-PWRFAILDIR /etc/apcupsd&lt;br /&gt;
+PWRFAILDIR /etc/apcupsd/null&lt;br /&gt;
 &lt;br /&gt;
 # NOLOGINDIR &amp;lt;path to nologin directory&amp;gt;&lt;br /&gt;
 #   Directory in which to write the nologin file. The existence&lt;br /&gt;
@@ -132,12 +132,12 @@&lt;br /&gt;
 # If during a power failure, the remaining battery percentage&lt;br /&gt;
 # (as reported by the UPS) is below or equal to BATTERYLEVEL, &lt;br /&gt;
 # apcupsd will initiate a system shutdown.&lt;br /&gt;
-BATTERYLEVEL 5&lt;br /&gt;
+BATTERYLEVEL 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the remaining runtime in minutes &lt;br /&gt;
 # (as calculated internally by the UPS) is below or equal to MINUTES,&lt;br /&gt;
 # apcupsd, will initiate a system shutdown.&lt;br /&gt;
-MINUTES 3&lt;br /&gt;
+MINUTES 0&lt;br /&gt;
 &lt;br /&gt;
 # If during a power failure, the UPS has run on batteries for TIMEOUT&lt;br /&gt;
 # many seconds or longer, apcupsd will initiate a system shutdown.&lt;br /&gt;
@@ -155,7 +155,7 @@&lt;br /&gt;
 &lt;br /&gt;
 #  Time in seconds between annoying users to signoff prior to&lt;br /&gt;
 #  system shutdown. 0 disables.&lt;br /&gt;
-ANNOY 300&lt;br /&gt;
+ANNOY 0&lt;br /&gt;
 &lt;br /&gt;
 # Initial delay after power failure before warning users to get&lt;br /&gt;
 # off the system.&lt;br /&gt;
@@ -203,7 +203,7 @@&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u01&amp;lt;/span&amp;gt; config file over to the one we&#039;ll use for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to change the following variables:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Changed value for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UPSNAME&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;DEVICE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-u02.alteeve.ca:161:APC_NOTRAP:private&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;NISPORT&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;EVENTSFILE&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to copy the configuration file and then use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; again to make these changes. We&#039;ll finish with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; showing the differences between the two configuration files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make a copy of the configuration file.&lt;br /&gt;
cp /etc/apcupsd/apcupsd.an-u01.conf /etc/apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
&lt;br /&gt;
# Set the name of this UPS. The &#039;domain&#039; variable should still be set.&lt;br /&gt;
ups=&amp;quot;an-u02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change the variables &lt;br /&gt;
sed -i &amp;quot;s/^UPSNAME.*/UPSNAME ${ups}/&amp;quot;                                   /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^DEVICE.*/DEVICE ${ups}.${domain}:161:APC_NOTRAP:private/&amp;quot;    /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^NISPORT.*/NISPORT 3552/&amp;quot;                                     /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
sed -i &amp;quot;s/^EVENTSFILE .*/EVENTSFILE \/var\/log\/apcupsd.${ups}.events/&amp;quot; /etc/apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
diff -u /etc/apcupsd/apcupsd.an-u02.conf /etc/apcupsd/apcupsd.an-u01.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/apcupsd/apcupsd.an-u02.conf	2013-11-26 20:09:18.884783551 -0500&lt;br /&gt;
+++ /etc/apcupsd/apcupsd.an-u01.conf	2013-11-26 20:13:20.273346652 -0500&lt;br /&gt;
@@ -12,7 +12,7 @@&lt;br /&gt;
 #   Use this to give your UPS a name in log files and such. This&lt;br /&gt;
 #   is particulary useful if you have multiple UPSes. This does not&lt;br /&gt;
 #   set the EEPROM. It should be 8 characters or less.&lt;br /&gt;
-UPSNAME an-u01&lt;br /&gt;
+UPSNAME an-u02&lt;br /&gt;
 &lt;br /&gt;
 # UPSCABLE &amp;lt;cable&amp;gt;&lt;br /&gt;
 #   Defines the type of cable connecting the UPS to your computer.&lt;br /&gt;
@@ -77,7 +77,7 @@&lt;br /&gt;
 #                            default of 3052 will be used.&lt;br /&gt;
 #&lt;br /&gt;
 UPSTYPE snmp&lt;br /&gt;
-DEVICE an-u01.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
+DEVICE an-u02.alteeve.ca:161:APC_NOTRAP:private&lt;br /&gt;
 &lt;br /&gt;
 # POLLTIME &amp;lt;int&amp;gt;&lt;br /&gt;
 #   Interval (in seconds) at which apcupsd polls the UPS for status. This&lt;br /&gt;
@@ -199,11 +199,11 @@&lt;br /&gt;
 #  It is not used unless NETSERVER is on. If you change this port,&lt;br /&gt;
 #  you will need to change the corresponding value in the cgi directory&lt;br /&gt;
 #  and rebuild the cgi programs.&lt;br /&gt;
-NISPORT 3551&lt;br /&gt;
+NISPORT 3552&lt;br /&gt;
 &lt;br /&gt;
 # If you want the last few EVENTS to be available over the network&lt;br /&gt;
 # by the network information server, you must define an EVENTSFILE.&lt;br /&gt;
-EVENTSFILE /var/log/apcupsd.an-u01.events&lt;br /&gt;
+EVENTSFILE /var/log/apcupsd.an-u02.events&lt;br /&gt;
 &lt;br /&gt;
 # EVENTSFILEMAX &amp;lt;kilobytes&amp;gt;&lt;br /&gt;
 #  By default, the size of the EVENTSFILE will be not be allowed to exceed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last change that is needed is to update the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; initialization script. We&#039;re going to copy a pre-edited one from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;alteeve.ca&amp;lt;/span&amp;gt; server and then look at the differences. We could edit the file, but it would be a little more complex. So instead, lets look at the differences and then talk about what changed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv /etc/init.d/apcupsd /root/apcupsd.init.d.anvil&lt;br /&gt;
wget https://alteeve.ca/files/apcupsd/apcupsd -O /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-26 20:59:42--  https://alteeve.ca/files/apcupsd/apcupsd&lt;br /&gt;
Resolving alteeve.ca... 65.39.153.64&lt;br /&gt;
Connecting to alteeve.ca|65.39.153.64|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 1759 (1.7K) [text/plain]&lt;br /&gt;
Saving to: `/etc/init.d/apcupsd&#039;&lt;br /&gt;
&lt;br /&gt;
100%[=========================================================================&amp;gt;] 1,759       --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-26 20:59:42 (5.10 MB/s) - `/etc/init.d/apcupsd&#039; saved [1759/1759]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 /etc/init.d/apcupsd &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 1.8K Aug 19  2012 /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -u /root/apcupsd.init.d.anvil /etc/init.d/apcupsd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/apcupsd.init.d.anvil	2013-03-04 23:32:43.000000000 -0500&lt;br /&gt;
+++ /etc/init.d/apcupsd	2012-08-19 18:36:33.000000000 -0400&lt;br /&gt;
@@ -1,7 +1,7 @@&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # apcupsd      This shell script takes care of starting and stopping&lt;br /&gt;
-#	       the apcupsd UPS monitoring daemon.&lt;br /&gt;
+#	       the apcupsd UPS monitoring daemon. Multi-UPS version.&lt;br /&gt;
 #&lt;br /&gt;
 # chkconfig: 2345 60 99&lt;br /&gt;
 # description: apcupsd monitors power and takes action if necessary&lt;br /&gt;
@@ -15,18 +15,24 @@&lt;br /&gt;
     start)&lt;br /&gt;
        rm -f /etc/apcupsd/powerfail&lt;br /&gt;
        rm -f /etc/nologin&lt;br /&gt;
-       echo -n &amp;quot;Starting UPS monitoring:&amp;quot; &lt;br /&gt;
-       daemon /sbin/apcupsd -f /etc/apcupsd/apcupsd.conf&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       echo&lt;br /&gt;
-       [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Starting UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          daemon /sbin/apcupsd -f $conf -P /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          echo&lt;br /&gt;
+          [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     stop)&lt;br /&gt;
-       echo -n &amp;quot;Shutting down UPS monitoring:&amp;quot;&lt;br /&gt;
-       killproc apcupsd&lt;br /&gt;
-       echo&lt;br /&gt;
-       rm -f $APCPID&lt;br /&gt;
-       rm -f /var/lock/subsys/apcupsd&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          echo -n &amp;quot;Shutting down UPS monitoring ($inst):&amp;quot;&lt;br /&gt;
+          killproc -p /var/run/apcupsd-$inst.pid apcupsd&lt;br /&gt;
+          echo&lt;br /&gt;
+          rm -f /var/run/apcupsd-$inst.pid&lt;br /&gt;
+          rm -f /var/lock/subsys/apcupsd-$inst&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     restart|force-reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
@@ -38,14 +44,16 @@&lt;br /&gt;
        exit 3&lt;br /&gt;
        ;;&lt;br /&gt;
     status)&lt;br /&gt;
-       status apcupsd&lt;br /&gt;
-       RETVAL=$?&lt;br /&gt;
-       if [ $RETVAL -eq 0 ]&lt;br /&gt;
-       then&lt;br /&gt;
-          /sbin/apcaccess status&lt;br /&gt;
-       else&lt;br /&gt;
-          exit $RETVAL&lt;br /&gt;
-       fi&lt;br /&gt;
+       for conf in /etc/apcupsd/apcupsd.*.conf ; do&lt;br /&gt;
+          inst=`basename $conf`&lt;br /&gt;
+          status -p /var/run/apcupsd-$inst.pid apcupsd-$inst&lt;br /&gt;
+          RETVAL=$?&lt;br /&gt;
+          if [ $RETVAL -eq 0 ]&lt;br /&gt;
+          then&lt;br /&gt;
+             NISPORT=`grep ^NISPORT &amp;lt; $conf | sed -e &amp;quot;s/NISPORT *\([0-9]\)/\1/&amp;quot;`&lt;br /&gt;
+             /sbin/apcaccess status localhost:$NISPORT | egrep &amp;quot;(STATUS)|(UPSNAME)&amp;quot;&lt;br /&gt;
+          fi&lt;br /&gt;
+       done&lt;br /&gt;
        ;;&lt;br /&gt;
     *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|status}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The main change here is that, for each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt; calls, we tell the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; script to loop one for each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd.*.conf&amp;lt;/span&amp;gt; file it finds. The original script expected just one configuration file but was otherwise perfect for what we needed. So we shifted the existing calls into our loop. &lt;br /&gt;
&lt;br /&gt;
So all this new script does is repeat what the original did already, once for each configuration file.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s copy all of this over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; now!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/init.d/apcupsd root@an-c05n02:/etc/init.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd&lt;br /&gt;
&lt;br /&gt;
sent 1834 bytes  received 43 bytes  3754.00 bytes/sec&lt;br /&gt;
total size is 1759  speedup is 0.94&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/apcupsd root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd/&lt;br /&gt;
apcupsd/apcupsd.an-u01.conf&lt;br /&gt;
apcupsd/apcupsd.an-u02.conf&lt;br /&gt;
apcupsd/apcupsd.conf.anvil&lt;br /&gt;
apcupsd/null/&lt;br /&gt;
apcupsd/null/apccontrol&lt;br /&gt;
apcupsd/null/changeme&lt;br /&gt;
apcupsd/null/commfailure&lt;br /&gt;
apcupsd/null/commok&lt;br /&gt;
apcupsd/null/doshutdown&lt;br /&gt;
apcupsd/null/offbattery&lt;br /&gt;
apcupsd/null/onbattery&lt;br /&gt;
&lt;br /&gt;
sent 44729 bytes  received 210 bytes  29959.33 bytes/sec&lt;br /&gt;
total size is 70943  speedup is 1.58&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /root/apcupsd.init.d.anvil root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
apcupsd.init.d.anvil&lt;br /&gt;
&lt;br /&gt;
sent 1276 bytes  received 31 bytes  871.33 bytes/sec&lt;br /&gt;
total size is 1188  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SELinux and apcupsd ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section needs some clean-up.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got two [[SELinux]] issues to address:&lt;br /&gt;
&lt;br /&gt;
* Allow the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon to use [[TCP]] and [[UDP]] ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Allow both daemons to write to the non-standard log files.&lt;br /&gt;
&lt;br /&gt;
You can see what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;selinux&amp;lt;/span&amp;gt; allows various applications to use with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage port -l&amp;lt;/span&amp;gt;. This generates a lot of data, so we&#039;re interested just in seeing what ports &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; is already allowed to use. So we&#039;ll pipe it through &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;grep&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3551&lt;br /&gt;
apcupsd_port_t                 udp      3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_port_t&amp;lt;/span&amp;gt; context is used for both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tcp&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;udp&amp;lt;/span&amp;gt;. With this, we can simply add port &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3552&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=These commands can take a while to run. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p tcp 3552&lt;br /&gt;
semanage port -a -t apcupsd_port_t -p udp 3552&lt;br /&gt;
semanage port -l |grep apcups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
apcupsd_port_t                 tcp      3552, 3551&lt;br /&gt;
apcupsd_port_t                 udp      3552, 3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up, enabling the context for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u01.events&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/apcupsd.an-u02.events&amp;lt;/span&amp;gt; log files.&lt;br /&gt;
&lt;br /&gt;
These files don&#039;t exist until the daemon starts for the first time. We&#039;ve not started it yet, so the first task is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;touch&amp;lt;/span&amp;gt; to create these log files.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /var/log/apcupsd.an-u01.events&lt;br /&gt;
touch /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have the default log file to check to see what context to use for our log files, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://mgrepl.fedorapeople.org/man_selinux/Fedora18/apcupsd.html apcupsd_selinux]&amp;lt;/span&amp;gt; manual tells us that we need to set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd_log_t &amp;lt;/span&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:var_log_t:s0   /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u01.events &lt;br /&gt;
semanage fcontext -a -t apcupsd_log_t /var/log/apcupsd.an-u02.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u01.events &lt;br /&gt;
restorecon /var/log/apcupsd.an-u02.events &lt;br /&gt;
ls -lahZ /var/log/apcupsd.an-u0*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u01.events&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:apcupsd_log_t:s0 /var/log/apcupsd.an-u02.events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, ready to test!&lt;br /&gt;
&lt;br /&gt;
=== Testing the Multi-UPS apcupds ===&lt;br /&gt;
&lt;br /&gt;
If our edits above worked properly, we should now be able to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;apcupsd&amp;lt;/span&amp;gt; daemon and query out UPSes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/apcupsd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u01.conf):             [  OK  ]&lt;br /&gt;
Starting UPS monitoring (apcupsd.an-u02.conf):             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That looks good. Now the real test; Query the status of each UPS! &lt;br /&gt;
&lt;br /&gt;
This generates a fair bit of output, so lets just look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 21:21:20 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 121.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 21:21:29 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 21:21:48 -0500  &lt;br /&gt;
HOSTNAME : an-c05n01.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:18:16 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 31817744.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 31817744.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 31817744&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 21:21:57 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you notice the serial numbers, we see that they differ and match the ones we have on record. This confirms that we&#039;re talking to both UPSes!&lt;br /&gt;
&lt;br /&gt;
Before we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the keen observer will have noted that some of the sensor values are slightly unrealistic. Some UPSes optionally support environmental sensors and, without them, their values are not realistic at all. Those can be safely ignored and are not used by the monitoring and alert system.&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s confirm that the same calls from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; result in the same values!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3551&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,049,1198&lt;br /&gt;
DATE     : 2013-11-26 22:14:12 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : an-u01&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 122.0 Volts&lt;br /&gt;
LOADPCT  :  23.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  57.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 122.0 Volts&lt;br /&gt;
SENSE    : Medium&lt;br /&gt;
DWAKE    : 1000 Seconds&lt;br /&gt;
DSHUTD   : 020 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 103.0 Volts&lt;br /&gt;
HITRANS  : 130.0 Volts&lt;br /&gt;
RETPCT   : 000.0 Percent&lt;br /&gt;
ITEMP    : 31.0 C Internal&lt;br /&gt;
ALARMDEL : 5 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 09/18/2010&lt;br /&gt;
SERIALNO : AS1038232403&lt;br /&gt;
BATTDATE : 09/01/2011&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 0&lt;br /&gt;
BADBATTS : 0&lt;br /&gt;
FIRMWARE : UPS 05.0 / COM 02.1&lt;br /&gt;
END APC  : 2013-11-26 22:14:22 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apcaccess status localhost:3552&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
APC      : 001,050,1242&lt;br /&gt;
DATE     : 2013-11-26 22:14:11 -0500  &lt;br /&gt;
HOSTNAME : an-c05n02.alteeve.ca&lt;br /&gt;
VERSION  : 3.14.10 (13 September 2011) redhat&lt;br /&gt;
UPSNAME  : APCUPS&lt;br /&gt;
CABLE    : Ethernet Link&lt;br /&gt;
DRIVER   : SNMP UPS Driver&lt;br /&gt;
UPSMODE  : Stand Alone&lt;br /&gt;
STARTTIME: 2013-11-26 21:19:30 -0500  &lt;br /&gt;
MODEL    : Smart-UPS 1500&lt;br /&gt;
STATUS   : ONLINE &lt;br /&gt;
LINEV    : 123.0 Volts&lt;br /&gt;
LOADPCT  :  22.0 Percent Load Capacity&lt;br /&gt;
BCHARGE  : 100.0 Percent&lt;br /&gt;
TIMELEFT :  58.0 Minutes&lt;br /&gt;
MBATTCHG : 0 Percent&lt;br /&gt;
MINTIMEL : 0 Minutes&lt;br /&gt;
MAXTIME  : 0 Seconds&lt;br /&gt;
MAXLINEV : 123.0 Volts&lt;br /&gt;
MINLINEV : 122.0 Volts&lt;br /&gt;
OUTPUTV  : 123.0 Volts&lt;br /&gt;
SENSE    : High&lt;br /&gt;
DWAKE    : 000 Seconds&lt;br /&gt;
DSHUTD   : 000 Seconds&lt;br /&gt;
DLOWBATT : 02 Minutes&lt;br /&gt;
LOTRANS  : 106.0 Volts&lt;br /&gt;
HITRANS  : 127.0 Volts&lt;br /&gt;
RETPCT   : 19898384.0 Percent&lt;br /&gt;
ITEMP    : 30.0 C Internal&lt;br /&gt;
ALARMDEL : 30 seconds&lt;br /&gt;
BATTV    : 27.0 Volts&lt;br /&gt;
LINEFREQ : 60.0 Hz&lt;br /&gt;
LASTXFER : Automatic or explicit self test&lt;br /&gt;
NUMXFERS : 0&lt;br /&gt;
TONBATT  : 0 seconds&lt;br /&gt;
CUMONBATT: 0 seconds&lt;br /&gt;
XOFFBATT : N/A&lt;br /&gt;
SELFTEST : OK&lt;br /&gt;
STESTI   : OFF&lt;br /&gt;
STATFLAG : 0x07000008 Status Flag&lt;br /&gt;
MANDATE  : 06/14/2012&lt;br /&gt;
SERIALNO : AS1224213144&lt;br /&gt;
BATTDATE : 10/15/2012&lt;br /&gt;
NOMOUTV  : 120 Volts&lt;br /&gt;
NOMBATTV : 19898384.0 Volts&lt;br /&gt;
HUMIDITY : 6519592.0 Percent&lt;br /&gt;
AMBTEMP  : 6519592.0 C&lt;br /&gt;
EXTBATTS : 19898384&lt;br /&gt;
BADBATTS : 6519592&lt;br /&gt;
FIRMWARE : UPS 08.3 / MCU 14.0&lt;br /&gt;
END APC  : 2013-11-26 22:14:38 -0500  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Later, when we setup the monitoring and alert system, we&#039;ll take a closer look at some of the variables and their possible values.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Storage ==&lt;br /&gt;
&lt;br /&gt;
At this time, this section covers monitoring LSI-based [[RAID]] controllers. If you have a different RAID controller and wish to contribute, we&#039;d [[Contct us|love to hear from you]].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring LSI-Based RAID Controllers with MegaCli ===&lt;br /&gt;
&lt;br /&gt;
Many tier-1 hardware vendors as well as many mid-tier and in-house brand servers use controllers built by or based on [http://www.lsi.com LSI] [[RAID]] controller cards.&lt;br /&gt;
&lt;br /&gt;
==== Installing MegaCli ====&lt;br /&gt;
&lt;br /&gt;
In this section, we&#039;ll install LSI&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; command-line tool for monitoring our storage. This is a commercial tool, so you must download it directly from LSI&#039;s website and agree to their license agreement.&lt;br /&gt;
&lt;br /&gt;
At the time of writing, you can download it [http://www.lsi.com/support/Pages/download-results.aspx?keyword=latest%20megacli%20for%20linux using this link]. Click on the orange &amp;quot;+&amp;quot; to the right of &amp;quot;&#039;&#039;Management Software and Tools&#039;&#039;&amp;quot; in the search results page.  Click on the &amp;quot;Download&amp;quot; icon and save the file to disk. Extract the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli_Linux.zip&amp;lt;/span&amp;gt; file and switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/MegaCli_Linux&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The version of the file name shown below may have changed.}}&lt;br /&gt;
&lt;br /&gt;
Copy the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli-8.07.08-1.noarch.rpm&amp;lt;/span&amp;gt; file to your nodes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n01:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av MegaCli-8.07.08-1.noarch.rpm root@an-c05n02:/root/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
MegaCli-8.07.08-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
sent 1552828 bytes  received 31 bytes  345079.78 bytes/sec&lt;br /&gt;
total size is 1552525  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can install the program on our nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm -Uvh MegaCli-8.07.08-1.noarch.rpm &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:MegaCli                ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By default, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; binary is saved in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/opt/MegaRAID/MegaCli/MegaCli64&amp;lt;/span&amp;gt;. This isn&#039;t in [[RHEL]]&#039;s default &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;PATH&amp;lt;/span&amp;gt;, so we will want to make a symlink to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/sbin&amp;lt;/span&amp;gt;. This way, we can simply type &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;&#039; instead of the full path.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /sbin/&lt;br /&gt;
ls -lah /sbin/MegaCli64 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 31 Nov 28 19:28 /sbin/MegaCli64 -&amp;gt; /opt/MegaRAID/MegaCli/MegaCli64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent.&lt;br /&gt;
&lt;br /&gt;
==== Checking Storage Health with MegaCli64 ====&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This tutorial was written using a development server and, as such, has only four drives in each array. All production servers should have a &#039;&#039;&#039;minimum&#039;&#039;&#039; of six drives to help ensure good storage response time under highly random reads and writes seen in virtualized environments.}}&lt;br /&gt;
&lt;br /&gt;
LSI RAID controllers are designed to work alone or in conjunction with other LSI controllers at the same time. For this reason, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; supports multiple controllers, virtual disks, physical disks and so on. We&#039;re going to be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;aAll&amp;lt;/span&amp;gt; a lot. This simply tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; to show whatever we&#039;re asking for from all found adapters.&lt;br /&gt;
&lt;br /&gt;
The program itself is extremely powerful. Trying to cover all the ways that it can be used would require a long tutorial in and of itself. So we&#039;re going to just look at some core tasks that we&#039;re interested in. If you want to experiment, there is a great [http://mycusthelp.info/LSI/_cs/AnswerDetail.aspx?sSessionID=1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB&amp;amp;inc=8040&amp;amp;caller=~%2fFindAnswers.aspx%3ftxtCriteria%3dmegacli%26sSessionid%3d1081681638QKLFVWIPIZNXQYHDDTNIHQEJKOCZDB cheat-sheet here].&lt;br /&gt;
&lt;br /&gt;
Lets start by looking at the logical drive.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 LDInfo Lall aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter 0 -- Virtual Drive Information:&lt;br /&gt;
Virtual Drive: 0 (Target Id: 0)&lt;br /&gt;
Name                :&lt;br /&gt;
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
Size                : 836.625 GB&lt;br /&gt;
Sector Size         : 512&lt;br /&gt;
Parity Size         : 278.875 GB&lt;br /&gt;
State               : Optimal&lt;br /&gt;
Strip Size          : 64 KB&lt;br /&gt;
Number Of Drives    : 4&lt;br /&gt;
Span Depth          : 1&lt;br /&gt;
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
Default Access Policy: Read/Write&lt;br /&gt;
Current Access Policy: Read/Write&lt;br /&gt;
Disk Cache Policy   : Disabled&lt;br /&gt;
Encryption Type     : None&lt;br /&gt;
Bad Blocks Exist: No&lt;br /&gt;
Is VD Cached: No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can see that the virtual disk has four real disks in RAID level 5, it is 836.625 [[GB]] in size and it&#039;s in [[WriteBack]] caching mode. This is pretty typical, save for the number of disks.&lt;br /&gt;
&lt;br /&gt;
Lets look now at the health of the RAID controller&#039;s battery.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4083 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 28 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 74 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 100 %&lt;br /&gt;
  Absolute State of charge: 74 %&lt;br /&gt;
  Remaining Capacity: 902 mAh&lt;br /&gt;
  Full Charge Capacity: 906 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 35&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/22, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 15686&lt;br /&gt;
  Pack Stat Configuration: 0x6490&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Wed Dec 18 16:47:41 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 AdpBbuCmd aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BBU status for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
BatteryType: iBBU&lt;br /&gt;
Voltage: 4048 mV&lt;br /&gt;
Current: 0 mA&lt;br /&gt;
Temperature: 27 C&lt;br /&gt;
Battery State: Optimal&lt;br /&gt;
BBU Firmware Status:&lt;br /&gt;
&lt;br /&gt;
  Charging Status              : None&lt;br /&gt;
  Voltage                                 : OK&lt;br /&gt;
  Temperature                             : OK&lt;br /&gt;
  Learn Cycle Requested	                  : No&lt;br /&gt;
  Learn Cycle Active                      : No&lt;br /&gt;
  Learn Cycle Status                      : OK&lt;br /&gt;
  Learn Cycle Timeout                     : No&lt;br /&gt;
  I2c Errors Detected                     : No&lt;br /&gt;
  Battery Pack Missing                    : No&lt;br /&gt;
  Battery Replacement required            : No&lt;br /&gt;
  Remaining Capacity Low                  : No&lt;br /&gt;
  Periodic Learn Required                 : No&lt;br /&gt;
  Transparent Learn                       : No&lt;br /&gt;
  No space to cache offload               : No&lt;br /&gt;
  Pack is about to fail &amp;amp; should be replaced : No&lt;br /&gt;
  Cache Offload premium feature required  : No&lt;br /&gt;
  Module microcode update required        : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GasGuageStatus:&lt;br /&gt;
  Fully Discharged        : No&lt;br /&gt;
  Fully Charged           : Yes&lt;br /&gt;
  Discharging             : Yes&lt;br /&gt;
  Initialized             : Yes&lt;br /&gt;
  Remaining Time Alarm    : No&lt;br /&gt;
  Discharge Terminated    : No&lt;br /&gt;
  Over Temperature        : No&lt;br /&gt;
  Charging Terminated     : No&lt;br /&gt;
  Over Charged            : No&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Charger System State: 49168&lt;br /&gt;
  Charger System Ctrl: 0&lt;br /&gt;
  Charging current: 0 mA&lt;br /&gt;
  Absolute state of charge: 68 %&lt;br /&gt;
  Max Error: 2 %&lt;br /&gt;
  Battery backup charge time : 0 hours&lt;br /&gt;
&lt;br /&gt;
BBU Capacity Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Relative State of Charge: 98 %&lt;br /&gt;
  Absolute State of charge: 68 %&lt;br /&gt;
  Remaining Capacity: 821 mAh&lt;br /&gt;
  Full Charge Capacity: 841 mAh&lt;br /&gt;
  Run time to empty: Battery is not being charged.  &lt;br /&gt;
  Average time to empty: Battery is not being charged.  &lt;br /&gt;
  Estimated Time to full recharge: Battery is not being charged.  &lt;br /&gt;
  Cycle Count: 31&lt;br /&gt;
Max Error = 2 %&lt;br /&gt;
Remaining Capacity Alarm = 120 mAh&lt;br /&gt;
Remining Time Alarm = 10 Min&lt;br /&gt;
&lt;br /&gt;
BBU Design Info for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Date of Manufacture: 10/23, 2010&lt;br /&gt;
  Design Capacity: 1215 mAh&lt;br /&gt;
  Design Voltage: 3700 mV&lt;br /&gt;
  Specification Info: 33&lt;br /&gt;
  Serial Number: 18704&lt;br /&gt;
  Pack Stat Configuration: 0x64b0&lt;br /&gt;
  Manufacture Name: LS1121001A&lt;br /&gt;
  Firmware Version   : &lt;br /&gt;
  Device Name: 3150301&lt;br /&gt;
  Device Chemistry: LION&lt;br /&gt;
  Battery FRU: N/A&lt;br /&gt;
  Transparent Learn = 0&lt;br /&gt;
  App Data = 0&lt;br /&gt;
&lt;br /&gt;
BBU Properties for Adapter: 0&lt;br /&gt;
&lt;br /&gt;
  Auto Learn Period: 30 Days&lt;br /&gt;
  Next Learn time: Mon Dec 23 05:29:33 2013&lt;br /&gt;
  Learn Delay Interval:0 Hours&lt;br /&gt;
  Auto-Learn Mode: Enabled&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now this gives us quite a bit of data.&lt;br /&gt;
&lt;br /&gt;
The battery&#039;s principal job is to protect the data in the data stored in the [[RAM]] module used to buffer writes (and a certain amount of reads) that have not yet been flushed to the physical disks. This is critical because, if this data was lost, the contents of the disk could be corrupted. &lt;br /&gt;
&lt;br /&gt;
This battery is generally used when the node loses power. Depending on whether your node has battery-backed write-cache (BBU) or flash-backed write-cache (FBWC), the battery will be used to store the data in the RAM until power is restored (BBU) or just long enough to copy the data in the cache module to persistent solid-state storage build into the battery or RAID controller.&lt;br /&gt;
&lt;br /&gt;
If your server uses a BBU, then watching the &amp;quot;hold up time&amp;quot;. The controller above doesn&#039;t provide this because it is a flash-backed controller. If yours in a battery-backed controller, you will see a variable like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Battery backup charge time : 48 hours +&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells you that the node can protect the contents of the cache for greater than 48 hours. This means that, so long as power is restored to the server within two days, your data will be protected. Generally, if the hold up time falls below 24 hours, the BBU should be replaced. This happens because, as batteries age, they lose capacity. This is simple chemistry.&lt;br /&gt;
&lt;br /&gt;
Note that periodically, usually once per month, the controller intentionally drains and recharges the controller. This is called a &amp;quot;relearn cycle&amp;quot; (or simply a &amp;quot;learn cycle&amp;quot;). This is a way for the controller to verify the health of the battery. Should a battery fail to recharge, it will be declared dead and need to be replaced.&lt;br /&gt;
&lt;br /&gt;
Note that it is normal for the cache policy to switch from &amp;quot;write-back&amp;quot; to &amp;quot;write-through&amp;quot; once the battery is sufficiently drained. The controller should return to &amp;quot;write-back&amp;quot; mode once the learn cycle completes and the battery charges enough. During this time, the write speed will be reduced because all writes have to read the physical disks instead of just cache, which is slower.&lt;br /&gt;
&lt;br /&gt;
Lastly, lets look at the individual drives.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 7&lt;br /&gt;
WWN: 5000C50043EE29E0&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043ee29e1&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3T7X6    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 6&lt;br /&gt;
WWN: 5000C5004310F4B4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004310f4b5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CMMC    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :42C (107.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000C500430189E4&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c500430189e5&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3CD2Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 11&lt;br /&gt;
WWN: 5000CCA00FAEC0BF&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00faec0bd&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVY33ARM            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MegaCli64 PDList aAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Adapter #0&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 0&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 0&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 10&lt;br /&gt;
WWN: 5000C50043112280&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043112281&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 3(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DE9Z    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :39C (102.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 1&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 1&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 9&lt;br /&gt;
WWN: 5000C5004312760C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c5004312760d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 2(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3DNG7    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :40C (104.00 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 2&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 2&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 8&lt;br /&gt;
WWN: 5000C50043126B4C&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 279.396 GB [0x22ecb25c Sectors]&lt;br /&gt;
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]&lt;br /&gt;
Coerced Size: 278.875 GB [0x22dc0000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: 1703&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000c50043126b4d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 0(path0) &lt;br /&gt;
Inquiry Data: SEAGATE ST3300657SS     17036SJ3E01G    @#87980 &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :37C (98.60 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enclosure Device ID: 252&lt;br /&gt;
Slot Number: 6&lt;br /&gt;
Drive&#039;s position: DiskGroup: 0, Span: 0, Arm: 3&lt;br /&gt;
Enclosure position: N/A&lt;br /&gt;
Device Id: 5&lt;br /&gt;
WWN: 5000CCA00F5CA29F&lt;br /&gt;
Sequence Number: 2&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Last Predictive Failure Event Seq Number: 0&lt;br /&gt;
PD Type: SAS&lt;br /&gt;
&lt;br /&gt;
Raw Size: 419.186 GB [0x3465f870 Sectors]&lt;br /&gt;
Non Coerced Size: 418.686 GB [0x3455f870 Sectors]&lt;br /&gt;
Coerced Size: 418.656 GB [0x34550000 Sectors]&lt;br /&gt;
Sector Size:  0&lt;br /&gt;
Firmware state: Online, Spun Up&lt;br /&gt;
Device Firmware Level: A42B&lt;br /&gt;
Shield Counter: 0&lt;br /&gt;
Successful diagnostics completion on :  N/A&lt;br /&gt;
SAS Address(0): 0x5000cca00f5ca29d&lt;br /&gt;
SAS Address(1): 0x0&lt;br /&gt;
Connected Port Number: 1(path0) &lt;br /&gt;
Inquiry Data: HITACHI HUS156045VLS600 A42BJVWMYA6L            &lt;br /&gt;
FDE Capable: Not Capable&lt;br /&gt;
FDE Enable: Disable&lt;br /&gt;
Secured: Unsecured&lt;br /&gt;
Locked: Unlocked&lt;br /&gt;
Needs EKM Attention: No&lt;br /&gt;
Foreign State: None &lt;br /&gt;
Device Speed: 6.0Gb/s &lt;br /&gt;
Link Speed: 6.0Gb/s &lt;br /&gt;
Media Type: Hard Disk Device&lt;br /&gt;
Drive:  Not Certified&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
PI Eligibility:  No &lt;br /&gt;
Drive is formatted for PI information:  No&lt;br /&gt;
PI: No PI&lt;br /&gt;
Port-0 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: 6.0Gb/s &lt;br /&gt;
Port-1 :&lt;br /&gt;
Port status: Active&lt;br /&gt;
Port&#039;s Linkspeed: Unknown &lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&lt;br /&gt;
Exit Code: 0x00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows us two bits of information about each hard drive in the array. The main pieces to watch are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Media Error Count: 0&lt;br /&gt;
Other Error Count: 0&lt;br /&gt;
Predictive Failure Count: 0&lt;br /&gt;
Drive Temperature :34C (93.20 F)&lt;br /&gt;
Drive has flagged a S.M.A.R.T alert : No&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is normal for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Other Error Count&amp;lt;/span&amp;gt; to increment by 1 periodically. If it jumps by more than 1, or if it jumps multiple times within a few days, consult your system provider and inquire about replacing the drive.}}&lt;br /&gt;
&lt;br /&gt;
These values show us the overall health of the drive. For most hard drives, the temperature should stay below 55C at all times. Any temperature over 45C should be investigated. All other failure counts should stay at 0, save for the exception mentioned in the note above.&lt;br /&gt;
&lt;br /&gt;
As mentioned, there are many, many other ways to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt;. If a drive ever fails, you can use it to prepare the drive for removal while the system is running. You can use it to adjust when the learn cycle runs, adjust cache policy and do many other things. It is well worth learning in more depth. However, that is outside the scope of this section.&lt;br /&gt;
&lt;br /&gt;
==== Managing MegaSAS.log ====&lt;br /&gt;
&lt;br /&gt;
Each time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; runs, it writes to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/MegaSAS.log&amp;lt;/span&amp;gt; file. Later, we&#039;re going to setup a monitoring and alert system that checks the health of each node every 30 seconds. This program calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; three times per pass, so the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file can grow to a decent size.&lt;br /&gt;
&lt;br /&gt;
To prevent this log file from getting too big, AN!CDB ships with a tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://github.com/digimer/an-cdb/blob/master/tools/archive_an-cm.log.sh archive_an-cm.log.sh]&amp;lt;/span&amp;gt;. This is a very simple bash script that is designed to run once per month to archive and compress the log file. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:42:19--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:42:19 (7.86 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:42 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh -O /root/archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-28 20:47:53--  https://raw.github.com/digimer/an-cdb/master/tools/archive_an-cm.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.74.133&lt;br /&gt;
Connecting to raw.github.com|199.27.74.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 984 [text/plain]&lt;br /&gt;
Saving to: `/root/archive_an-cm.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 984         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2013-11-28 20:47:54 (58.9 MB/s) - `/root/archive_an-cm.log.sh&#039; saved [984/984]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_an-cm.log.sh &lt;br /&gt;
ls -lah archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 984 Nov 28 20:47 archive_an-cm.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll add it to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;root&amp;lt;/span&amp;gt; user&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table. We&#039;ll set it to run at midnight on the first of each month.&lt;br /&gt;
&lt;br /&gt;
On both nodes;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirm the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cron&amp;lt;/span&amp;gt; table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
= Configuring The Cluster Foundation =&lt;br /&gt;
&lt;br /&gt;
We need to configure the cluster in two stages. This is because we have something of a chicken-and-egg problem:&lt;br /&gt;
&lt;br /&gt;
* We need clustered storage for our virtual machines.&lt;br /&gt;
* Our clustered storage needs the cluster for fencing.&lt;br /&gt;
&lt;br /&gt;
Conveniently, clustering has two logical parts:&lt;br /&gt;
&lt;br /&gt;
* Cluster communication and membership.&lt;br /&gt;
* Cluster resource management.&lt;br /&gt;
&lt;br /&gt;
The first, communication and membership, covers which nodes are part of the cluster and it is responsible for ejecting faulty nodes from the cluster, among other tasks. This is managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. The second part, resource management, is provided by a second tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It&#039;s this second part that we will set aside for later. In short though, it makes sure clustered services, storage and the virtual servers, are always running whenever possible.&lt;br /&gt;
&lt;br /&gt;
== Keeping Time in Sync ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section is &#039;&#039;&#039;only relevant&#039;&#039;&#039; to networks that block access to external time sources, called &amp;quot;NTP servers&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
It is very important that time on both nodes be kept in sync. The way to do this is to setup [[[NTP]], the network time protocol. &lt;br /&gt;
&lt;br /&gt;
Earlier on, we setup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; to start on boot. For most people, that is enough and you can skip to the next section.&lt;br /&gt;
&lt;br /&gt;
However, some particularly restrictive networks will block access to external time servers. If you&#039;re on one of these networks, ask your admin (if you don&#039;t know already) what name or IP to use as a time source. Once you have this, you can enter the following command to add it to the name server configuration. We&#039;ll use the example time source &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntp.example.ca&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, add the time server to the NTP configuration file by appending the following lines to the end of it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo server tntp.example.ca$&#039;\n&#039;restrict ntp.example.ca mask 255.255.255.255 nomodify notrap noquery &amp;gt;&amp;gt; /etc/ntp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Restart the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon and your nodes should shortly update their times.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/ntpd restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Shutting down ntpd:                                        [  OK  ]&lt;br /&gt;
Starting ntpd:                                             [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;date&amp;lt;/span&amp;gt; command on both nodes to ensure the times match. If they don&#039;t, give it a few minutes. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ntpd&amp;lt;/span&amp;gt; daemon sync every few minutes.&lt;br /&gt;
&lt;br /&gt;
== Alternate Configuration Methods ==&lt;br /&gt;
&lt;br /&gt;
In [[Red Hat]] Cluster Services, the heart of the cluster is found in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf|/etc/cluster/cluster.conf]]&amp;lt;/span&amp;gt; [[XML]] configuration file.&lt;br /&gt;
&lt;br /&gt;
There are three main ways of editing this file. Two are already well documented, so I won&#039;t bother discussing them, beyond introducing them. The third way is by directly hand-crafting the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file. We&#039;ve found that directly editing configuration files is the best way to learn clustering at a deep level. For this reason, it is the method we&#039;ll use here.&lt;br /&gt;
&lt;br /&gt;
The two graphical tools are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-scc-CA.html system-config-cluster]&amp;lt;/span&amp;gt;, older GUI tool run directly from one of the cluster nodes.&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/ch-config-conga-CA.html Conga], comprised of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; node-side client and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;luci&amp;lt;/span&amp;gt; web-based server (can be run on machines outside the cluster).&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve gotten comfortable with HA clustering, you may want to go back and play with these tools. They can certainly be time-savers.&lt;br /&gt;
&lt;br /&gt;
== The First cluster.conf Foundation Configuration ==&lt;br /&gt;
&lt;br /&gt;
The very first stage of building the cluster is to create a configuration file that is as minimal as possible. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and, when we&#039;re done, copy it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Name the Cluster and Set the Configuration Version ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cluster.3B_The_Parent_Tag|cluster]]&amp;lt;/span&amp;gt; tag is the parent tag for the entire cluster configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/cluster/cluster.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster&amp;lt;/span&amp;gt; element has two attributes that we need to set:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;config_version=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#name|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute defines the name of the cluster. It must be unique amongst the clusters on your network. It should be descriptive, but you will not want to make it too long, either. You will see this name in the various cluster tools and you will enter in, for example, when creating a [[GFS2]] partition later on. This tutorial uses the cluster name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cluster-05&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS v3 cluster.conf#config_version|config_version]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute is an integer indicating the version of the configuration file. Whenever you make a change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, you will need to increment. If you don&#039;t increment this number, then the cluster tools will not know that the file needs to be reloaded. As this is the first version of this configuration file, it will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Note that this tutorial will increment the version after every change, regardless of whether it is explicitly pushed out to the other nodes and reloaded. The reason is to help get into the habit of always increasing this value.&lt;br /&gt;
&lt;br /&gt;
=== Configuring cman Options ===&lt;br /&gt;
&lt;br /&gt;
We are setting up a special kind of cluster, called a 2-Node cluster.&lt;br /&gt;
&lt;br /&gt;
This is a special case because traditional [[quorum]] will not be useful. With only two nodes, each having a vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the total votes is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. Quorum needs &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt;, which means that a single node failure would shut down the cluster, as the remaining node&#039;s vote is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50%&amp;lt;/span&amp;gt; exactly. That kind of defeats the purpose to having a cluster at all.&lt;br /&gt;
&lt;br /&gt;
So to account for this special case, there is a special attribute called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt;. This tells the cluster manager to continue operating with only one vote. This option requires that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#expected_votes|expected_votes]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute be set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;expected_votes&amp;lt;/span&amp;gt; is set automatically to the total sum of the defined cluster nodes&#039; votes (which itself is a default of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;). This is the other half of the &amp;quot;trick&amp;quot;, as a single node&#039;s vote of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; now always provides quorum (that is, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; meets the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;50% + 1&amp;lt;/span&amp;gt; requirement).&lt;br /&gt;
&lt;br /&gt;
In short; this disables quorum.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the self-closing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;... /&amp;gt;&amp;lt;/span&amp;gt; tag. This is an [[XML]] syntax that tells the parser not to look for any child or a closing tags.&lt;br /&gt;
&lt;br /&gt;
=== Defining Cluster Nodes ===&lt;br /&gt;
&lt;br /&gt;
This example is a little artificial, please don&#039;t load it into your cluster as we will need to add a few child tags, but one thing at a time.&lt;br /&gt;
&lt;br /&gt;
This introduces two tags, the later a child tag of the former:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternodes&amp;lt;/span&amp;gt;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first is the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternodes.3B_Defining_Cluster_Nodes|clusternodes]]&amp;lt;/span&amp;gt; tag, which takes no attributes of its own. Its sole purpose is to contain the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; child tags, of which there will be one per node. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_clusternode|clusternode]]&amp;lt;/span&amp;gt; tag defines each cluster node. There are many attributes available, but we will look at just the two required ones. &lt;br /&gt;
&lt;br /&gt;
The first is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute. The value &#039;&#039;&#039;should&#039;&#039;&#039; match the fully qualified domain name, which you can check by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;uname -n&amp;lt;/span&amp;gt; on each node. This isn&#039;t strictly required, mind you, but for simplicity&#039;s sake, this is the name we will use.&lt;br /&gt;
&lt;br /&gt;
The cluster decides which network to use for cluster communication by resolving the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; value. It will take the returned [[IP]] address and try to match it to one of the IPs on the system. Once it finds a match, that becomes the network the cluster will use. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; resolves to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10.20.50.1&amp;lt;/span&amp;gt;, which is used by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syslinux&amp;lt;/span&amp;gt; with a little [[bash]] magic to verify which interface is going to be used for the cluster communication;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig |grep -B 1 $(gethostip -d $(uname -n)) | grep HWaddr | awk &#039;{ print $1 }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we wanted!&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#name_3|name]]&amp;lt;/span&amp;gt; attribute document for details on how name to interface mapping is resolved.&lt;br /&gt;
&lt;br /&gt;
The second attribute is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#clusternode.27s_nodeid_attribute|nodeid]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;. This must be a unique integer amongst the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode ...&amp;gt;&amp;lt;/span&amp;gt; elements in the cluster. It is what the cluster itself uses to identify the node.&lt;br /&gt;
&lt;br /&gt;
=== Defining Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
[[2-Node_Red_Hat_KVM_Cluster_Tutorial#Concept.3B_Fencing|Fencing]] devices are used to forcible eject a node from a cluster if it stops responding. Said another way, fence devices put a node into a known state. &lt;br /&gt;
&lt;br /&gt;
There are many, many devices out there that can be used for fencing. We&#039;re going to be using two specific devices:&lt;br /&gt;
&lt;br /&gt;
* IPMI to press and hold the node&#039;s power button until the server powers down.&lt;br /&gt;
* Switched PDUs to cut the power feeding the node, if the IPMI device fails or can not be contacted.&lt;br /&gt;
&lt;br /&gt;
In the end, any device that can power off or isolate a lost node will do fine for fencing. The setup we will be using here uses very common components and it provides full redundancy, ensuring the ability to fence regardless of what might fail.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, our nodes support [[IPMI]], which we will use as the primary fence device. We also have an [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP7900 APC] brand switched PDU which will act as a backup fence device.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Not all brands of switched PDUs are supported as fence devices. Before you purchase a fence device, confirm that it is supported.}}&lt;br /&gt;
&lt;br /&gt;
All fence devices are contained within the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevices.3B_Defining_Fence_Devices|fencedevices]]&amp;lt;/span&amp;gt; tag, which has no attributes of its own. Within this parent tag are one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; child tags.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In our cluster, each fence device used will have its own &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt; tag. If you are using [[IPMI]], this means you will have a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; entry for each node, as each physical IPMI [[BMC]] is a unique fence device. &lt;br /&gt;
&lt;br /&gt;
Our nodes have two power supplies each. Each power supply is plugged into a different switched PDU, which in turn in plugged into a dedicated UPS. So we have two physical PDUs, requiring two more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;fencedevice... /&amp;gt;&amp;lt;/span&amp;gt; entries.&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; tags share two basic attributes; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_name_attribute|name]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fencedevice.27s_agent_attribute|agent]]=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; attribute must be unique among all the fence devices in your cluster. As we will see in the next step, this name will be used within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode...&amp;gt;&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; tag tells the cluster which [[fence agent]] to use when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[fenced]]&amp;lt;/span&amp;gt; daemon needs to communicate with the physical fence device. A fence agent is simple a shell script that acts as a go-between layer between the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fenced&amp;lt;/span&amp;gt; daemon and the fence hardware. This agent takes the arguments from the daemon, like what port to act on and what action to take, and performs the requested action against the target node. The agent is responsible for ensuring that the execution succeeded and returning an appropriate success or failure exit code. &lt;br /&gt;
&lt;br /&gt;
For those curious, the full details are described in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[https://fedorahosted.org/cluster/wiki/FenceAgentAPI FenceAgentAPI]&amp;lt;/span&amp;gt;. If you have two or more of the same fence device, like IPMI, then you will use the same fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt; value a corresponding number of times.&lt;br /&gt;
&lt;br /&gt;
Beyond these two attributes, each fence agent will have its own subset of attributes. The scope of which is outside this tutorial, though we will see examples for IPMI and a switched PDU. All fence agents have a corresponding man page that will show you what attributes it accepts and how they are used. The two fence agents we will see here have their attributes defines in the following &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[man]]&amp;lt;/span&amp;gt; pages:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_ipmilan&amp;lt;/span&amp;gt; - IPMI fence agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fence_apc_snmp&amp;lt;/span&amp;gt; - APC-brand switched PDU using [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
The example above is what this tutorial will use.&lt;br /&gt;
&lt;br /&gt;
=== Using the Fence Devices ===&lt;br /&gt;
&lt;br /&gt;
Now we have nodes and fence devices defined, we will go back and tie them together. This is done by:&lt;br /&gt;
&lt;br /&gt;
* Defining a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag containing all fence methods and devices.&lt;br /&gt;
** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; tag(s) containing the device call(s) needed for each fence attempt.&lt;br /&gt;
*** Defining one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tag(s) containing attributes describing how to call the fence device to kill this node.&lt;br /&gt;
&lt;br /&gt;
Here is how we implement [[IPMI]] as the primary fence device with the dual APC switched PDUs as the backup method.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First, notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fence|fence]]&amp;lt;/span&amp;gt; tag has no attributes. It&#039;s merely a parent for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]](s)&amp;lt;/span&amp;gt; child elements.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This next few paragraphs are very important! Please read it carefully!}}&lt;br /&gt;
&lt;br /&gt;
The second thing you will notice is that one method, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; method has a device with an extra argument. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; is needed because this is a 2-node cluster so quorum is not available. What this means is that, if the network breaks and both nodes are alive, both nodes will try to fence the other at nearly the same time. IPMI devices, being unique per node, can conceivable mean both nodes initiate a power down before either dies. This condition is called a &amp;quot;dual-fence&amp;quot; and leaves your cluster entirely powered down.&lt;br /&gt;
&lt;br /&gt;
There are two ways of dealing with this. The first is to make sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is turned off. When the power button is pressed when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is running, the system will begin a graceful shutdown. The IPMI BMC will continue to hold down the power button and after four seconds, the node should power off. However, this is four seconds where the fence daemon can initiate a fence against the peer. By disabling the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; daemon, the system will nearly instantly power off when the power button is pressed, drastically reducing the time between a node&#039;s power button being pressed and when the node actually shuts off.&lt;br /&gt;
&lt;br /&gt;
The second way to deal with this is to give one of the nodes a head start. That is what the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; does. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; goes to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05b02&amp;lt;/span&amp;gt;, it will not see a delay and it will initiate the fence action immediately. Meanwhile, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will gather up the information on fencing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, see the 15 second delay and wait. After 15 seconds, it will proceed with the fence action as it normally would.&lt;br /&gt;
&lt;br /&gt;
The idea here is that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will have a 15 second head start in fencing its peer. These configuration changes should help ensure that one node always survives a fence call.&lt;br /&gt;
&lt;br /&gt;
Back to the main fence config!&lt;br /&gt;
&lt;br /&gt;
There are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_method|method]]&amp;lt;/span&amp;gt; elements per node, one for each fence device, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. These names are merely descriptive and can be whatever you feel is most appropriate. &lt;br /&gt;
&lt;br /&gt;
Within each &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; element is one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; tags. For a given method to succeed, all defined &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; elements must themselves succeed. This is very useful for grouping calls to separate PDUs when dealing with nodes having redundant power supplies, as we have here.&lt;br /&gt;
&lt;br /&gt;
The actual fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_device|device]]&amp;lt;/span&amp;gt; configuration is the final piece of the puzzle. It is here that you specify per-node configuration options and link these attributes to a given &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#Tag.3B_fencedevice|fencedevice]]&amp;lt;/span&amp;gt;. Here, we see the link to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#device.27s_name_attribute|name]]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n01&amp;lt;/span&amp;gt; in this example.&lt;br /&gt;
&lt;br /&gt;
Note that the PDU definitions needs a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port=&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; attribute where the IPMI fence devices do not. These are the sorts of differences you will find, varying depending on how the fence device agent works. IPMI devices only work on their host, so when you ask an IPMI device to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;&amp;quot;, it&#039;s obvious what the target is. With devices like PDUs, SAN switches and other multi-port devices, this is not the case. Our PDUs have eight ports each, so we need to tell the fence agent which ports we want acted on. In our case, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s power supplies are plugged into port #1 on both PDUs. For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, they&#039;re plugged into each PDU&#039;s port #2.&lt;br /&gt;
&lt;br /&gt;
When a fence call is needed, the fence devices will be called in the order they are found here. If both devices fail, the cluster will go back to the start and try again, looping indefinitely until one device succeeds.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s important to understand why we use IPMI as the primary fence device. The FenceAgentAPI specification suggests, but does not require, that a fence device confirm that the node is off. IPMI can do this, the switched PDU can not. Thus, IPMI won&#039;t return a success unless the node is truly off. The PDU, however, will return a success once the power is cut to the requested port. The risk is that a misconfigured node with redundant PSUs may in fact still be running if one of their cords was moved to a different port and the configuration wasn&#039;t updated, leading to disastrous consequences.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s step through an example fence call to help show how the per-cluster and fence device attributes are combined during a fence call:&lt;br /&gt;
&lt;br /&gt;
* The cluster manager decides that a node needs to be fenced. Let&#039;s say that the victim is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The first &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; section under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is consulted. Within it there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt; entries, named &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt;. The IPMI method&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has one attribute while the PDU&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; has two attributes;&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;; only found in the PDU &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;method&amp;lt;/span&amp;gt;, this tells the cluster that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; is connected to switched PDU&#039;s outlet number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;action&amp;lt;/span&amp;gt;; Found on both devices, this tells the cluster that the fence action to take is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt;. How this action is actually interpreted depends on the fence device in use, though the name certainly implies that the node will be forced off and then restarted.&lt;br /&gt;
* The cluster searches in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevices&amp;lt;/span&amp;gt; for a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; matching the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmi_n02&amp;lt;/span&amp;gt;. This fence device has four attributes; &lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;agent&amp;lt;/span&amp;gt;; This tells the cluster to call the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent script, as we discussed earlier.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipaddr&amp;lt;/span&amp;gt;; This tells the fence agent where on the network to find this particular IPMI BMC. This is how multiple fence devices of the same type can be used in the cluster.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt;; This is the login user name to use when authenticating against the fence device.&lt;br /&gt;
** &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passwd&amp;lt;/span&amp;gt;; This is the password to supply along with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;login&amp;lt;/span&amp;gt; name when authenticating against the fence device.&lt;br /&gt;
* Should the IPMI fence call fail for some reason, the cluster will move on to the second &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pdu&amp;lt;/span&amp;gt; method, repeating the steps above but using the PDU values.&lt;br /&gt;
&lt;br /&gt;
When the cluster calls the fence agent, it does so by initially calling the fence agent script with no arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_ipmilan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-c05n02.ipmi&lt;br /&gt;
login=admin&lt;br /&gt;
passwd=secret&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see then, the first three arguments are from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencedevice&amp;lt;/span&amp;gt; attributes and the last one is from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence&amp;lt;/span&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
If this method fails, then the PDU will be called in a very similar way, but with an extra argument from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; attributes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/sbin/fence_apc_snmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it will pass to that agent the following arguments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipaddr=an-p02.alteeve.ca&lt;br /&gt;
port=2&lt;br /&gt;
action=reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should this fail, the cluster will go back and try the IPMI interface again. It will loop through the fence device methods forever until one of the methods succeeds.&lt;br /&gt;
Below are snippets from other clusters using different fence device configurations which might help you build your cluster.&lt;br /&gt;
&lt;br /&gt;
=== Giving Nodes More Time to Start and Avoiding &amp;quot;Fence Loops&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section also explains why we don&#039;t allow &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to start on boot. If we did, we&#039;d risk a &amp;quot;fence loop&amp;quot;, where a fenced node boots, tries to contact its peer, times out and fences it. The peer boot, starts &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, times out waiting and fenced the other peer. Not good.}}&lt;br /&gt;
&lt;br /&gt;
Clusters with more than three nodes will have to gain quorum before they can fence other nodes. As we discussed earlier though, this is not the case when using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#two_node|two_node]]=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#cman.3B_The_Cluster_Manager|cman]]&amp;lt;/span&amp;gt; element. What this means in practice is that if you start the cluster on one node and then wait too long to start the cluster on the second node, the first will fence the second.&lt;br /&gt;
&lt;br /&gt;
The logic behind this is; When the cluster starts, it will try to talk to its fellow node and then fail. With the special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;two_node=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute set, the cluster knows that it is allowed to start clustered services, but it has no way to say for sure what state the other node is in. It could well be online and hosting services for all it knows. So it has to proceed on the assumption that the other node is alive and using shared resources. Given that, and given that it can not talk to the other node, its only safe option is to fence the other node. Only then can it be confident that it is safe to start providing clustered services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The new tag is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#fence_daemon.3B_Fencing|fence_daemon]]&amp;lt;/span&amp;gt;, seen near the bottom if the file above. The change is made using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#post_join_delay|post_join_delay]]=&amp;quot;30&amp;quot;&amp;lt;/span&amp;gt; attribute. By default, the cluster will declare the other node dead after just &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; seconds. The reason is that the larger this value, the slower the start-up of the cluster services will be. During testing and development though, I find this value to be far too short and frequently led to unnecessary fencing. Once your cluster is setup and working, it&#039;s not a bad idea to reduce this value to the lowest value with which you are comfortable.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Totem ===&lt;br /&gt;
&lt;br /&gt;
There are many attributes for the [[totem]] element. For now though, we&#039;re only going to set two of them. We know that cluster communication will be travelling over our private, secured [[BCN]] network, so for the sake of simplicity, we&#039;re going to disable encryption. We are also offering network redundancy using the bonding drivers, so we&#039;re also going to disable totem&#039;s [[redundant ring protocol]].&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Corosync uses a concept called &amp;quot;token rings&amp;quot; for cluster communication. This is not to be confused with the old token ring network protocol, but the basic concept is the same. A token is passed from node to node, around and around the ring. A node can&#039;t send new messages or acknowledge old messages except when it has the token. By default, corosync uses a single &amp;quot;ring&amp;quot;. This means that, without network-level fault-tolerance, this ring becomes a single point of failure.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve got bonded network connections backing our cluster communications, so we inherently have fault-tolerance built in to our network.&lt;br /&gt;
&lt;br /&gt;
For some though, bonded interfaces is not feasible, so starting in RHEL 6.3, &amp;quot;[[RRP|Redundant Ring Protocol]]&amp;quot; was made available as a supported option. This allows you to setup a second network to use as a backup in case the primary ring fails. We don&#039;t need this, so we set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rrp_mode=&amp;quot;none&amp;quot;&amp;lt;/span&amp;gt;. If you want to use it, you can now though, but it&#039;s outside the scope of this tutorial. &lt;br /&gt;
&lt;br /&gt;
If you wish to explore it further, please take a look at the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusternode&amp;lt;/span&amp;gt; element tag called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;[[RHCS_v3_cluster.conf#Tag.3B_altname|altname]]...&amp;gt;&amp;lt;/span&amp;gt;. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;altname&amp;lt;/span&amp;gt; is used though, then the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#rrp_mode|rrp_mode]]&amp;lt;/span&amp;gt; attribute will need to be changed to either &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;active&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;passive&amp;lt;/span&amp;gt; (the details of which are outside the scope of this tutorial).&lt;br /&gt;
&lt;br /&gt;
The second option we&#039;re looking at here is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[RHCS_v3_cluster.conf#secauth|secauth]]=&amp;quot;off&amp;quot;&amp;lt;/span&amp;gt; attribute. This controls whether the cluster communications are encrypted or not. We can safely disable this because we&#039;re working on a known-private network, which yields two benefits; It&#039;s simpler to setup and it&#039;s a lot faster. If you must encrypt the cluster communications, then you can do so here. The details of which are also outside the scope of this tutorial though.&lt;br /&gt;
&lt;br /&gt;
=== Validating and Pushing the /etc/cluster/cluster.conf File ===&lt;br /&gt;
&lt;br /&gt;
One of the most noticeable changes in [[RHCS]] cluster stable 3 is that we no longer have to make a long, cryptic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xmllint&amp;lt;/span&amp;gt; call to validate our cluster configuration. Now we can simply call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ccs_config_validate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If there was a problem, you need to go back and fix it. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; proceed until your configuration validates. Once it does, we&#039;re ready to move on!&lt;br /&gt;
&lt;br /&gt;
With it validated, we need to push it to the other node. As the cluster is not running yet, we will push it out using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/cluster/cluster.conf root@an-c05n02:/etc/cluster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
cluster.conf&lt;br /&gt;
&lt;br /&gt;
sent 1393 bytes  received 43 bytes  2872.00 bytes/sec&lt;br /&gt;
total size is 1313  speedup is 0.91&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the first and only time that we&#039;ll need to push the configuration file over manually.&lt;br /&gt;
&lt;br /&gt;
=== Setting up ricci ===&lt;br /&gt;
&lt;br /&gt;
Once the cluster is running, we can take advantage of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;modclusterd&amp;lt;/span&amp;gt; daemons to push all future updates out automatically. This is why we enabled these two daemons to start on boot earlier on.&lt;br /&gt;
&lt;br /&gt;
This requires setting a password for each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user first. Setting the password is exactly the same as setting the password on any other system user.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
passwd ricci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changing password for user ricci.&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Later, when we make the next change to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, we&#039;ll push the changes out using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; program. The first time this is used on each node, you will need to enter the local and the peer&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password. Once entered though, we&#039;ll not need to enter the password again.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The [[AN!CDB|dashboard]] we will install later expects the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; password to be the same on both nodes. If you plan to use the dashboard, be sure to set the same password and then make note of it for later!}}&lt;br /&gt;
&lt;br /&gt;
=== Starting the Cluster for the First Time ===&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to open a second terminal on either node and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; [[syslog]] file. All cluster messages will be recorded here and it will help to debug problems if you can watch the logs. To do this, in the new terminal windows run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will clear the screen and start watching for new lines to be written to syslog. When you are done watching syslog, press the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; key combination.&lt;br /&gt;
&lt;br /&gt;
How you lay out your terminal windows is, obviously, up to your own preferences. Below is a configuration I have found very useful.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node-rhcs3_terminal-window-layout_01.png|thumb|center|700px|Terminal window layout for watching 2 nodes. Left windows are used for entering commands and the left windows are used for tailing syslog.]]&lt;br /&gt;
&lt;br /&gt;
With the terminals setup, lets start the cluster!&lt;br /&gt;
&lt;br /&gt;
{{warning|1=If you don&#039;t start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; on both nodes within 30 seconds, the slower node will be fenced.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here is what you should see in syslog (this taken from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 kernel: DLM (built Sep 14 2013 05:33:35) installed&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync Cluster Engine (&#039;1.4.1&#039;): started and ready to provide service.&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Corosync built-in features: nss dbus rdma snmp&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully read config from /etc/cluster/cluster.conf&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [MAIN  ] Successfully parsed cman config&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transport (UDP/IP Multicast).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).&lt;br /&gt;
Oct 30 10:46:07 an-c05n01 corosync[2845]:   [TOTEM ] The network interface [10.20.50.1] is now up.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] CMAN 3.0.12.1 (built Aug 29 2013 07:27:01) started&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync CMAN membership service 2.90&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: openais checkpoint service B.01.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync extended virtual synchrony service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync configuration service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster closed process group service v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster config database access v1.01&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync profile loading service&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Using quorum provider quorum_cman&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [SERV  ] Service engine loaded: corosync cluster quorum service v0.1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Compatibility mode set to whitetank.  Using V1 and V2 of the synchronization engine.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CMAN  ] quorum regained, resuming activity&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] This node is within the primary component and will provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:0 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:1 left:0)&lt;br /&gt;
Oct 30 10:46:08 an-c05n01 corosync[2845]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 fenced[2902]: fenced 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:12 an-c05n01 dlm_controld[2927]: dlm_controld 3.0.12.1 started&lt;br /&gt;
Oct 30 10:46:13 an-c05n01 gfs_controld[2977]: gfs_controld 3.0.12.1 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to confirm that the cluster is operating properly, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Version: 6.2.0&lt;br /&gt;
Config Version: 7&lt;br /&gt;
Cluster Name: an-cluster-05&lt;br /&gt;
Cluster Id: 42881&lt;br /&gt;
Cluster Member: Yes&lt;br /&gt;
Cluster Generation: 20&lt;br /&gt;
Membership state: Cluster-Member&lt;br /&gt;
Nodes: 2&lt;br /&gt;
Expected votes: 1&lt;br /&gt;
Total votes: 2&lt;br /&gt;
Node votes: 1&lt;br /&gt;
Quorum: 1  &lt;br /&gt;
Active subsystems: 7&lt;br /&gt;
Flags: 2node &lt;br /&gt;
Ports Bound: 0  &lt;br /&gt;
Node name: an-c05n01.alteeve.ca&lt;br /&gt;
Node ID: 1&lt;br /&gt;
Multicast addresses: 239.192.167.41 &lt;br /&gt;
Node addresses: 10.20.50.1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the both nodes are talking because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you have a managed switch that needs persistent multicast groups set, log into your switches now. We can see above that this cluster is using the multicast group &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;239.192.167.41&amp;lt;/span&amp;gt;, so find it in your switch config and ensure it&#039;s persistent.}}&lt;br /&gt;
&lt;br /&gt;
If you ever want to see the nitty-gritty configuration, you can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync-objctl&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
corosync-objctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cluster.name=an-cluster-05&lt;br /&gt;
cluster.config_version=7&lt;br /&gt;
cluster.cman.expected_votes=1&lt;br /&gt;
cluster.cman.two_node=1&lt;br /&gt;
cluster.cman.nodename=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.cman.cluster_id=42881&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n01.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n01&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.delay=15&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.name=an-c05n02.alteeve.ca&lt;br /&gt;
cluster.clusternodes.clusternode.nodeid=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=ipmi&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=ipmi_n02&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.name=pdu&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu1&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.name=pdu2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.port=2&lt;br /&gt;
cluster.clusternodes.clusternode.fence.method.device.action=reboot&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n01&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n01.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.name=ipmi_n02&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_ipmilan&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-c05n02.ipmi&lt;br /&gt;
cluster.fencedevices.fencedevice.login=admin&lt;br /&gt;
cluster.fencedevices.fencedevice.passwd=secret&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p01.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu1&lt;br /&gt;
cluster.fencedevices.fencedevice.agent=fence_apc_snmp&lt;br /&gt;
cluster.fencedevices.fencedevice.ipaddr=an-p02.alteeve.ca&lt;br /&gt;
cluster.fencedevices.fencedevice.name=pdu2&lt;br /&gt;
cluster.fence_daemon.post_join_delay=30&lt;br /&gt;
cluster.totem.rrp_mode=none&lt;br /&gt;
cluster.totem.secauth=off&lt;br /&gt;
totem.rrp_mode=none&lt;br /&gt;
totem.secauth=off&lt;br /&gt;
totem.transport=udp&lt;br /&gt;
totem.version=2&lt;br /&gt;
totem.nodeid=1&lt;br /&gt;
totem.vsftype=none&lt;br /&gt;
totem.token=10000&lt;br /&gt;
totem.join=60&lt;br /&gt;
totem.fail_recv_const=2500&lt;br /&gt;
totem.consensus=2000&lt;br /&gt;
totem.key=an-cluster-05&lt;br /&gt;
totem.interface.ringnumber=0&lt;br /&gt;
totem.interface.bindnetaddr=10.20.50.1&lt;br /&gt;
totem.interface.mcastaddr=239.192.167.41&lt;br /&gt;
totem.interface.mcastport=5405&lt;br /&gt;
libccs.next_handle=7&lt;br /&gt;
libccs.connection.ccs_handle=3&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=4&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
libccs.connection.ccs_handle=5&lt;br /&gt;
libccs.connection.config_version=7&lt;br /&gt;
libccs.connection.fullxpath=0&lt;br /&gt;
logging.timestamp=on&lt;br /&gt;
logging.to_logfile=yes&lt;br /&gt;
logging.logfile=/var/log/cluster/corosync.log&lt;br /&gt;
logging.logfile_priority=info&lt;br /&gt;
logging.to_syslog=yes&lt;br /&gt;
logging.syslog_facility=local4&lt;br /&gt;
logging.syslog_priority=info&lt;br /&gt;
aisexec.user=ais&lt;br /&gt;
aisexec.group=ais&lt;br /&gt;
service.name=corosync_quorum&lt;br /&gt;
service.ver=0&lt;br /&gt;
service.name=corosync_cman&lt;br /&gt;
service.ver=0&lt;br /&gt;
quorum.provider=quorum_cman&lt;br /&gt;
service.name=openais_ckpt&lt;br /&gt;
service.ver=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.services.cman.service_id=9&lt;br /&gt;
runtime.services.ckpt.service_id=3&lt;br /&gt;
runtime.services.ckpt.0.tx=0&lt;br /&gt;
runtime.services.ckpt.0.rx=0&lt;br /&gt;
runtime.services.ckpt.1.tx=0&lt;br /&gt;
runtime.services.ckpt.1.rx=0&lt;br /&gt;
runtime.services.ckpt.2.tx=0&lt;br /&gt;
runtime.services.ckpt.2.rx=0&lt;br /&gt;
runtime.services.ckpt.3.tx=0&lt;br /&gt;
runtime.services.ckpt.3.rx=0&lt;br /&gt;
runtime.services.ckpt.4.tx=0&lt;br /&gt;
runtime.services.ckpt.4.rx=0&lt;br /&gt;
runtime.services.ckpt.5.tx=0&lt;br /&gt;
runtime.services.ckpt.5.rx=0&lt;br /&gt;
runtime.services.ckpt.6.tx=0&lt;br /&gt;
runtime.services.ckpt.6.rx=0&lt;br /&gt;
runtime.services.ckpt.7.tx=0&lt;br /&gt;
runtime.services.ckpt.7.rx=0&lt;br /&gt;
runtime.services.ckpt.8.tx=0&lt;br /&gt;
runtime.services.ckpt.8.rx=0&lt;br /&gt;
runtime.services.ckpt.9.tx=0&lt;br /&gt;
runtime.services.ckpt.9.rx=0&lt;br /&gt;
runtime.services.ckpt.10.tx=0&lt;br /&gt;
runtime.services.ckpt.10.rx=0&lt;br /&gt;
runtime.services.ckpt.11.tx=2&lt;br /&gt;
runtime.services.ckpt.11.rx=3&lt;br /&gt;
runtime.services.ckpt.12.tx=0&lt;br /&gt;
runtime.services.ckpt.12.rx=0&lt;br /&gt;
runtime.services.ckpt.13.tx=0&lt;br /&gt;
runtime.services.ckpt.13.rx=0&lt;br /&gt;
runtime.services.evs.service_id=0&lt;br /&gt;
runtime.services.evs.0.tx=0&lt;br /&gt;
runtime.services.evs.0.rx=0&lt;br /&gt;
runtime.services.cfg.service_id=7&lt;br /&gt;
runtime.services.cfg.0.tx=0&lt;br /&gt;
runtime.services.cfg.0.rx=0&lt;br /&gt;
runtime.services.cfg.1.tx=0&lt;br /&gt;
runtime.services.cfg.1.rx=0&lt;br /&gt;
runtime.services.cfg.2.tx=0&lt;br /&gt;
runtime.services.cfg.2.rx=0&lt;br /&gt;
runtime.services.cfg.3.tx=0&lt;br /&gt;
runtime.services.cfg.3.rx=0&lt;br /&gt;
runtime.services.cpg.service_id=8&lt;br /&gt;
runtime.services.cpg.0.tx=4&lt;br /&gt;
runtime.services.cpg.0.rx=8&lt;br /&gt;
runtime.services.cpg.1.tx=0&lt;br /&gt;
runtime.services.cpg.1.rx=0&lt;br /&gt;
runtime.services.cpg.2.tx=0&lt;br /&gt;
runtime.services.cpg.2.rx=0&lt;br /&gt;
runtime.services.cpg.3.tx=16&lt;br /&gt;
runtime.services.cpg.3.rx=23&lt;br /&gt;
runtime.services.cpg.4.tx=0&lt;br /&gt;
runtime.services.cpg.4.rx=0&lt;br /&gt;
runtime.services.cpg.5.tx=2&lt;br /&gt;
runtime.services.cpg.5.rx=3&lt;br /&gt;
runtime.services.confdb.service_id=11&lt;br /&gt;
runtime.services.pload.service_id=13&lt;br /&gt;
runtime.services.pload.0.tx=0&lt;br /&gt;
runtime.services.pload.0.rx=0&lt;br /&gt;
runtime.services.pload.1.tx=0&lt;br /&gt;
runtime.services.pload.1.rx=0&lt;br /&gt;
runtime.services.quorum.service_id=12&lt;br /&gt;
runtime.connections.active=6&lt;br /&gt;
runtime.connections.closed=111&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.dispatched=9&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:21.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.service_id=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.responses=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.dispatched=8&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.requests=5&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CPG:2927:24.overload=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.service_id=3&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.client_pid=2927&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.responses=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.dispatched=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.requests=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.sem_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.send_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.recv_retry_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.flow_control_count=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.queue_size=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.invalid_request=0&lt;br /&gt;
runtime.connections.dlm_controld:CKPT:2927:25.overload=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.service_id=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.client_pid=2977&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.responses=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.dispatched=8&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.requests=5&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.sem_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.send_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.recv_retry_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.flow_control_count=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.queue_size=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.invalid_request=0&lt;br /&gt;
runtime.connections.gfs_controld:CPG:2977:28.overload=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.service_id=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.client_pid=2902&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.responses=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.dispatched=8&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.requests=5&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.sem_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.send_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.recv_retry_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.flow_control_count=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.queue_size=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.invalid_request=0&lt;br /&gt;
runtime.connections.fenced:CPG:2902:29.overload=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.service_id=11&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.client_pid=3083&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.responses=463&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.dispatched=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.requests=466&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.sem_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.send_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.recv_retry_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.flow_control_count=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.queue_size=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.invalid_request=0&lt;br /&gt;
runtime.connections.corosync-objctl:CONFDB:3083:30.overload=0&lt;br /&gt;
runtime.totem.pg.msg_reserved=1&lt;br /&gt;
runtime.totem.pg.msg_queue_avail=761&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_tx=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.orf_token_rx=437&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_tx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_merge_detect_rx=47&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_tx=3&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_join_rx=5&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_tx=46&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_retx=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mcast_rx=57&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.memb_commit_token_rx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_tx=4&lt;br /&gt;
runtime.totem.pg.mrp.srp.token_hold_cancel_rx=8&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.operational_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.gather_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.commit_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_entered=2&lt;br /&gt;
runtime.totem.pg.mrp.srp.recovery_token_lost=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.consensus_timeouts=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.mtt_rx_token=835&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_token_workload=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.avg_backlog_calc=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.rx_msg_dropped=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_gather=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.continuous_sendmsg_failures=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.firewall_enabled_or_nic_failure=0&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.ip=r(0) ip(10.20.50.1) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.1.status=joined&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.ip=r(0) ip(10.20.50.2) &lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.join_count=1&lt;br /&gt;
runtime.totem.pg.mrp.srp.members.2.status=joined&lt;br /&gt;
runtime.blackbox.dump_flight_data=no&lt;br /&gt;
runtime.blackbox.dump_state=no&lt;br /&gt;
cman_private.COROSYNC_DEFAULT_CONFIG_IFACE=xmlconfig:cmanpreconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want to check what [[DLM]] lockspaces, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; to list lock spaces. Given that we&#039;re not running and resources or clustered filesystems though, there won&#039;t be any at this time. We&#039;ll look at this again later.&lt;br /&gt;
&lt;br /&gt;
== Testing Fencing ==&lt;br /&gt;
&lt;br /&gt;
We need to thoroughly test our fence configuration and devices before we proceed. Should the cluster call a fence, and if the fence call fails, the cluster will hang until the fence finally succeeds. This effectively hangs the cluster, by design. The rationale is that, as bad as a hung cluster might be, it&#039;s better than risking data corruption. &lt;br /&gt;
&lt;br /&gt;
So if we have problems, we need to find them now.&lt;br /&gt;
&lt;br /&gt;
We need to run two tests from each node against the other node for a total of four tests.&lt;br /&gt;
&lt;br /&gt;
# The first test will verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; is working. To do this, we will hang the victim node by sending &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to the kernel&#039;s &amp;quot;[https://en.wikipedia.org/wiki/Magic_SysRq_key magic SysRq]&amp;quot; key. We do this by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt; which immediately and completely hangs the kernel. This does not effect the IPMI BMC, so if we&#039;ve configured everything properly, the surviving node should be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; to reboot the crashed node.&lt;br /&gt;
# Secondly, we will pull the power on the target node. This removes all power from the node, causing the IPMI BMC to also fail. You should see the other node try to fence the target using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;, see it fail and then try again using the second method, the switched PDUs via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt;. If you watch and listen to the PDUs, you should see the power indicator LED light up and hear the mechanical relays close the circuit when the fence completes.&lt;br /&gt;
&lt;br /&gt;
For the second test, you could just physically unplug the cables from the PDUs. We&#039;re going to cheat though and use the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence handler to manually turn off the target ports. This will help show that the fence agents are really just shell scripts. Used on their own, they do not talk to the cluster in any way. So despite using them to cut the power, the cluster will not know what state the lost node is in, requiring a fence call still.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Test&lt;br /&gt;
!Victim&lt;br /&gt;
!Pass?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;echo c &amp;gt; /proc/sysrq-trigger&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Yes&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;No&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=After the target node powers back up after each test, be sure to restart &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
=== Using Fence_check to Verify our Fencing Config ===&lt;br /&gt;
&lt;br /&gt;
In RHEL 6.4, a new tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; was added to the cluster toolbox. When &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, we can call it and it will gather up the data from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; and then call each defined fence device with the action &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;&amp;quot;. If everything is configured properly, all fence devices should exit with a return code of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt;) or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; (device/port is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
If any fence device&#039;s agent exits with any other code, something has gone wrong and we need to fix it before proceeding.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to run this tool from both node. So let&#039;s start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:56:07 EDT 2013 pid: 3236&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is very promising! Now lets run it again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We want to do this because, for example, if the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/hosts&amp;lt;/span&amp;gt; file on the second node was bad, a fence may work on the first node but not this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 10:57:27 EDT 2013 pid: 28127&lt;br /&gt;
Unable to perform fence_check: node is not fence master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Well then, that&#039;s not what we expected.&lt;br /&gt;
&lt;br /&gt;
Actually, it is. When a cluster starts, one of the nodes in the cluster will be chosen to be the node which performs actual fence calls. This node (the one with the lowest node ID) is the only one that, by default, can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man&amp;lt;/span&amp;gt; page, we see that we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-f&amp;lt;/span&amp;gt; switch to override this behaviour, but there is an important note:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man fence_check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       -f     Override checks and force execution. DO NOT USE ON PRODUCTION CLUSTERS!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason for this is that, while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; is running, should a node fail, it will not be able to fence until the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_check&amp;lt;/span&amp;gt; finishes. In production, this can cause recovery post-failure to take a bit longer than it otherwise would.&lt;br /&gt;
&lt;br /&gt;
Good thing we&#039;re testing now, before the cluster is in production!&lt;br /&gt;
&lt;br /&gt;
So lets try again, this time forcing the issue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_check -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
fence_check run at Wed Oct 30 11:02:35 EDT 2013 pid: 28222&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n01.alteeve.ca method 2: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 1: success&lt;br /&gt;
Testing an-c05n02.alteeve.ca method 2: success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 for the First Time ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This step will totally crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;! If fencing fails for some reason, you may need physical access to the node to recover it.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 11:05:46 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 11:05:48 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 11:06:21 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! The IPMI-based fencing worked! &lt;br /&gt;
&lt;br /&gt;
But why did it take 33 seconds?&lt;br /&gt;
&lt;br /&gt;
The current &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; version works this way for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;reboot&amp;lt;/span&amp;gt; actions;&lt;br /&gt;
&lt;br /&gt;
# Check status&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks status again until the status shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;off&amp;lt;/span&amp;gt;&lt;br /&gt;
# Call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool ... chassis power on&amp;lt;/span&amp;gt;&lt;br /&gt;
# Checks the status again&lt;br /&gt;
&lt;br /&gt;
If you tried doing these steps directly, you would find that it takes roughly 18 seconds to run. Add this to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; we set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; when using the IPMI fence device and you have the 33 seconds we see here.&lt;br /&gt;
&lt;br /&gt;
If you are watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s display, you should now see it starting to boot back up.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
As was discussed earlier, IPMI and other out-of-band management interfaces have a fatal flaw as a fence device. Their [[BMC]] draws its power from the same power supply as the node itself. Thus, when the power supply itself fails (for example, if an internal wire shorted against the chassis), fencing via IPMI will fail as well. This makes the power supply a single point of failure, which is what the PDU protects us against.&lt;br /&gt;
&lt;br /&gt;
In case you&#039;re wondering how likely failing a redundant PSU is...&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[image:lisa_seely-cable_fail-2.jpeg|thumb|300px|Cable short 1]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-3.jpeg|thumb|300px|Cable short 2]]&lt;br /&gt;
|[[image:lisa_seely-cable_fail-4.jpeg|thumb|300px|Cable short 3]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|Thanks to my very talented fellow admin, [https://twitter.com/thedoh Lisa Seelye], for this object lesson.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So to simulate a failed power supply, we&#039;re going to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to turn off the power to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Given that the node has two power supplies, one plugged in to each PDU, we&#039;ll need to make two calls to cut the power. &lt;br /&gt;
&lt;br /&gt;
Alternatively, you could also just unplug the power cables from the PDUs and the fence would still succeed. Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; confirms that the requested ports have no power, the fence action succeeds. Whether the nodes restart after the fence is not at all a factor.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the following two chained calls;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 1 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 1 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
Back on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:31:49 an-c05n02 corosync[27783]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 corosync[27783]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Oct 30 13:31:51 an-c05n02 fenced[27840]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:32:26 an-c05n02 fenced[27840]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hoozah!&lt;br /&gt;
&lt;br /&gt;
Notice that there is an error from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;? This is exactly what we expected because of the IPMI&#039;s BMC lost power and couldn&#039;t respond. You will also notice the large delay, despite there not being a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay=&amp;quot;15&amp;quot;&amp;lt;/span&amp;gt; set for the PDU fence devices for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This was from the initial delay when trying to fence using IPMI. This is why we don&#039;t need to specify &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; on the PDUs as well. &lt;br /&gt;
&lt;br /&gt;
So now we know that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; can be fenced successfully from both fence devices. Now we need to run the same tests against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
=== Hanging an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=&#039;&#039;&#039;DO NOT ASSUME THAT &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; WILL FENCE PROPERLY JUST BECAUSE &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; PASSED!&#039;&#039;&#039;. There are many ways that a fence could fail; Bad password, misconfigured device, plugged into the wrong port on the PDU and so on. Always test all nodes using all methods!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Be sure to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;ing the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Go to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s first terminal and run the following command. &lt;br /&gt;
&lt;br /&gt;
{{note|1=This command will not return and you will lose all ability to talk to this node until it is rebooted.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;&#039;&#039; run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;&#039;s syslog terminal, you should see the following entries in the log.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:40:29 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:40:31 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:40:48 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect!&lt;br /&gt;
&lt;br /&gt;
Notice this time that the fence action took 17 seconds, much less that it took to fence &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c01n01&amp;lt;/span&amp;gt;. This is because, as you probably guessed, there is no &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;delay&amp;lt;/span&amp;gt; set against &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; went to fence it, it proceeded immediately. This tells us that if both nodes try to fence each other at the same time, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should be left the winner.&lt;br /&gt;
&lt;br /&gt;
=== Cutting the Power to an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; once the node boots back up before running this test.}}&lt;br /&gt;
&lt;br /&gt;
Last fence test! Time to yank the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and make sure its power fencing works.&lt;br /&gt;
&lt;br /&gt;
From &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, pull the power on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; with the following call;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01.alteeve.ca -n 2 -o off &amp;amp;&amp;amp; fence_apc_snmp -a an-p02.alteeve.ca -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Verify directly that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; lost power! If the power cables are in the wrong port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will still be powered on, despite the success message!}}&lt;br /&gt;
&lt;br /&gt;
On &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s syslog, we should see the following entries;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 13:44:41 an-c05n01 corosync[2800]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 corosync[2800]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Oct 30 13:44:43 an-c05n01 fenced[2857]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Oct 30 13:44:47 an-c05n01 ntpd[2298]: synchronized to 66.96.30.35, stratum 2&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Oct 30 13:45:03 an-c05n01 fenced[2857]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Woot!&lt;br /&gt;
&lt;br /&gt;
Only now can we safely say that our fencing is setup and working properly.&lt;br /&gt;
&lt;br /&gt;
= Installing DRBD =&lt;br /&gt;
&lt;br /&gt;
DRBD is an open-source application for real-time, block-level disk replication created and maintained by [http://linbit.com Linbit]. We will use this to keep the data on our cluster consistent between the two nodes.&lt;br /&gt;
&lt;br /&gt;
To install it, we have three choices;&lt;br /&gt;
# Purchase a Red Hat blessed, fully supported copy from [http://linbit.com Linbit].&lt;br /&gt;
# Install from the freely available, community maintained [http://elrepo.org/tiki/tiki-index.php ELRepo] repository.&lt;br /&gt;
# Install from source files.&lt;br /&gt;
&lt;br /&gt;
We will be using the 8.3.x version of DRBD. This tracts the Red Hat and Linbit supported versions, providing the most tested combination and providing a painless path to move to a fully supported version, should you decide to do so down the road.&lt;br /&gt;
&lt;br /&gt;
== Option 1 - Fully Supported by Red Hat and Linbit ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This shows how to install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Please do this again for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Red Hat decided to no longer directly support [[DRBD]] in [[EL6]] to narrow down what applications they shipped and focus on improving those components. Given the popularity of DRBD, however, Red Hat struck a deal with [[Linbit]], the authors and maintainers of DRBD. You have the option of purchasing a fully supported version of DRBD that is blessed by Red Hat for use under Red Hat Enterprise Linux 6.&lt;br /&gt;
&lt;br /&gt;
If you are building a fully supported cluster, please [http://www.linbit.com/en/products-services/drbd/drbd-for-high-availability/ contact Linbit] to purchase DRBD. Once done, you will get an email with you login information and, most importantly here, the [[URL]] hash needed to access the official repositories.&lt;br /&gt;
&lt;br /&gt;
First you will need to add an entry in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/yum.repo.d/&amp;lt;/span&amp;gt; for DRBD, but this needs to be hand-crafted as you must specify the URL hash given to you in the email as part of the repo configuration.&lt;br /&gt;
&lt;br /&gt;
* Log into the [https://my.linbit.com Linbit portal].&lt;br /&gt;
* Click on &#039;&#039;Account&#039;&#039;.&lt;br /&gt;
* Under &#039;&#039;Your account details&#039;&#039;, click on the hash string to the right of &#039;&#039;URL hash:&#039;&#039;.&lt;br /&gt;
* Click on &#039;&#039;RHEL 6&#039;&#039; (even if you are using CentOS or another [[EL6]] distro.&lt;br /&gt;
&lt;br /&gt;
This will take you to a new page called &#039;&#039;Instructions for using the DRBD package repository&#039;&#039;. The details installation instruction are found here.&lt;br /&gt;
&lt;br /&gt;
Lets use the imaginative URL hash of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;abcdefghijklmnopqrstuvwxyz0123456789ABCD&amp;lt;/span&amp;gt; and we&#039;re are in fact using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;x86_64&amp;lt;/span&amp;gt; architecture. Given this, we would create the following repository configuration file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/yum.repos.d/linbit.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[drbd-8]&lt;br /&gt;
name=DRBD 8&lt;br /&gt;
baseurl=http://packages.linbit.com/abcdefghijklmnopqrstuvwxyz0123456789ABCD/rhel6/x86_64&lt;br /&gt;
gpgcheck=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once this is saved, you can install DRBD using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yum&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd kmod-drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 2 - Install From ELRepo ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This is the method used for this tutorial.}}&lt;br /&gt;
&lt;br /&gt;
[http://elrepo.org ELRepo] is a community-maintained repository of packages for &#039;&#039;&#039;E&#039;&#039;&#039;nterprise &#039;&#039;&#039;L&#039;&#039;&#039;inux; Red Hat Enterprise Linux and its derivatives like CentOS. This is the easiest option for a freely available DRBD package.&lt;br /&gt;
&lt;br /&gt;
The main concern with this option is that you are seceding control of DRBD to a community-controlled project. This is a trusted repo, but there are still undeniable security concerns. &lt;br /&gt;
&lt;br /&gt;
Check for the latest installation RPM and information:&lt;br /&gt;
&lt;br /&gt;
* [http://elrepo.org ELRepo Installation Page]&lt;br /&gt;
&lt;br /&gt;
Install the ELRepo GPG key, add the repo and install DRBD.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org&lt;br /&gt;
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Retrieving http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm&lt;br /&gt;
Preparing...                ########################################### [100%]&lt;br /&gt;
   1:elrepo-release         ########################################### [100%]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can install the DRBD 8.3 RPMs. &lt;br /&gt;
&lt;br /&gt;
Be warned; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kmod-drbd83&amp;lt;/span&amp;gt; can take some time to install. Please be patient!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install drbd83-utils kmod-drbd83&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Loaded plugins: product-id, rhnplugin, subscription-manager&lt;br /&gt;
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.&lt;br /&gt;
This system is receiving updates from RHN Classic or RHN Satellite.&lt;br /&gt;
elrepo                                                                            | 2.9 kB     00:00     &lt;br /&gt;
elrepo/primary_db                                                                 | 692 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6                                                              | 1.8 kB     00:00     &lt;br /&gt;
rhel-x86_64-server-6/primary                                                      |  15 MB     00:14     &lt;br /&gt;
rhel-x86_64-server-6                                                                         11066/11066&lt;br /&gt;
rhel-x86_64-server-rs-6                                                           | 1.8 kB     00:00     &lt;br /&gt;
Setting up Install Process&lt;br /&gt;
Resolving Dependencies&lt;br /&gt;
--&amp;gt; Running transaction check&lt;br /&gt;
---&amp;gt; Package drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
---&amp;gt; Package kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo will be installed&lt;br /&gt;
--&amp;gt; Finished Dependency Resolution&lt;br /&gt;
&lt;br /&gt;
Dependencies Resolved&lt;br /&gt;
&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
 Package                  Arch               Version                            Repository          Size&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Installing:&lt;br /&gt;
 drbd83-utils             x86_64             8.3.16-1.el6.elrepo                elrepo             219 k&lt;br /&gt;
 kmod-drbd83              x86_64             8.3.16-1.el6.elrepo                elrepo             177 k&lt;br /&gt;
&lt;br /&gt;
Transaction Summary&lt;br /&gt;
=========================================================================================================&lt;br /&gt;
Install       2 Package(s)&lt;br /&gt;
&lt;br /&gt;
Total download size: 397 k&lt;br /&gt;
Installed size: 1.2 M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Packages:&lt;br /&gt;
(1/2): drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm                                | 219 kB     00:01     &lt;br /&gt;
(2/2): kmod-drbd83-8.3.16-1.el6.elrepo.x86_64.rpm                                 | 177 kB     00:00     &lt;br /&gt;
---------------------------------------------------------------------------------------------------------&lt;br /&gt;
Total                                                                    157 kB/s | 397 kB     00:02     &lt;br /&gt;
Running rpm_check_debug&lt;br /&gt;
Running Transaction Test&lt;br /&gt;
Transaction Test Succeeded&lt;br /&gt;
Running Transaction&lt;br /&gt;
Warning: RPMDB altered outside of yum.&lt;br /&gt;
  Installing : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Installing : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
Working. This may take some time ...&lt;br /&gt;
Done.&lt;br /&gt;
  Verifying  : drbd83-utils-8.3.16-1.el6.elrepo.x86_64                                               1/2 &lt;br /&gt;
  Verifying  : kmod-drbd83-8.3.16-1.el6.elrepo.x86_64                                                2/2 &lt;br /&gt;
&lt;br /&gt;
Installed:&lt;br /&gt;
  drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo           kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo          &lt;br /&gt;
&lt;br /&gt;
Complete!&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Make sure DRBD doesn&#039;t start on boot, as we&#039;ll have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; handle it.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Option 3 - Install From Source ==&lt;br /&gt;
&lt;br /&gt;
If you do not wish to pay for access to the official DRBD repository and do not feel comfortable adding a public repository, your last option is to install from Linbit&#039;s source code. The benefit of this is that you can vet the source before installing it, making it a more secure option. The downside is that you will need to manually install updates and security fixes as they are made available.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Both&#039;&#039;&#039; nodes run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install flex gcc make kernel-devel&lt;br /&gt;
wget -c http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz&lt;br /&gt;
tar -xvzf drbd-8.3.16.tar.gz&lt;br /&gt;
cd drbd-8.3.16&lt;br /&gt;
./configure \&lt;br /&gt;
   --prefix=/usr \&lt;br /&gt;
   --localstatedir=/var \&lt;br /&gt;
   --sysconfdir=/etc \&lt;br /&gt;
   --with-utils \&lt;br /&gt;
   --with-km \&lt;br /&gt;
   --with-udev \&lt;br /&gt;
   --with-pacemaker \&lt;br /&gt;
   --with-rgmanager \&lt;br /&gt;
   --with-bashcompletion&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
chkconfig --add drbd&lt;br /&gt;
chkconfig drbd off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;significant amount of output, it&#039;s really quite impressive&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hooking DRBD into the Cluster&#039;s Fencing ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=In older DRBD 8.3 releases, prior to 8.3.16, we needed to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt; from [https://raw.github.com/digimer/rhcs_fence/master/rhcs_fence github] as the shipped version had a bug. With the release of 8.3.16, this is no longer the case.}}&lt;br /&gt;
&lt;br /&gt;
DRBD is, effectively, a stand-alone application. You can use it on its own without any other software. For this reason, DRBD has its own fencing mechanism to avoid split-brains if the DRBD nodes lose contact with each other. &lt;br /&gt;
&lt;br /&gt;
It would be a replication of effort to setup actual fencing devices in DRBD, so instead we will use a &amp;quot;hook&amp;quot; script called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. When DRBD loses contact with its peer, it will block and then call this script. In turn, this script calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and asks it to fence the peer. It then waits for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; to respond with a success or failure.&lt;br /&gt;
&lt;br /&gt;
If the fence succeed, DRBD will resume normal operation, confident that the peer is not doing the same.&lt;br /&gt;
&lt;br /&gt;
If the fence fails, DRBD will continue to block and continue to try and fence the peer indefinitely. Thus, if a fence call fails, DRBD will remain blocked and all disk reads and writes will hang. This is by design as it is better to hang than to risk a split-brain, which can lead to data loss and corruption.&lt;br /&gt;
&lt;br /&gt;
By using this script, if the fence configuration ever changes, you only need to update the configuration in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, not also in DRBD as well.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;quot;Why&amp;quot; of our Layout - More Safety! ===&lt;br /&gt;
&lt;br /&gt;
We will be creating two separate DRBD resources. The reason for this is to minimize the chance of data loss in a [[split-brain]] event. We&#039;ve got to fairly great lengths to insure that a split-brain never occurs, but it is still possible. So we want a &amp;quot;last line of defence&amp;quot;, just in case.&lt;br /&gt;
&lt;br /&gt;
Consider this scenario:&lt;br /&gt;
&lt;br /&gt;
* You have a two-node cluster running two VMs. One is a mirror for a project and the other is an accounting application. Node 1 hosts the mirror, Node 2 hosts the accounting application.&lt;br /&gt;
* A partition occurs and both nodes try to fence the other.&lt;br /&gt;
* Network access is lost, so both nodes fall back to fencing using PDUs.&lt;br /&gt;
* Both nodes have redundant power supplies, and at some point in time, the power cables on the second PDU got reversed.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; agent succeeds, because the requested outlets were shut off. However, do to the cabling mistake, neither node actually shut down.&lt;br /&gt;
* Both nodes proceed to run independently, thinking they are the only node left.&lt;br /&gt;
* During this split-brain, the mirror VM downloads over a [[gigabyte]] of updates. Meanwhile, an hour earlier, the accountant updates the books, totalling less than one [[megabyte]] of changes.&lt;br /&gt;
&lt;br /&gt;
At this point, you will need to discard the changed on one of the nodes. So now you have to choose:&lt;br /&gt;
&lt;br /&gt;
* Is the node with the most changes more valid?&lt;br /&gt;
* Is the node with the most recent changes more valid?&lt;br /&gt;
&lt;br /&gt;
Neither of these are true, as the node with the older data and smallest amount of changed data is the accounting data which is significantly more valuable.&lt;br /&gt;
&lt;br /&gt;
Now imagine that both VMs have equally valuable data. What then? Which side do you discard?&lt;br /&gt;
&lt;br /&gt;
The approach we will use is to create two separate DRBD resources. Then we will assign our servers into two groups;&lt;br /&gt;
&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# VMs normally designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;quot;pools&amp;quot; of servers will have a dedicate DRBD resource behind it. These pools will be managed by clustered LVM, as that provides a very powerful ability to manage DRBD&#039;s raw space.&lt;br /&gt;
&lt;br /&gt;
Now imagine the above scenario, except this time imagine that the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; are on one DRBD resource and the servers running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; are on a different resource. Now we can recover from the split brain safely! &lt;br /&gt;
&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* The DRBD resource hosting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s servers can invalidate any changes on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This ability to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;invalidate&amp;lt;/span&amp;gt; on both direction allows us to recover without risking data loss, &#039;&#039;provided&#039;&#039; all the servers were actually running on the same node at the time of the split-brain event.&lt;br /&gt;
&lt;br /&gt;
To summarize, we&#039;re going to create the following three resources:&lt;br /&gt;
&lt;br /&gt;
* We&#039;ll create a resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* We&#039;ll create a second resource called &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;quot;. This resource will back the VMs designed to primarily run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating The Partitions For DRBD ==&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[LVM]] on the hosts, and simply create [[LV]]s to back our DRBD resources. However, this causes confusion as LVM will see the [[PV]] signatures on both the DRBD backing devices and the DRBD device itself. Getting around this requires editing LVM&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter&amp;lt;/span&amp;gt; option, which is somewhat complicated and is outside the scope of this tutorial. We&#039;re going to use raw partitions and we recommend you do the same.&lt;br /&gt;
&lt;br /&gt;
On our nodes, we created three primary disk partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda1&amp;lt;/span&amp;gt;; The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/boot&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda2&amp;lt;/span&amp;gt;; The swap partition.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda3&amp;lt;/span&amp;gt;; The root &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt; partition.&lt;br /&gt;
&lt;br /&gt;
We will create a new extended partition. Then within it we will create two new partitions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; clustered file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;; a partition big enough to host the VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Block Alignment ===&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; instead of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fdisk&amp;lt;/span&amp;gt;, we would have to manually ensure that our partitions fell on 64 [[KiB]] boundaries. With &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt;, we can use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-a opt&amp;lt;/span&amp;gt; to tell it to use optimal alignment, saving us a lot of work. This is important for decent performance performance in our servers. This is true for both traditional platter and modern solid-state drives.&lt;br /&gt;
&lt;br /&gt;
For performance reasons, we want to ensure that the file systems created within a VM matches the block alignment of the underlying storage stack, clear down to the base partitions on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda&amp;lt;/span&amp;gt; (or what ever your lowest-level block device is).&lt;br /&gt;
&lt;br /&gt;
For those who are curious though, this is why falling on 64 KiB boundaries are important.&lt;br /&gt;
&lt;br /&gt;
Imagine this misaligned scenario;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
                |~~~~~|==========================================================&lt;br /&gt;
DRBD Partition  |~~~~~|_______|_______|_______|_______|_______|_______|_______|__&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, when the guest wants to write one block worth of data, it actually causes two blocks to be written, causing avoidable disk I/O. That effectively doubles the number of [[IOPS]] needed, a huge waste of disk resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Note: Not to scale&lt;br /&gt;
                 ________________________________________________________________&lt;br /&gt;
VM File system  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
                |~~~~~~~|========================================================&lt;br /&gt;
DRBD Partition  |~~~~~~~|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
64 KiB block    |_______|_______|_______|_______|_______|_______|_______|_______|&lt;br /&gt;
512byte sectors |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By changing the start cylinder of our partitions to always start on 64 [[KiB]] boundaries, we&#039;re sure to keep the guest OS&#039;s file system in-line with the DRBD backing device&#039;s blocks. Thus, all reads and writes in the guest OS effect a matching number of real blocks, maximizing disk I/O efficiency.&lt;br /&gt;
&lt;br /&gt;
{{note|1=You will want to do this with [[SSD]] drives, too. It&#039;s true that the performance will remain about the same, but SSD drives have a limited number of write cycles, and aligning the blocks will minimize block writes.}}&lt;br /&gt;
&lt;br /&gt;
Special thanks to [http://xen.org/community/spotlight/pasi.html Pasi Kärkkäinen] for his patience in explaining to me the importance of disk alignment. He created two images which I used as templates for the [[ASCII]] art images above:&lt;br /&gt;
&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-not-aligned.jpg Virtual Disk Partitions, Not aligned.]&lt;br /&gt;
* [http://pasik.reaktio.net/virtual-disk-partitions-aligned.jpg Virtual Disk Partitions, aligned.]&lt;br /&gt;
&lt;br /&gt;
=== Determining Storage Pool Sizes ===&lt;br /&gt;
&lt;br /&gt;
Before we can create the DRBD partitions, we first need to know how much space we want to allocate to each node&#039;s storage pool.&lt;br /&gt;
&lt;br /&gt;
Before we start though, we need to know how much available storage space we have to play with. Both nodes should have identical storage, but we&#039;ll double check now. If they differ, we&#039;ll be limited to the size of the smaller one.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a opt /dev/sda &amp;quot;print free&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Both nodes show the same amount of free space, 851 [[GB]] (note, not [[GiB]]). &lt;br /&gt;
&lt;br /&gt;
We need to carve this up into three chunks of space:&lt;br /&gt;
&lt;br /&gt;
# Space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. Install ISOs, server definition files and the like will be kept here.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Space for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to install 8 different operating systems. That means we&#039;ll need enough space for at least eight different install [[ISO]] images. We&#039;ll allocate 40 [[GB]] for this. That leaves 811 GB left for servers.&lt;br /&gt;
&lt;br /&gt;
Choose which node will host what servers is largely a question of distributing CPU load. Of course, each node has to be capable of running all of our servers at the same time. With a little planning though, we can split up servers with expected high CPU load and, when both nodes are up, gain a little performance.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s create a table showing the servers we plan to build. We&#039;ll put them into two columns, one for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and the others designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We&#039;ll note how much disk space each server will need. Remember, we&#039;re trying to split up our servers with the highest expected CPU loads. This, being a tutorial, is going to be a fairly artificial division. You will need to decide for yourself how you want to split up your servers and how much space each needs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; (150 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; (50 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; (100 GB)&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|Total: 500 GB&lt;br /&gt;
|Total: 300 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason we put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on the same DRBD resource (and thus, the same storage pool) as the one that will host &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s servers is that it changes relatively rarely. So in the already unlikely event that there is a split-brain event, the chances of something important changing in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; before the split-brain is resolved is extremely low. So low that the overhead of a third resource is not justified.&lt;br /&gt;
&lt;br /&gt;
So then:&lt;br /&gt;
&lt;br /&gt;
* The first DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, will need to have 540 GB of space.&lt;br /&gt;
* The second DRBD resource, called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, will need to have 300 GB of space.&lt;br /&gt;
&lt;br /&gt;
This is a total of 840 GB, leaving about 11 GB unused. What you do with the remaining free space is entirely up to you. You can assign it to one of the servers, leave it as free space in one (or partially on both) storage pools, etc.&lt;br /&gt;
&lt;br /&gt;
It&#039;s actually a very common setup to build &#039;&#039;Anvil!&#039;&#039; systems with more storage than is needed. This free space can then be used later for new servers, growing or adding space to existing servers and so on. In our case, we&#039;ll give the left over space to the second storage pool and leave it there unassigned.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to create the partitions on each node that will back our DRBD resources!&lt;br /&gt;
&lt;br /&gt;
=== Creating the DRBD Partitions ===&lt;br /&gt;
&lt;br /&gt;
Here I will show you the values I entered to create the three partitions I needed on my nodes. &lt;br /&gt;
&lt;br /&gt;
{{note|1=All of the following commands need to be run on both nodes. It&#039;s very important that both nodes have identical partitions when you finish!}}&lt;br /&gt;
&lt;br /&gt;
On both nodes, start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shell.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
parted -a optimal /dev/sda&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GNU Parted 2.1&lt;br /&gt;
Using /dev/sda&lt;br /&gt;
Welcome to GNU Parted! Type &#039;help&#039; to view a list of commands.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; console. Before we start, let&#039;s take another look at the current disk configuration along with the amount of free space available.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type     File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB           Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary  ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary  ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary  linux-swap(v1)&lt;br /&gt;
        47.8GB  898GB   851GB            Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before we can create the three DRBD partition, we first need to create an [[extended partition|extended]] partition wherein which we will create the two [[logical partition|logical]] partitions. From the output above, we can see that the free space starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8GB&amp;lt;/span&amp;gt;, and that the drive ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;898GB&amp;lt;/span&amp;gt;. Knowing this, we can now create the extended partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart extended 47.8G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about that message, we will reboot when we finish.&lt;br /&gt;
&lt;br /&gt;
So now we can confirm that the new extended partition was create by again printing the partition table and the free space.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
        47.8GB  898GB   851GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. So now we&#039;re going to create our two logical partitions. We&#039;re going to use the same start position as last time, but the end position will be 540 [[GB]] further in, rounded up to an even ten gigabytes. You can be more precise, if you wish, but we&#039;ve got a little wiggle room.&lt;br /&gt;
&lt;br /&gt;
If you recall from the section above, this is how much space we determined we would need for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition and the five servers that will live on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This means that we&#039;re going to create a new logical partition that starts at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;47.8G&amp;lt;/span&amp;gt; and ends at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;590G&amp;lt;/span&amp;gt;, for a partition that is roughly 540 GB in size.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda&lt;br /&gt;
(Device or resource busy).  As a result, it may not reflect all of your changes&lt;br /&gt;
until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 47.8G 590G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll check again to see the new partition layout.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
        590GB   898GB   308GB             Free Space&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Again, perfect. Now we have a total of 308 [[GB]] left free. We need 300 GB, so this is enough, as expected. Lets allocate it all to our final partition.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkpart logical 590G 898G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).&lt;br /&gt;
As a result, it may not reflect all of your changes until after reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, lets look at the new partition table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
print free&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Model: LSI RAID 5/6 SAS 6G (scsi)&lt;br /&gt;
Disk /dev/sda: 898GB&lt;br /&gt;
Sector size (logical/physical): 512B/512B&lt;br /&gt;
Partition Table: msdos&lt;br /&gt;
&lt;br /&gt;
Number  Start   End     Size    Type      File system     Flags&lt;br /&gt;
        32.3kB  1049kB  1016kB            Free Space&lt;br /&gt;
 1      1049kB  525MB   524MB   primary   ext4            boot&lt;br /&gt;
 2      525MB   43.5GB  42.9GB  primary   ext4&lt;br /&gt;
 3      43.5GB  47.8GB  4295MB  primary   linux-swap(v1)&lt;br /&gt;
 4      47.8GB  898GB   851GB   extended                  lba&lt;br /&gt;
 5      47.8GB  590GB   542GB   logical&lt;br /&gt;
 6      590GB   898GB   308GB   logical&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Just as we asked for!&lt;br /&gt;
&lt;br /&gt;
Before we finish though, let&#039;s be extra careful and do a manual check of our new partitions to ensure that they are, in fact, aligned optimally. There will be no output from the following commands if the partitions are aligned.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
align-check opt 5&lt;br /&gt;
align-check opt 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;no output&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent, we&#039;re done!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Information: You may need to update /etc/fstab.                           &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we need to reboot to make the kernel see the new partition table. If &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running, stop it &#039;&#039;&#039;before&#039;&#039;&#039; rebooting.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once the nodes are back online, remember to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
== Configuring DRBD ==&lt;br /&gt;
&lt;br /&gt;
DRBD is configured in two parts:&lt;br /&gt;
&lt;br /&gt;
* Global and common configuration options&lt;br /&gt;
* Resource configurations&lt;br /&gt;
&lt;br /&gt;
We will be creating three separate DRBD resources, so we will create three separate resource configuration files. More on that in a moment.&lt;br /&gt;
&lt;br /&gt;
=== Configuring DRBD Global and Common Options ===&lt;br /&gt;
&lt;br /&gt;
As always, we&#039;re going to start by making backups. Then we&#039;re going to work on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. After we finish, we&#039;ll copy everything over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
&lt;br /&gt;
sent 1722 bytes  received 35 bytes  3514.00 bytes/sec&lt;br /&gt;
total size is 1604  speedup is 0.91&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we can begin.&lt;br /&gt;
&lt;br /&gt;
The first file to edit is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/global_common.conf&amp;lt;/span&amp;gt;. In this file, we will set global configuration options and set default resource configuration options.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll talk about the values we&#039;re setting here as well as put the explanation of each option in the configuration file itself, as it will be useful to have them should you need to alter the files sometime in the future.&lt;br /&gt;
&lt;br /&gt;
The first addition is in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;handlers { }&amp;lt;/span&amp;gt; directive. We&#039;re going to add the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence-peer&amp;lt;/span&amp;gt; option and configure it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;obliterate-peer.sh&amp;lt;/span&amp;gt; script we spoke about earlier in the DRBD section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	handlers {&lt;br /&gt;
		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
		# tool. It will call a fence against the other node and return&lt;br /&gt;
		# the appropriate exit code to DRBD.&lt;br /&gt;
		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to add three options to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;startup { }&amp;lt;/span&amp;gt; directive; We&#039;re going to tell DRBD to make both nodes &amp;quot;primary&amp;quot; on start, to wait five minutes on start for its peer to connect and, if the peer never connected last time, to wait onto two minutes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	startup {&lt;br /&gt;
		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
		become-primary-on	both;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
		# connect. This should be longer than it takes for cman to&lt;br /&gt;
		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
		# forever.&lt;br /&gt;
		wfc-timeout		300;&lt;br /&gt;
&lt;br /&gt;
		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
		# if the other node was degraded the last time it was seen by&lt;br /&gt;
		# this node. This is a way to speed up the boot process when&lt;br /&gt;
		# the other node is out of commission for an extended duration.&lt;br /&gt;
		degr-wfc-timeout	120;&lt;br /&gt;
		&lt;br /&gt;
		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
		# &#039;Outdated&#039;.&lt;br /&gt;
		outdated-wfc-timeout    120;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disk { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure DRBD&#039;s behaviour when a [[split-brain]] is detected. By setting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fencing&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;resource-and-stonith&amp;lt;/span&amp;gt;, we&#039;re telling DRBD to stop all disk access and call a fence against its peer node rather than proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	disk {&lt;br /&gt;
		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
		# condition and it is incredible important in dual-primary&lt;br /&gt;
		# setups!&lt;br /&gt;
		fencing			resource-and-stonith;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;net { }&amp;lt;/span&amp;gt; directive, we&#039;re going to tell DRBD that it is allowed to run in dual-primary mode and we&#039;re going to configure how it behaves if a split-brain has occurred, despite our best efforts. The recovery (or lack there of) requires three options; What to do when neither node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-0pri&amp;lt;/span&amp;gt;), what to do if only one node had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-1pri&amp;lt;/span&amp;gt;) and finally, what to do if both nodes had been primary (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;after-sb-2pri&amp;lt;/span&amp;gt;), as will most likely be the case for us. This last instance will be configured to tell DRBD just to drop the connection, which will require human intervention to correct.&lt;br /&gt;
&lt;br /&gt;
At this point, you might be wondering why we won&#039;t simply run Primary/Secondary. The reason is because of live-migration. When we push a VM across to the backup node, there is a short period of time where both nodes need to be writeable. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	net {&lt;br /&gt;
		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
		allow-two-primaries;&lt;br /&gt;
&lt;br /&gt;
		# The following three commands tell DRBD how to react should&lt;br /&gt;
		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
		# where both nodes were primary. This care requires human&lt;br /&gt;
		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
		after-sb-1pri		discard-secondary;&lt;br /&gt;
		after-sb-2pri		disconnect;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { }&amp;lt;/span&amp;gt; directive, we&#039;re going to configure how much bandwidth DRBD is allowed to take away from normal replication for use with background synchronization of out-of-sync blocks. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	syncer {&lt;br /&gt;
		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
		# the more of an impact normal application use of the DRBD&lt;br /&gt;
		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
		rate			30M;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes and exit the text editor. Now let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; to see the changes we made.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/drbd.d/global_common.conf /etc/drbd.d/global_common.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/drbd.d/global_common.conf	2013-09-27 16:38:33.000000000 -0400&lt;br /&gt;
+++ /etc/drbd.d/global_common.conf	2013-10-31 01:08:13.733823523 -0400&lt;br /&gt;
@@ -22,0 +23,5 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This script is a wrapper for RHCS&#039;s &#039;fence_node&#039; command line&lt;br /&gt;
+		# tool. It will call a fence against the other node and return&lt;br /&gt;
+		# the appropriate exit code to DRBD.&lt;br /&gt;
+		fence-peer		&amp;quot;/usr/lib/drbd/rhcs_fence&amp;quot;;&lt;br /&gt;
@@ -26,0 +32,22 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to promote both nodes to Primary on start.&lt;br /&gt;
+		become-primary-on	both;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait five minutes for the other node to&lt;br /&gt;
+		# connect. This should be longer than it takes for cman to&lt;br /&gt;
+		# timeout and fence the other node *plus* the amount of time it&lt;br /&gt;
+		# takes the other node to reboot. If you set this too short,&lt;br /&gt;
+		# you could corrupt your data. If you want to be extra safe, do&lt;br /&gt;
+		# not use this at all and DRBD will wait for the other node&lt;br /&gt;
+		# forever.&lt;br /&gt;
+		wfc-timeout		300;&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to wait for the other node for three minutes&lt;br /&gt;
+		# if the other node was degraded the last time it was seen by&lt;br /&gt;
+		# this node. This is a way to speed up the boot process when&lt;br /&gt;
+		# the other node is out of commission for an extended duration.&lt;br /&gt;
+		degr-wfc-timeout	120;&lt;br /&gt;
+&lt;br /&gt;
+		# Same as above, except this time-out is used if the peer was&lt;br /&gt;
+		# &#039;Outdated&#039;.&lt;br /&gt;
+		outdated-wfc-timeout	120;&lt;br /&gt;
@@ -31,0 +59,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to block IO and fence the remote node (using&lt;br /&gt;
+		# the &#039;fence-peer&#039; helper) when connection with the other node&lt;br /&gt;
+		# is unexpectedly lost. This is what helps prevent split-brain&lt;br /&gt;
+		# condition and it is incredible important in dual-primary&lt;br /&gt;
+		# setups!&lt;br /&gt;
+		fencing			resource-and-stonith;&lt;br /&gt;
@@ -37,0 +72,14 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD to allow two nodes to be Primary at the same&lt;br /&gt;
+		# time. It is needed when &#039;become-primary-on both&#039; is set.&lt;br /&gt;
+		allow-two-primaries;&lt;br /&gt;
+&lt;br /&gt;
+		# The following three commands tell DRBD how to react should&lt;br /&gt;
+		# our best efforts fail and a split brain occurs. You can learn&lt;br /&gt;
+		# more about these options by reading the drbd.conf man page.&lt;br /&gt;
+		# NOTE! It is not possible to safely recover from a split brain&lt;br /&gt;
+		# where both nodes were primary. This care requires human&lt;br /&gt;
+		# intervention, so &#039;disconnect&#039; is the only safe policy.&lt;br /&gt;
+		after-sb-0pri		discard-zero-changes;&lt;br /&gt;
+		after-sb-1pri		discard-secondary;&lt;br /&gt;
+		after-sb-2pri		disconnect;&lt;br /&gt;
@@ -41,0 +90,7 @@&lt;br /&gt;
+&lt;br /&gt;
+		# This tells DRBD how fast to synchronize out-of-sync blocks.&lt;br /&gt;
+		# The higher this number, the faster an Inconsistent resource&lt;br /&gt;
+		# will get back to UpToDate state. However, the faster this is,&lt;br /&gt;
+		# the more of an impact normal application use of the DRBD&lt;br /&gt;
+		# resource will suffer. We&#039;ll set this to 30 MB/sec.&lt;br /&gt;
+		rate			30M;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done with this file.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the DRBD Resources ===&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, we are going to create two DRBD resources:&lt;br /&gt;
&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and provide space for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
* Resource &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, which will create the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt; and be backed by each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt; partition. It will provide disk space for VMs that will normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each resource configuration will be in its own file saved as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd.d/rX.res&amp;lt;/span&amp;gt;. The two of them will be pretty much the same. So let&#039;s take a look at the first resource, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt;, then we&#039;ll just look at the changes for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt;. These files won&#039;t exist initially so we start by creating them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/drbd.d/r0.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the shared GFS2 partition and host VMs designed &lt;br /&gt;
# to run on an-c05n01.&lt;br /&gt;
resource r0 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device		/dev/drbd0;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk	internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address		10.10.50.1:7788;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address		10.10.50.2:7788;&lt;br /&gt;
		disk		/dev/sda5;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now copy this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; and edit for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; VM resource. The main differences are the resource name, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;, the block device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd1&amp;lt;/span&amp;gt;, the port, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7790&amp;lt;/span&amp;gt; and the backing block devices, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
vim /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
resource r1 {&lt;br /&gt;
	# This is the block device path.&lt;br /&gt;
	device          /dev/drbd1;&lt;br /&gt;
&lt;br /&gt;
	# We&#039;ll use the normal internal meta-disk. This is where DRBD stores&lt;br /&gt;
	# its state information about the resource. It takes about 32 MB per&lt;br /&gt;
	# 1 TB of raw space.&lt;br /&gt;
	meta-disk       internal;&lt;br /&gt;
&lt;br /&gt;
	# This is the `uname -n` of the first node&lt;br /&gt;
	on an-c05n01.alteeve.ca {&lt;br /&gt;
		# The &#039;address&#039; has to be the IP, not a host name. This is the&lt;br /&gt;
		# node&#039;s SN (bond1) IP. The port number must be unique amoung&lt;br /&gt;
		# resources.&lt;br /&gt;
		address         10.10.50.1:7789;&lt;br /&gt;
&lt;br /&gt;
		# This is the block device backing this resource on this node.&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
	# Now the same information again for the second node.&lt;br /&gt;
	on an-c05n02.alteeve.ca {&lt;br /&gt;
		address         10.10.50.2:7789;&lt;br /&gt;
		disk            /dev/sda6;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s easiest to see what changed between &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r0.res&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r1.res&amp;lt;/span&amp;gt; if we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; them.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /etc/drbd.d/r0.res /etc/drbd.d/r1.res&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/drbd.d/r0.res	2013-10-30 21:26:31.936680235 -0400&lt;br /&gt;
+++ /etc/drbd.d/r1.res	2013-10-30 21:27:42.625006337 -0400&lt;br /&gt;
@@ -1,3 +1,2 @@&lt;br /&gt;
-# This is the resource used for the shared GFS2 partition and host VMs designed&lt;br /&gt;
-# to run on an-c05n01.&lt;br /&gt;
-resource r0 {&lt;br /&gt;
+# This is the resource used for the VMs designed to run on an-c05n02.&lt;br /&gt;
+resource r1 {&lt;br /&gt;
@@ -5 +4 @@&lt;br /&gt;
-	device		/dev/drbd0;&lt;br /&gt;
+	device		/dev/drbd1;&lt;br /&gt;
@@ -17 +16 @@&lt;br /&gt;
-		address		10.10.50.1:7788;&lt;br /&gt;
+		address		10.10.50.1:7789;&lt;br /&gt;
@@ -20 +19 @@&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
@@ -24,2 +23,2 @@&lt;br /&gt;
-		address		10.10.50.2:7788;&lt;br /&gt;
-		disk		/dev/sda5;&lt;br /&gt;
+		address		10.10.50.2:7789;&lt;br /&gt;
+		disk		/dev/sda6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see easily that the resource name, device name and backing partitions changed. We can also see that the IP address used for each resource stayed the same. We split up the network traffic by using different [[TCP]] ports instead.&lt;br /&gt;
&lt;br /&gt;
Now we will do an initial validation of the configuration. This is done by running the following command;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm dump&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/drbd.conf&lt;br /&gt;
common {&lt;br /&gt;
    protocol               C;&lt;br /&gt;
    net {&lt;br /&gt;
        allow-two-primaries;&lt;br /&gt;
        after-sb-0pri    discard-zero-changes;&lt;br /&gt;
        after-sb-1pri    discard-secondary;&lt;br /&gt;
        after-sb-2pri    disconnect;&lt;br /&gt;
    }&lt;br /&gt;
    disk {&lt;br /&gt;
        fencing          resource-and-stonith;&lt;br /&gt;
    }&lt;br /&gt;
    syncer {&lt;br /&gt;
        rate             30M;&lt;br /&gt;
    }&lt;br /&gt;
    startup {&lt;br /&gt;
        wfc-timeout      300;&lt;br /&gt;
        degr-wfc-timeout 120;&lt;br /&gt;
        outdated-wfc-timeout 120;&lt;br /&gt;
        become-primary-on both;&lt;br /&gt;
    }&lt;br /&gt;
    handlers {&lt;br /&gt;
        fence-peer       /usr/lib/drbd/rhcs_fence;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r0 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r0 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.1:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd0 minor 0;&lt;br /&gt;
        disk             /dev/sda5;&lt;br /&gt;
        address          ipv4 10.10.50.2:7788;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# resource r1 on an-c05n01.alteeve.ca: not ignored, not stacked&lt;br /&gt;
resource r1 {&lt;br /&gt;
    on an-c05n01.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.1:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
    on an-c05n02.alteeve.ca {&lt;br /&gt;
        device           /dev/drbd1 minor 1;&lt;br /&gt;
        disk             /dev/sda6;&lt;br /&gt;
        address          ipv4 10.10.50.2:7789;&lt;br /&gt;
        meta-disk        internal;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll note that the output is formatted differently from the configuration files we created, but the values themselves are the same. If there had of been errors, you would have seen them printed. Fix any problems before proceeding. Once you get a clean dump, copy the configuration over to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/drbd.d root@an-c05n02:/etc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
drbd.d/&lt;br /&gt;
drbd.d/global_common.conf&lt;br /&gt;
drbd.d/r0.res&lt;br /&gt;
drbd.d/r1.res&lt;br /&gt;
&lt;br /&gt;
sent 5015 bytes  received 91 bytes  10212.00 bytes/sec&lt;br /&gt;
total size is 5479  speedup is 1.07&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Initializing the DRBD Resources ==&lt;br /&gt;
&lt;br /&gt;
Now that we have DRBD configured, we need to initialize the DRBD backing devices and then bring up the resources for the first time.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To save a bit of time and typing, the following sections will use a little &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bash&amp;lt;/span&amp;gt; magic. When commands need to be run on both resources, rather than running the same command twice with the different resource names, we will use the short-hand form &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;both&#039;&#039;&#039; nodes, create the new [[DRBD metadata|metadata]] on the backing devices. &lt;br /&gt;
&lt;br /&gt;
Two notes:&lt;br /&gt;
&lt;br /&gt;
* You may need to type &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt; to confirm the action if any data is seen.&lt;br /&gt;
* If DRBD sees an actual file system, it will error and insist that you clear the partition. You can do this by running; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd if=/dev/zero of=/dev/sdaX bs=4M count=1000&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; is the partition you want to clear. This is called &amp;quot;zeroing out&amp;quot; a partition. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; program does not print its progress. To check the progress, open a new terminal to the node and run &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;kill -USR1 $(pidof dd)&amp;lt;/span&amp;gt;&#039;.&lt;br /&gt;
&lt;br /&gt;
Lets create the meta-data!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm create-md r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
Writing meta data...&lt;br /&gt;
initializing activity log&lt;br /&gt;
NOT initialized bitmap&lt;br /&gt;
New drbd meta data block successfully created.&lt;br /&gt;
success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you get an error like this;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
pvs stderr:  Skipping volume group an-c05n01-vg0&lt;br /&gt;
pvs stderr:        Freeing VG (null) at 0x16efd20.&lt;br /&gt;
pvs stderr:      Unlocking /var/lock/lvm/P_global&lt;br /&gt;
pvs stderr:        _undo_flock /var/lock/lvm/P_global&lt;br /&gt;
&lt;br /&gt;
md_offset 542229131264&lt;br /&gt;
al_offset 542229098496&lt;br /&gt;
bm_offset 542212550656&lt;br /&gt;
&lt;br /&gt;
Found LVM2 physical volume signature&lt;br /&gt;
   529504444 kB left usable by current configuration&lt;br /&gt;
Could not determine the size of the actually used data area.&lt;br /&gt;
&lt;br /&gt;
Device size would be truncated, which&lt;br /&gt;
would corrupt data and result in&lt;br /&gt;
&#039;access beyond end of device&#039; errors.&lt;br /&gt;
If you want me to do this, you need to zero out the first part&lt;br /&gt;
of the device (destroy the content).&lt;br /&gt;
You should be very sure that you mean it.&lt;br /&gt;
Operation refused.&lt;br /&gt;
&lt;br /&gt;
Command &#039;drbdmeta 0 v08 /dev/sda5 internal create-md&#039; terminated with exit code 40&lt;br /&gt;
drbdadm create-md r0: exited with code 40&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{warning|1=The next two commands will irrevocably destroy the data on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda5&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda6&amp;lt;/span&amp;gt;!}}&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dd&amp;lt;/span&amp;gt; on the backing device to destroy all existing data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda5 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.04352 s, 464 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dd if=/dev/zero of=/dev/sda6 bs=4M count=1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000+0 records in&lt;br /&gt;
1000+0 records out&lt;br /&gt;
4194304000 bytes (4.2 GB) copied, 9.83831 s, 426 MB/s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Try running the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create-md&amp;lt;/span&amp;gt; commands again, it should work this time.&lt;br /&gt;
&lt;br /&gt;
== Loading the drbd Kernel Module ==&lt;br /&gt;
&lt;br /&gt;
Before we can go any further, we&#039;ll need to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module. Normally you won&#039;t normally need to do this because the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd&amp;lt;/span&amp;gt; initializations script handles this for us. We can&#039;t use this yet though because the DRBD resource we defined are not yet setup.&lt;br /&gt;
&lt;br /&gt;
So to load the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; kernel module, run;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:45 an-c05n01 kernel: drbd: minor_table @ 0xffff8803374420c0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Log messages:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Oct 30 22:45:51 an-c05n02 kernel: drbd: minor_table @ 0xffff8803387a9ec0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now go back to the terminal windows we were using to watch the cluster start. Kill the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;, if it&#039;s still running. We&#039;re going to watch the output of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; so we can keep tabs on the current state of the DRBD resources. We&#039;ll do this by using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt; program, which will refresh the output of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat&amp;lt;/span&amp;gt; call every couple of seconds.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back in the first terminal, we need now to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;attach&amp;lt;/span&amp;gt; each resource&#039;s backing device, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/sda{5,6}&amp;lt;/span&amp;gt;, to their respective DRBD resources, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;r{0,1}&amp;lt;/span&amp;gt;. After running the following command, you will see no output on the first terminal, but the second terminal&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; should change.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm attach r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----s&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Take note of the connection state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:StandAlone&amp;lt;/span&amp;gt;, the current role, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Secondary/Unknown&amp;lt;/span&amp;gt; and the disk state, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ds:Inconsistent/DUnknown&amp;lt;/span&amp;gt;. This tells us that our resources are not talking to one another, are not usable because they are in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state (you can&#039;t even read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbdX&amp;lt;/span&amp;gt; device) and that the backing device does not have an up to date view of the data. &lt;br /&gt;
&lt;br /&gt;
This all makes sense of course, as the resources are brand new.&lt;br /&gt;
&lt;br /&gt;
So the next step is to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;connect&amp;lt;/span&amp;gt; the two nodes together. As before, we won&#039;t see any output from the first terminal, but the second terminal will change.&lt;br /&gt;
&lt;br /&gt;
{{note|1=After running the following command on the first node, its connection state will become &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:WFConnection&amp;lt;/span&amp;gt; which means that it is &#039;&#039;&#039;w&#039;&#039;&#039;aiting &#039;&#039;&#039;f&#039;&#039;&#039;or a &#039;&#039;&#039;connection&#039;&#039;&#039; from the other node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm connect r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:529504444&lt;br /&gt;
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----&lt;br /&gt;
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:301082612&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can now see that the two nodes are talking to one another properly as the connection state has changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cs:Connected&amp;lt;/span&amp;gt;. They can see that their peer node is in the same state as they are; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next step is to synchronize the two nodes. Neither node has any real data, so it&#039;s entirely arbitrary which node we choose to use here. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; because, well, why not.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm -- --overwrite-data-of-peer primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:11467520 nr:0 dw:0 dr:11468516 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 7:03:30 speed: 20,372 (13,916) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:10833792 nr:0 dw:0 dr:10834788 al:0 bm:661 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290248820&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.6% (283444/294024)M&lt;br /&gt;
        finish: 7:31:03 speed: 10,720 (13,144) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# don&#039;t run anything here.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11467520 dw:11467520 dr:0 al:0 bm:699 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:518036924&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  2.2% (505892/517092)M&lt;br /&gt;
        finish: 8:42:19 speed: 16,516 (13,796) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:11061120 dw:11061120 dr:0 al:0 bm:675 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:290021492&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.7% (283224/294024)M&lt;br /&gt;
        finish: 7:06:46 speed: 11,316 (13,308) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! This tells us that the data, as garbage as it is, is being sync&#039;ed over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. DRBD doesn&#039;t know about data structures, all it cares about is that whatever is on the first node is identical to what is on the other node. This initial synchronization does this.&lt;br /&gt;
&lt;br /&gt;
A few notes:&lt;br /&gt;
&lt;br /&gt;
* There is a trick to short-circuit this which we used to use in the old tutorial, but we no longer recommend this. If you ever run an [http://www.drbd.org/users-guide-8.3/s-online-verify.html online verification] of the resource, all the previously unsync&#039;ed blocks will sync. So it&#039;s better to do it initially before the cluster is in production.&lt;br /&gt;
* If you notice that the sync speed is sitting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;250 K/sec&amp;lt;/span&amp;gt;, then DRBD isn&#039;t honouring the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer { rate xxM; }&amp;lt;/span&amp;gt; value. Run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbdadm adjust all&amp;lt;/span&amp;gt; on one node at the sync speed should start to speed up.&lt;br /&gt;
* &#039;&#039;&#039;Sync speed is NOT replication speed!&#039;&#039;&#039; - This is a very common misunderstanding for new DRBD users. The sync speed we see here &#039;&#039;takes away from&#039;&#039; the speed available to applications writing to the DRBD resource. The slower this is, the faster your applications can write to DRBD. Conversely, the higher the sync speed, the slower your applications writing to disk will be. So keep this reasonably low. Generally, a good number is about 30% of the storage or network&#039;s fastest speed, whichever is slower. If in doubt, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;30M&amp;lt;/span&amp;gt; is a safe starting value.&lt;br /&gt;
* If you manually adjust the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;syncer&amp;lt;/span&amp;gt; speed, it will not immediately change in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;. It takes a while to change, be patient.&lt;br /&gt;
&lt;br /&gt;
The good thing about DRBD is that we do not have to wait for the resources to be synchronized. So long as one of the resource is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;, both nodes will work. If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node needs to read data, it will simply read it from its peer. &lt;br /&gt;
&lt;br /&gt;
It is worth noting though; If the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; node disconnects or disappears, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Inconsistent&amp;lt;/span&amp;gt; node will immediately demote to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt;, making it unusable. This is the biggest reason for making the synchronization speed as high as we did. The cluster can not be considered redundant until both nodes are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So with this understood, let&#039;s get back to work. The resources can synchronize in the background.&lt;br /&gt;
&lt;br /&gt;
In order for a DRBD resource to be usable, it has to be &amp;quot;promoted&amp;quot;. Be default, DRBD resources start in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; state. This means that it will receive changes from the peer, but no changes can be made. You can&#039;t even look at the contents of a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Secondary&amp;lt;/span&amp;gt; resource. Why this is requires more time to discuss than we can go into here.&lt;br /&gt;
&lt;br /&gt;
So the next step is to promote both resource on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:20010808 nr:0 dw:0 dr:20011804 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 9:01:50 speed: 15,660 (14,680) K/sec&lt;br /&gt;
 1: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r-----&lt;br /&gt;
    ns:18860984 nr:0 dw:0 dr:18861980 al:0 bm:1151 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:282221684&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.3% (275604/294024)M&lt;br /&gt;
        finish: 2:31:28 speed: 31,036 (13,836) K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
drbdadm primary r{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Output from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:20010808 dw:20010752 dr:608 al:0 bm:1221 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:509493692&lt;br /&gt;
        [&amp;gt;....................] sync&#039;ed:  3.8% (497552/517092)M&lt;br /&gt;
        finish: 11:06:52 speed: 12,724 (14,584) want: 30,720 K/sec&lt;br /&gt;
 1: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:19152824 dw:19152768 dr:608 al:0 bm:1168 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:281929844&lt;br /&gt;
        [&amp;gt;...................] sync&#039;ed:  6.4% (275320/294024)M&lt;br /&gt;
        finish: 2:27:30 speed: 31,844 (13,956) want: 30,720 K/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how the roles have changed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ro:Primary/Primary&amp;lt;/span&amp;gt;? That tells us that DRBD is now ready to be used on both nodes!&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re done setting up DRBD!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Stopping DRBD while a synchronization is running is fine. When DRBD starts back up, it will pick up where it left off.}}&lt;br /&gt;
&lt;br /&gt;
Eventually, the next day in the case of our cluster, the synchronization will complete. This is what it looks like once it&#039;s finished. After this point, all application writes to the DRBD resources will get all the available performance your storage and network have to offer.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:413259760 nr:0 dw:20 dr:413261652 al:1 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:188464424 nr:0 dw:20 dr:188465928 al:1 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/drbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:413259760 dw:413259600 dr:944 al:0 bm:25224 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r-----&lt;br /&gt;
    ns:0 nr:188464424 dw:188464264 dr:876 al:0 bm:11504 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the next section, we&#039;re going to start working on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. You will want to stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt; and go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
= Initializing Clustered Storage =&lt;br /&gt;
&lt;br /&gt;
Before we can provision the first virtual machine, we must first create the storage that will back them. This will take a few steps:&lt;br /&gt;
&lt;br /&gt;
* Configuring [[LVM]]&#039;s clustered locking and creating the [[PV]]s, [[VG]]s and [[LV]]s&lt;br /&gt;
* Formatting and configuring the shared [[GFS2]] partition.&lt;br /&gt;
* Adding storage to the cluster&#039;s resource management.&lt;br /&gt;
&lt;br /&gt;
== Clustered Logical Volume Management ==&lt;br /&gt;
&lt;br /&gt;
We will assign all three DRBD resources to be managed by clustered LVM. This isn&#039;t strictly needed for the [[GFS2]] partition, as it uses DLM directly. However, the flexibility of LVM is very appealing, and will make later growth of the GFS2 partition quite trivial, should the need arise. &lt;br /&gt;
&lt;br /&gt;
The real reason for clustered LVM in our cluster is to provide DLM-backed locking to the partitions, or logical volumes in LVM, that will be used to back our VMs. Of course, the flexibility of LVM managed storage is enough of a win to justify using LVM for our VMs in itself, and shouldn&#039;t be ignored here.&lt;br /&gt;
&lt;br /&gt;
=== Configuring Clustered LVM Locking ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to edit the configuration on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. When we&#039;re done, we&#039;ll copy the configuration files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Before we create the clustered LVM, we need to first make three changes to the LVM configuration:&lt;br /&gt;
&lt;br /&gt;
* We need to filter out the DRBD backing devices so that LVM doesn&#039;t see the same signature a second time on the DRBD resource&#039;s backing device.&lt;br /&gt;
* Switch from local locking to clustered locking.&lt;br /&gt;
* Prevent fall-back to local locking when the cluster is not available.&lt;br /&gt;
&lt;br /&gt;
Start by making a backup of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; and then begin editing it.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm/&lt;br /&gt;
lvm/lvm.conf&lt;br /&gt;
lvm/archive/&lt;br /&gt;
lvm/backup/&lt;br /&gt;
lvm/cache/&lt;br /&gt;
&lt;br /&gt;
sent 37728 bytes  received 47 bytes  75550.00 bytes/sec&lt;br /&gt;
total size is 37554  speedup is 0.99&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re ready to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vim /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The configuration option to filter out the DRBD backing device is, surprisingly, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;filter = [ ... ]&amp;lt;/span&amp;gt;. By default, it is set to allow everything via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a/.*/&amp;quot;&amp;lt;/span&amp;gt; regular expression. We&#039;re only using DRBD in our LVM, so we&#039;re going to flip that to reject everything &#039;&#039;except&#039;&#039; DRBD by changing the regex to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the locking, we&#039;re going to change the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;locking_type&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; (local locking) to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;, (clustered locking). This is what tells LVM to use DLM and gives us the &amp;quot;clustered&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    locking_type = 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lastly, we&#039;re also going to disallow fall-back to local locking. Normally, LVM would try to access a clustered LVM [[VG]] using local locking if DLM is not available. We want to prevent any access to the clustered LVM volumes &#039;&#039;except&#039;&#039; when the DLM is itself running. This is done by changing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fallback_to_local_locking&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the changes, then lets run a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; against our backup to see a summary of the changes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
diff -U0 /root/backups/lvm/lvm.conf /etc/lvm/lvm.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/lvm/lvm.conf	2013-10-10 09:40:04.000000000 -0400&lt;br /&gt;
+++ /etc/lvm/lvm.conf	2013-10-31 00:21:36.196228144 -0400&lt;br /&gt;
@@ -67,2 +67,2 @@&lt;br /&gt;
-    # By default we accept every block device:&lt;br /&gt;
-    filter = [ &amp;quot;a/.*/&amp;quot; ]&lt;br /&gt;
+    # We&#039;re only using LVM on DRBD resource.&lt;br /&gt;
+    filter = [ &amp;quot;a|/dev/drbd*|&amp;quot;, &amp;quot;r/.*/&amp;quot; ]&lt;br /&gt;
@@ -408 +408 @@&lt;br /&gt;
-    locking_type = 1&lt;br /&gt;
+    locking_type = 3&lt;br /&gt;
@@ -424 +424 @@&lt;br /&gt;
-    fallback_to_local_locking = 1&lt;br /&gt;
+    fallback_to_local_locking = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect! Now copy the modified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvm.conf&amp;lt;/span&amp;gt; file to the other node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/lvm/lvm.conf root@an-c05n02:/etc/lvm/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
lvm.conf&lt;br /&gt;
&lt;br /&gt;
sent 2399 bytes  received 355 bytes  5508.00 bytes/sec&lt;br /&gt;
total size is 37569  speedup is 13.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Testing the clvmd Daemon ===&lt;br /&gt;
&lt;br /&gt;
A little later on, we&#039;re going to put clustered LVM under the control of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Before we can do that though, we need to start it manually so that we can use it to create the [[LV]] that will back the [[GFS2]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition. We will also be adding this partition to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, once it has been created.&lt;br /&gt;
&lt;br /&gt;
Before we start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon, we&#039;ll want to ensure that the cluster is running.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M     64   2013-10-30 22:40:07  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M     64   2013-10-30 22:40:07  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is, and both nodes are members. We can start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting clvmd: &lt;br /&gt;
Activating VG(s):   No volume groups found&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve not created any volume groups yet, so that complaint about not finding any is expected.&lt;br /&gt;
&lt;br /&gt;
We can now use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool&amp;lt;/span&amp;gt; to verify that a [[DLM]] lock space has been created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;. If it has, we&#039;re good to go.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 2,2&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dlm_tool ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dlm lockspaces&lt;br /&gt;
name          clvmd&lt;br /&gt;
id            0x4104eefa&lt;br /&gt;
flags         0x00000000 &lt;br /&gt;
change        member 2 joined 1 remove 0 failed 0 seq 1,1&lt;br /&gt;
members       1 2 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Initialize our DRBD Resource for use as LVM PVs ===&lt;br /&gt;
&lt;br /&gt;
This is the first time we&#039;re actually going to use DRBD and clustered LVM, so we need to make sure that both are started.&lt;br /&gt;
&lt;br /&gt;
First, check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198972/294024)M&lt;br /&gt;
0:r0   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
1:r1   SyncSource  Primary/Primary  UpToDate/Inconsistent  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    19.4%            (416880/517092)M&lt;br /&gt;
...    sync&#039;ed:    32.4%            (198956/294024)M&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Primary/Primary&amp;lt;/span&amp;gt;, so we&#039;re ready.&lt;br /&gt;
&lt;br /&gt;
Now to check on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13936) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  13894) is running...&lt;br /&gt;
Clustered Volume Groups: (none)&lt;br /&gt;
Active clustered Logical Volumes: (none)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s up and running. As we did earlier, we can also verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dlm_tool ls&amp;lt;/span&amp;gt; if we wish.&lt;br /&gt;
&lt;br /&gt;
Before we can use LVM, clustered or otherwise, we need to initialize one or more raw storage devices called &amp;quot;Physical Volumes&amp;quot;. This is done using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; command. We&#039;re going to do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. We should see the newly initialized DRBD resources appear.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s verify that, indeed, we have no existing [[PV]]s. We&#039;ll do this with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;, a tool that looks at blocks devices for physical volumes it may not yet have seen.&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt; first, we&#039;ll see that no [[PV]]s have been created.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  No matching physical volumes found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvcreate&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; against both DRBD devices. This will &amp;quot;sign&amp;quot; the devices and tell LVM that it can use them in [[VG]]s we&#039;ll soon create. On the other node, we&#039;ll run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt;. If The &amp;quot;clustered&amp;quot; part of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; is working, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; should immediately know about the new PVs without needing another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvcreate /dev/drbd{0,1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd0&amp;quot; successfully created&lt;br /&gt;
  Physical volume &amp;quot;/dev/drbd1&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;/dev/drbd0&amp;quot; is a new physical volume of &amp;quot;504.97 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               504.97 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;/dev/drbd1&amp;quot; is a new physical volume of &amp;quot;287.13 GiB&amp;quot;&lt;br /&gt;
  --- NEW Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               &lt;br /&gt;
  PV Size               287.13 GiB&lt;br /&gt;
  Allocatable           NO&lt;br /&gt;
  PE Size               0   &lt;br /&gt;
  Total PE              0&lt;br /&gt;
  Free PE               0&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If this was normal LVM, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; would not have seen the new [[PV]]s. Because DRBD replicated the changes and clustered LVM alerted the peer though, it immediately knew about the changes. &lt;br /&gt;
&lt;br /&gt;
Pretty neat!&lt;br /&gt;
&lt;br /&gt;
=== Creating Cluster Volume Groups ===&lt;br /&gt;
&lt;br /&gt;
As with initializing the DRBD resource above, we will create our volume groups, called [[VG]]s, on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; only. As with the PVs, we will again be able to see them on both nodes immediately.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that no previously-unseen VGs exist using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgscan&amp;lt;/span&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  No volume groups found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now to create the VGs, we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgcreate&amp;lt;/span&amp;gt; command with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; switch, which tells LVM to make the VG a clustered VG. Note that when the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; daemon is running, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-c y&amp;lt;/span&amp;gt; is implied. However, it&#039;s best to get into the habit of being extra careful and thorough. If there was a problem, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; not being running for example, it will trigger an error and we avoid hassles later.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you plan to use the [[AN!CDB|cluster dashboard]], it is important that the volume group names match those below. If you do not do this, you may have trouble provisioning new servers via the dashboard&#039;s user interface.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to use the volume group naming convention of:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;_vgX&amp;lt;/span&amp;gt;&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; matches the node that will become home to the servers using this storage pool.&lt;br /&gt;
** The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vgX&amp;lt;/span&amp;gt; is a simple sequence, starting at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. If you ever need to add space to an existing storage pool, you can create a new DRBD resource, sign it as a PV and either assign it directly to the existing volume group or increment this number and create a second storage pool for the associated node.&lt;br /&gt;
&lt;br /&gt;
Earlier, while planning our partition sizes, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; would back the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/drbd0&amp;lt;/span&amp;gt; physical volume.&lt;br /&gt;
&lt;br /&gt;
Likewise, we decided that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/drbd1&amp;lt;/span&amp;gt; would be used for the servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll create a volume group called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, create both of our new VGs!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgcreate -c y an-c05n01_vg0 /dev/drbd0&lt;br /&gt;
vgcreate -c y an-c05n02_vg0 /dev/drbd1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n01_vg0&amp;quot; successfully created&lt;br /&gt;
  Clustered volume group &amp;quot;an-c05n02_vg0&amp;quot; successfully created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       73506 / 287.13 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
   &lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  1&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                0&lt;br /&gt;
  Open LV               0&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               504.97 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Alloc PE / Size       0 / 0   &lt;br /&gt;
  Free  PE / Size       129273 / 504.97 GiB&lt;br /&gt;
  VG UUID               TzKBFn-xBVB-e9AP-iL1l-AvQi-mZiV-86KnSF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good! Now as a point of note, let&#039;s look again at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;pvdisplay&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; (we know it will be the same on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd1&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  PV Size               287.13 GiB / not usable 1.99 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Free PE               73506&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               ELfiwP-ZqPT-OMSy-SD26-Jmt0-CTB3-z3CTmP&lt;br /&gt;
   &lt;br /&gt;
  --- Physical volume ---&lt;br /&gt;
  PV Name               /dev/drbd0&lt;br /&gt;
  VG Name               an-c05n01_vg0&lt;br /&gt;
  PV Size               504.97 GiB / not usable 2.18 MiB&lt;br /&gt;
  Allocatable           yes &lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              129273&lt;br /&gt;
  Free PE               129273&lt;br /&gt;
  Allocated PE          0&lt;br /&gt;
  PV UUID               w2mbVu-7R3P-6j6t-Jpyd-M3SA-tzZt-kRj6uY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice now that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;VG Name&amp;lt;/span&amp;gt; has a value where it didn&#039;t before? This shows us that the PV has been allocated to a volume.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it for the volume groups!&lt;br /&gt;
&lt;br /&gt;
=== Creating a Logical Volume ===&lt;br /&gt;
&lt;br /&gt;
The last LVM step, for now, is to create a &amp;quot;logical volume&amp;quot; carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group. This will be used in the next step as the volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition.&lt;br /&gt;
&lt;br /&gt;
Out of thoroughness, let&#039;s scan for any previously unseen logical volumes using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvscan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvscan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# nothing printed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
None found, as expected. So let&#039;s create our 40 [[GB]] logical volume for our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; [[GFS2]] partition. We&#039;ll do this by specifying how large we want the new logical volume to be, what name we want to give it and what volume group to carve the space out of. The resulting logical volume will then be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/&amp;lt;vg&amp;gt;/&amp;lt;lv&amp;gt;&amp;lt;/span&amp;gt;. Here, we&#039;re taking space from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and we&#039;ll call this LV &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shared&amp;lt;/span&amp;gt;, so the resulting volume will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 40G -n shared an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;shared&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/shared&lt;br /&gt;
  LV Name                shared&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                f0w1J0-6aTz-0Bz0-SX57-pstr-g5qu-SAGGSS&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-10-31 17:07:50 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                40.00 GiB&lt;br /&gt;
  Current LE             10240&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect. We can now create our GFS2 partition!&lt;br /&gt;
&lt;br /&gt;
== Creating the Shared GFS2 Partition ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Red Hat &#039;&#039;&#039;[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Global_File_System_2/index.html#s2-selinux-gfs2-gfs2 does NOT]&#039;&#039;&#039; support using SELinux and GFS2 together. The principle reason for this is the performance degradation caused by the additional storage overhead required for SELinux to operate. We decided to enable SELinux in the [[Anvil!]] anyway because of how infrequently the partition is changed. In our case, performance is not a concern. However, if you need to be 100% in compliance with what Red Hat supports, you will need to disable SELinux.}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=This section assumes that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; are running.}}&lt;br /&gt;
&lt;br /&gt;
The GFS2-formatted &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; partition will be mounted at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; on both nodes and it will be used for four main purposes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;; Storing files like [[ISO]] images needed when installing server operating systems and mounting &amp;quot;DVDs&amp;quot; into the virtual DVD-ROM drives.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision&amp;lt;/span&amp;gt;; Storing short scripts used to call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; which handles the creation of new servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;; This is where the [[XML]] definition files which define the virtual hardware backing our servers will be kept. This is the most important directory as the cluster and [[AN!CDB|dashboard]] will look here when starting, migrating and recovering servers.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/archive&amp;lt;/span&amp;gt;; This is used to store old copies of the [[XML]] definition files and provision scripts.&lt;br /&gt;
&lt;br /&gt;
Formatting the logical volume is much like formatting a traditional file system on a traditional partition. There are a few extra arguments needed though. Lets look at them first.&lt;br /&gt;
&lt;br /&gt;
The following switches will be used with our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mkfs.gfs2&amp;lt;/span&amp;gt; call:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-p lock_dlm&amp;lt;/span&amp;gt;; This tells GFS2 to use [[DLM]] for its clustered locking.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-j 2&amp;lt;/span&amp;gt;; This tells GFS2 to create two journals. This must match the number of nodes that will try to mount this partition at any one time.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-t an-cluster-05:shared&amp;lt;/span&amp;gt;; This is the lock space name, which must be in the format &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;cluste_name&amp;gt;:&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster_name&amp;lt;/span&amp;gt; must match the one in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;file-system_name&amp;gt;&amp;lt;/span&amp;gt; has to be unique in the cluster, which is easy for us because we&#039;ll only have the one gfs2 file system.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve formatted the partition, we&#039;ll use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2_tool&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to query the new partition&#039;s superblock. We&#039;re going to use it shortly in some bash magic to pull out the [[UUID]] and feed it into a string formatted for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. More importantly here, it shows us that the second node sees the new file system.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Depending on the size of the new partition, this call could take a while to complete. Please be patient.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs.gfs2 -p lock_dlm -j 2 -t an-cluster-05:shared /dev/an-c05n01_vg0/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This will destroy any data on /dev/an-c05n01_vg0/shared.&lt;br /&gt;
It appears to contain: symbolic link to `../dm-0&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Are you sure you want to proceed? [y/n] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Device:                    /dev/an-c05n01_vg0/shared&lt;br /&gt;
Blocksize:                 4096&lt;br /&gt;
Device Size                40.00 GB (10485760 blocks)&lt;br /&gt;
Filesystem Size:           40.00 GB (10485758 blocks)&lt;br /&gt;
Journals:                  2&lt;br /&gt;
Resource Groups:           160&lt;br /&gt;
Locking Protocol:          &amp;quot;lock_dlm&amp;quot;&lt;br /&gt;
Lock Table:                &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
UUID:                      774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  mh_magic = 0x01161970&lt;br /&gt;
  mh_type = 1&lt;br /&gt;
  mh_format = 100&lt;br /&gt;
  sb_fs_format = 1801&lt;br /&gt;
  sb_multihost_format = 1900&lt;br /&gt;
  sb_bsize = 4096&lt;br /&gt;
  sb_bsize_shift = 12&lt;br /&gt;
  no_formal_ino = 2&lt;br /&gt;
  no_addr = 23&lt;br /&gt;
  no_formal_ino = 1&lt;br /&gt;
  no_addr = 22&lt;br /&gt;
  sb_lockproto = lock_dlm&lt;br /&gt;
  sb_locktable = an-cluster-05:shared&lt;br /&gt;
  uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very nice.&lt;br /&gt;
&lt;br /&gt;
Now, on both nodes, we need to create a mount point for the new file system and then we&#039;ll mount it on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|class=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   29M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared&lt;br /&gt;
mount /dev/an-c05n01_vg0/shared /shared/&lt;br /&gt;
df -hP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda2              40G  1.7G   36G   5% /&lt;br /&gt;
tmpfs                  12G   26M   12G   1% /dev/shm&lt;br /&gt;
/dev/sda1             485M   51M  409M  12% /boot&lt;br /&gt;
/dev/mapper/an--c05n01_vg0-shared   40G  259M   40G   1% /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the path under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Filesystem&amp;lt;/span&amp;gt; is different from what we used when creating the GFS2 partition. This is an effect of [[Device Mapper]], which is used by LVM to create [[symlinks]] to actual block device paths. If we look at our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/an-c05n01_vg0/shared&amp;lt;/span&amp;gt; device and the device from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;df&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/mapper/an--c05n01_vg0-shared&amp;lt;/span&amp;gt;, we&#039;ll see that they both point to the same actual block device.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/an-c05n01_vg0/shared /dev/mapper/an--c05n01_vg0-shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/an-c05n01_vg0/shared -&amp;gt; ../dm-0&lt;br /&gt;
lrwxrwxrwx. 1 root root 7 Oct 31 17:07 /dev/mapper/an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt; at the beginning of the files&#039; mode? That tells us that these are links. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt; -&amp;gt; ../dm-0&amp;lt;/span&amp;gt; shows where they point to. If we look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/dev/dm-0&amp;lt;/span&amp;gt;, we see its mode line begins with a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;, telling us that it is an actual block device. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/dm-0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
brw-rw----. 1 root disk 253, 0 Oct 31 17:27 /dev/dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you&#039;re curious, you can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dmsetup&amp;lt;/span&amp;gt; to gather more information about the [[device mapper]] devices. Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dmsetup info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Name:              an--c05n01_vg0-shared&lt;br /&gt;
State:             ACTIVE&lt;br /&gt;
Read Ahead:        256&lt;br /&gt;
Tables present:    LIVE&lt;br /&gt;
Open count:        1&lt;br /&gt;
Event number:      0&lt;br /&gt;
Major, minor:      253, 0&lt;br /&gt;
Number of targets: 1&lt;br /&gt;
UUID: LVM-TzKBFnxBVBe9APiL1lAvQimZiV86KnSFf0w1J06aTz0Bz0SX57pstrg5quSAGGSS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we see the link back to the LV.&lt;br /&gt;
&lt;br /&gt;
== Adding /shared to /etc/fstab ==&lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;re going to edit &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. Breaking this file may leave your system unbootable! As always, practice on unimportant nodes until you are comfortable with this process.}}&lt;br /&gt;
&lt;br /&gt;
In order for the the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; initialization script to work, it must be able to find the GFS partition in the file system table, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;. The operating system reads this file when it is booting, looking for file systems to mount. As such, this is a critical system file and breaking it can leave a node either unable to boot, or booting into the single user recovery console. &lt;br /&gt;
&lt;br /&gt;
So please proceed carefully.&lt;br /&gt;
&lt;br /&gt;
First up, let&#039;s backup &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av /etc/fstab /root/backups/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
fstab&lt;br /&gt;
&lt;br /&gt;
sent 878 bytes  received 31 bytes  1818.00 bytes/sec&lt;br /&gt;
total size is 805  speedup is 0.89&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a new entry to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; requires a particularly crafted line. You can read about this in detail by typing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;man fstab&amp;lt;/span&amp;gt;. In short though, each line is made up of six space-separated values;&lt;br /&gt;
&lt;br /&gt;
# This is the device (by path or by [[UUID]]). We will be using the partition&#039;s UUID here.&lt;br /&gt;
# This is the mount point for the file system. For this entry, that will be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
# This tells the [[OS]] what file system this partition is. For us, we&#039;ll set &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;.&lt;br /&gt;
# These are the mount options. Usually this is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;default&amp;lt;/span&amp;gt; which implies a set of option. We&#039;re going to add a couple other options to modify this, which we&#039;ll discuss shortly.&lt;br /&gt;
# This tells the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt; program whether to back this file system up or not. It&#039;s not usually used except with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext2]]&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[ext3]]&amp;lt;/span&amp;gt; file systems. Even then, it&#039;s rarely used any more. We will set this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; which disables this.&lt;br /&gt;
# This last field sets the order in which boot-time &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fsck&amp;lt;/span&amp;gt; (file system checks) run. This file system is never available at boot, so the only sensible value here is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With all this, we can now build our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
First, we need to query the file system&#039;s UUID.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
current uuid = 774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We only need the UUID, so let&#039;s filter out the parts we don&#039;t want by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;awk&amp;lt;/span&amp;gt;, which splits a line up on spaces.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We need to make sure that the UUID is lower-case. It is already, but we can make sure it&#039;s always lower case by using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When specifying a device in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; but UUID instead of using a device path, we need to prefix the entry with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UUID=&amp;lt;/span&amp;gt;. We can expand on our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to do this.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generally, all but the last two values are separated by tabs. We know that the second field is the mount point for this file system, which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; in this case. lets expand the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call to add a tab followed by the mount point.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The third entry is the file system type, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; in our case. Let&#039;s add another tab and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; word.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Next up are the file system options. GFS2, being a clustered file system, requires cluster locking. Cluster locks are, relative to non-clustered internal locks, fairly slow. So we also want to reduce the number of writes that hit the partition. Normally, every time you look at a file or directory, a field called &amp;quot;access time&amp;quot;, or &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;atime&amp;lt;/span&amp;gt;&amp;quot; for short, gets updated. This is actually a write, which would in turn require a DLM lock. Few people care about access times, so we&#039;re going to disable it for files and directories as well. We&#039;re to append a couple of option to help here; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;defaults,noatime,nodiratime&amp;lt;/span&amp;gt;. Let&#039;s add them to our growing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All that is left now are the two last options. We&#039;re going to separate these with a single space. Let&#039;s finish off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstab&amp;lt;/span&amp;gt; with one last addition to our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;sed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;{ print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E\t\/shared\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UUID=774883e8-d0fe-a068-3969-4bb7dc679960	/shared	gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
Now, we can add it by simply copy and pasting this line into the file directly. Another bash trick though, as we say in the SSH section, is using bash redirection to append the output of one program onto the end of a file. We&#039;ll do a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt; immediately after to see that the line was appended properly.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Be sure to use two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt; brackets! A single &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; bracket says &amp;quot;overwrite&amp;quot;. Two &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; brackets says &amp;quot;append&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:30:07.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:17:33.865210115 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gfs2_tool sb /dev/an-c05n01_vg0/shared uuid | awk &#039;/uuid =/ { print $4; }&#039; | sed -e &amp;quot;s/\(.*\)/UUID=\L\1\E \/shared\t\tgfs2\tdefaults,noatime,nodiratime\t0 0/&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
diff -u /root/backups/fstab /etc/fstab &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /root/backups/fstab	2013-10-28 12:18:04.000000000 -0400&lt;br /&gt;
+++ /etc/fstab	2013-11-01 01:14:39.035500695 -0400&lt;br /&gt;
@@ -13,3 +13,4 @@&lt;br /&gt;
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0&lt;br /&gt;
 sysfs                   /sys                    sysfs   defaults        0 0&lt;br /&gt;
 proc                    /proc                   proc    defaults        0 0&lt;br /&gt;
+UUID=774883e8-d0fe-a068-3969-4bb7dc679960 /shared		gfs2	defaults,noatime,nodiratime	0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This looks good. Note that for this &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;diff&amp;lt;/span&amp;gt;, we used the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-u&amp;lt;/span&amp;gt; option. This shows a couple lines on either side of the changes. We see the existing entries above the new one, so we know we didn&#039;t accidentally over-write the existing data.&lt;br /&gt;
&lt;br /&gt;
Now we need to make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/gfs2&amp;lt;/span&amp;gt; daemon can see the new partition. If it can, we know the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/fstab&amp;lt;/span&amp;gt; entry works properly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That works.&lt;br /&gt;
&lt;br /&gt;
The last test is to create our sub-directories we talked about earlier. We&#039;ll do this on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, then we will do a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. If everything is working properly, we should see the new directories immediately.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /shared/{definitions,provision,archive,files}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 40K&lt;br /&gt;
drwxr-xr-x.  6 root root 3.8K Nov  1 01:23 .&lt;br /&gt;
dr-xr-xr-x. 24 root root 4.0K Oct 31 21:02 ..&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 archive&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 definitions&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 files&lt;br /&gt;
drwxr-xr-x.  2 root root 3.8K Nov  1 01:23 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fantastic! &lt;br /&gt;
&lt;br /&gt;
Our clustered storage is complete. The last thing we need to do is to move the clustered storage to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
=== Stopping All Clustered Storage Components ===&lt;br /&gt;
&lt;br /&gt;
In the next step, we&#039;re going to put &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; under the cluster&#039;s control. Let&#039;s stop these daemons now so we can see them be started by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; shortly.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 stop &amp;amp;&amp;amp; /etc/init.d/clvmd stop &amp;amp;&amp;amp; /etc/init.d/drbd stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Unmounting GFS2 filesystem (/shared):                      [  OK  ]&lt;br /&gt;
Deactivating clustered VG(s):   0 logical volume(s) in volume group &amp;quot;an-c05n02_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;an-c05n01_vg0&amp;quot; now active&lt;br /&gt;
  clvmd not running on node an-c05n01.alteeve.ca&lt;br /&gt;
                                                           [  OK  ]&lt;br /&gt;
Signaling clvmd to exit                                    [  OK  ]&lt;br /&gt;
clvmd terminated                                           [  OK  ]&lt;br /&gt;
Stopping all DRBD resources: .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
= Managing Storage In The Cluster =&lt;br /&gt;
&lt;br /&gt;
A little while back, we spoke about how the cluster is split into two components; cluster communication managed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and resource management provided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It is the later which we will now begin to configure.&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; component is contained within the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; element tags. Within this element are three types of child elements. They are:&lt;br /&gt;
&lt;br /&gt;
* Fail-over Domains - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** These are optional constraints which allow for control which nodes, and under what circumstances, services may run. When not used, a service will be allowed to run on any node in the cluster without constraints or ordering.&lt;br /&gt;
* Resources - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** Within this element, available resources are defined. Simply having a resource here will not put it under cluster control. Rather, it makes it available for use in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
* Services - &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt;; &lt;br /&gt;
** This element contains one or more parallel or series child-elements which are themselves references to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources /&amp;gt;&amp;lt;/span&amp;gt; elements. When in parallel, the services will start and stop at the same time. When in series, the services start in order and stop in reverse order. We will also see a specialized type of service that uses the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm /&amp;gt;&amp;lt;/span&amp;gt; element name, as you can probably guess, for creating virtual machine services.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll look at each of these components in more detail shortly.&lt;br /&gt;
&lt;br /&gt;
== A Note on Daemon Starting ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=Readers of the old tutorial will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; has been removed. We found that, in rare occasions, bleeding-edge client software, like modern versions of &amp;quot;Virtual Machine Manager&amp;quot; of Fedora workstations, connecting to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon could cause it to crash. This didn&#039;t interfere with the servers, but the cluster would try to fail the storage stack, causing the service to enter a failed state. This left servers running, but it is a mess to clean up that is easily avoided by simply removing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; from the storage stack. To address this, we will monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; as its own service. Should it fail, it will restart without impacting the storage daemons.}}&lt;br /&gt;
&lt;br /&gt;
There are four daemons we will be putting under cluster control:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;; Replicated storage.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;; Clustered LVM.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt;; Mounts and Unmounts configured GFS2 partition. We will manage this using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;; Enables access to the KVM hypervisor via the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; suite of tools.&lt;br /&gt;
&lt;br /&gt;
The reason we do not want to start these daemons with the system is so that we can let the cluster do it. This way, should any fail, the cluster will detect the failure and fail the entire service tree. &lt;br /&gt;
&lt;br /&gt;
For example, lets say that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; failed to start, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; would fail the storage service and give up, rather than continue trying to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and the rest.&lt;br /&gt;
&lt;br /&gt;
If we had left these daemons to start on boot, the failure of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; would not effect the start-up of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt;, which would then not find its [[PV]]s given that DRBD is down. The system would then try to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; daemon which would also fail as the [[LV]] backing the partition would not be available.&lt;br /&gt;
&lt;br /&gt;
=== Defining the Resources ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=All of these edits will be done on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Once we&#039;re done and the config has been validated, we&#039;ll use the cluster&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; to push the update to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and update the running cluster&#039;s config.}}&lt;br /&gt;
&lt;br /&gt;
Lets start by first defining our clustered resources. &lt;br /&gt;
&lt;br /&gt;
As stated before, the addition of these resources does not, in itself, put the defined resources under the cluster&#039;s management. Instead, it defines services, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;init.d&amp;lt;/span&amp;gt; scripts. These can then be used by one or more &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements, as we will see shortly. For now, it is enough to know what, until a resource is defined, it can not be used in the cluster.&lt;br /&gt;
&lt;br /&gt;
Given that this is the first component of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; being added to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, we will be creating the parent &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm /&amp;gt;&amp;lt;/span&amp;gt; elements here as well.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the new section, then discuss the parts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First and foremost; Note that we&#039;ve incremented the configuration version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;8&amp;lt;/span&amp;gt;. As always, &amp;quot;increment and then edit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the new section;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve added the attribute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;log_level=&amp;quot;5&amp;quot;&amp;lt;/span&amp;gt; to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; element to cut down on the log entries in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt;. Every 10 seconds, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; calls &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/$foo status&amp;lt;/span&amp;gt; on all script services. At the default log, these checks are logged. So without this, every ten seconds, four status messages would be printed to the system log. That can make is difficult when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt;&#039;ing the logs when testing or debugging.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;resources&amp;gt;...&amp;lt;/resources&amp;gt;&amp;lt;/span&amp;gt; element contains our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources. This is a particular type of resource which specifically handles that starting and stopping of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[init.d]]&amp;lt;/span&amp;gt; style scripts. That is, the script must exit with [[LSB]] compliant codes. They must also properly react to being called with the sole argument of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are many other types of resources which, with the exception of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;vm .../&amp;gt;&amp;lt;/span&amp;gt;, we will not be looking at in this tutorial. Should you be interested in them, please look in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/usr/share/cluster&amp;lt;/span&amp;gt; for the various scripts (executable files that end with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.sh&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Each of our four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ... /&amp;gt;&amp;lt;/span&amp;gt; resources have two attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;file=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The full path to the script to be managed.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; A unique name used to reference this resource later on in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/span&amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
Other resources are more involved, but the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script .../&amp;gt;&amp;lt;/span&amp;gt; resources are quite simple.&lt;br /&gt;
&lt;br /&gt;
=== Creating Failover Domains ===&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are, at their most basic, a collection of one or more nodes in the cluster with a particular set of rules associated with them. Services can then be configured to operate within the context of a given fail-over domain. There are a few key options to be aware of.&lt;br /&gt;
&lt;br /&gt;
Fail-over domains are optional and can be left out of the cluster, generally speaking. However, in our cluster, we will need them for our storage services, as we will later see, so please do not skip this step.&lt;br /&gt;
&lt;br /&gt;
* A fail-over domain can be unordered or prioritized.&lt;br /&gt;
** When unordered, a service will start on any node in the domain. Should that node later fail, it will restart to another random node in the domain.&lt;br /&gt;
** When prioritized, a service will start on the available node with the highest priority in the domain. Should that node later fail, the service will restart on the available node with the next highest priority.&lt;br /&gt;
* A fail-over domain can be restricted or unrestricted.&lt;br /&gt;
** When restricted, a service is &#039;&#039;&#039;only&#039;&#039;&#039; allowed to start on, or restart on. a nodes in the domain. When no nodes are available, the service will be stopped.&lt;br /&gt;
** When unrestricted, a service will try to start on, or restart on, a node in the domain. However, when no domain members are available, the cluster will pick another available node at random to start the service on.&lt;br /&gt;
* A fail-over domain can have a fail-back policy.&lt;br /&gt;
** When a domain allows for fail-back and the domain is ordered, and a node with a higher &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt; (re)joins the cluster, services within the domain will migrate to that higher-priority node. This allows for automated restoration of services on a failed node when it rejoins the cluster.&lt;br /&gt;
** When a domain does not allow for fail-back, but is unrestricted, fail-back of services that fell out of the domain will happen anyway. That is to say, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; is ignored if a service was running on a node outside of the fail-over domain and a node within the domain joins the cluster. However, once the service is on a node within the domain, the service will &#039;&#039;&#039;not&#039;&#039;&#039; relocate to a higher-priority node should one join the cluster later.&lt;br /&gt;
** When a domain does not allow for fail-back and is restricted, then fail-back of services will never occur.&lt;br /&gt;
&lt;br /&gt;
What we need to do at this stage is to create something of a hack. Let me explain;&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, we need to start a set of local daemons on all nodes. These aren&#039;t really clustered resources though as they can only ever run on their host node. They will never be relocated or restarted elsewhere in the cluster as as such, are not highly available. So to work around this desire to &amp;quot;cluster the unclusterable&amp;quot;, we&#039;re going to create a fail-over domain for each node in the cluster. Each of these domains will have only one of the cluster nodes as members of the domain and the domain will be restricted, unordered and have no fail-back. With this configuration, any service group using it will only ever run on the one node in the domain.&lt;br /&gt;
&lt;br /&gt;
In the next step, we will create a service group, then replicate it once for each node in the cluster. The only difference will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failoverdomain&amp;lt;/span&amp;gt; each is set to use. With our configuration of two nodes then, we will have two fail-over domains, one for each node, and we will define the clustered storage service twice, each one using one of the two fail-over domains.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;, then we will focus closer on the new section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, the version was incremented, this time to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;. We&#039;ve also added the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomains&amp;gt;...&amp;lt;/failoverdomains&amp;gt;&amp;lt;/span&amp;gt; element. Let&#039;s take a closer look at this new element.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first thing to note is that there are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;...&amp;lt;/failoverdomain&amp;gt;&amp;lt;/span&amp;gt; child elements:&lt;br /&gt;
&lt;br /&gt;
* The first has the name &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n01&amp;lt;/span&amp;gt; and contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
* The second is effectively identical, save that the domain&#039;s name is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;only_n02&amp;lt;/span&amp;gt; and it contains only the node &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as a member.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt; element has four attributes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute sets the unique name of the domain which we will later use to bind a service to the domain.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;nofailback=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster to never &amp;quot;fail back&amp;quot; any services in this domain. This seems redundant, given there is only one node, but when combined with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;, prevents any migration of services.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; this is also somewhat redundant in that there is only one node defined in the domain, but I don&#039;t like to leave attributes undefined so I have it here.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restricted=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute is key in that it tells the cluster to &#039;&#039;&#039;not&#039;&#039;&#039; try to restart services within this domain on any other nodes outside of the one defined in the fail-over domain.&lt;br /&gt;
&lt;br /&gt;
Each of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain...&amp;gt;&amp;lt;/span&amp;gt; elements has a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode .../&amp;gt;&amp;lt;/span&amp;gt; child element. This is a very simple element which has, at this time, only one attribute:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt;; The name of the node to include in the fail-over domain. This name must match the corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;clusternode name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; node name.&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re ready to finally create our clustered storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; monitoring services.&lt;br /&gt;
&lt;br /&gt;
=== Creating Clustered Storage and libvirtd Service ===&lt;br /&gt;
&lt;br /&gt;
With the resources defined and the fail-over domains created, we can set about creating our services.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, services can have one or more resources within them. When two or more resources exist, then can be put into a dependency tree, they can used in parallel or a combination of parallel and dependent resources.&lt;br /&gt;
&lt;br /&gt;
When you create a service dependency tree, you put each dependent resource as a child element of its parent. The resources are then started in order, starting at the top of the tree and working its way down to the deepest child resource. If at any time one of the resources should fail, the entire service will be declared failed and no attempt will be made to try and start any further child resources. Conversely, stopping the service will cause the deepest child resource to be stopped first. Then the second deepest and on upwards towards the top resource. This is exactly the behaviour we want, as we will see shortly.&lt;br /&gt;
&lt;br /&gt;
When resources are defined in parallel, all defined resources will be started at the same time. Should any one of the resources fail to start, the entire resource will declared failed. Stopping the service will likewise cause a simultaneous call to stop all resources.&lt;br /&gt;
&lt;br /&gt;
As before, let&#039;s take a look at the entire updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, then we&#039;ll focus in on the new service section.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With the version now at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;, we have added four &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements. Two of which contain the storage resources in a service tree configuration. The other two have a single &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; resource for managing the hypervisors. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a closer look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements have five attributes each:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute is a unique name that will be used to identify the service, as we will see later.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that, when it starts, it should automatically start this service.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster which fail-over domain this service must run within. The two otherwise identical services each point to a different fail-over domain, as we discussed in the previous section.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt; attribute tells the cluster that a node running this service &#039;&#039;&#039;is&#039;&#039;&#039; allowed to to have other services running as well.&lt;br /&gt;
* The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery=&amp;quot;restart&amp;quot;&amp;lt;/span&amp;gt; attribute sets the service recovery policy. As the name implies, the cluster will try to restart this service should it fail. Should the service fail multiple times in a row, it will be disabled. The exact number of failures allowed before disabling is configurable using the optional &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt; attributes, which are not covered here.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=It is a fairly common mistake to interpret &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt; to mean that a service is only allowed to run on one node at a time. This is not the case, please do not use this attribute incorrectly.}}&lt;br /&gt;
&lt;br /&gt;
Within each of the two first two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; attributes are two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script...&amp;gt;&amp;lt;/span&amp;gt; type resources and a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; type resource. These are configured as a service tree in the order:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; -&amp;gt; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The other two &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service ...&amp;gt;...&amp;lt;/service&amp;gt;&amp;lt;/span&amp;gt; elements are there to simply monitor the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; daemon on each node. Should it fail for any reason, the cluster will restart the service right away.&lt;br /&gt;
&lt;br /&gt;
Each of these &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;script ...&amp;gt;&amp;lt;/span&amp;gt; elements has just one attribute; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ref=&amp;quot;...&amp;quot;&amp;lt;/span&amp;gt; which points to a corresponding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;script&amp;lt;/span&amp;gt; resource. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusterfs&amp;lt;/span&amp;gt; element has five attributes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; is the name used to reference this resource in the service tree.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; is the logical volume we formatted as a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; file system.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;force_unmount&amp;lt;/span&amp;gt;, when set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, tells the system to try and kill any processes that might be holding the mount open. This is useful if, for example, you left a terminal window open where you had browsed into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Without it, the service would fail and restart.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fstype&amp;lt;/span&amp;gt; is the file system type. If you do not specify this, the system will try to determine it automatically. To be safe, we will set it.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mountpoint&amp;lt;/span&amp;gt; is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device&amp;lt;/span&amp;gt; should be mounted.&lt;br /&gt;
&lt;br /&gt;
The logic for the storage resource tree is:&lt;br /&gt;
&lt;br /&gt;
* DRBD needs to start so that the bare clustered storage devices become available.&lt;br /&gt;
* Clustered LVM must next start so that the logical volumes used by GFS2 and our VMs become available.&lt;br /&gt;
* Finally, the GFS2 partition contains the [[XML]] definition files needed to start our servers, host shared files and so on.&lt;br /&gt;
&lt;br /&gt;
From the other direction, we need the stop order to be organized in the reverse order:&lt;br /&gt;
&lt;br /&gt;
* We need the GFS2 partition to unmount first.&lt;br /&gt;
* With the GFS2 partition stopped, we can safely say that all LVs are no longer in use and thus &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; can stop.&lt;br /&gt;
* With Clustered LVM now stopped, nothing should be using our DRBD resources any more, so we can safely stop them, too.&lt;br /&gt;
&lt;br /&gt;
All in all, it&#039;s a surprisingly simple and effective configuration.&lt;br /&gt;
&lt;br /&gt;
== Validating and Pushing the Changes ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve made a big change, so it&#039;s all the more important that we validate the config before proceeding.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, no errors and we checked that the current cluster configuration version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We need to now tell the cluster to use the new configuration file. Unlike last time, we won&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt;. Now that the cluster is up and running, we can use it to push out the updated configuration file using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt;. This is the first time we&#039;ve used the cluster to push out an updated &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; file, so we will have to enter the password we set earlier for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As confirmed on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, the new configuration loaded properly! Note as well that we had to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password for both nodes. Once done, you will not have to do that again on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. Later, if you push an update from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, you will need to enter the passwords once again, but not after that. You authenticate from a node only one time.&lt;br /&gt;
&lt;br /&gt;
If you were watching syslog, you will have seen an entries like the ones below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:48 an-c05n01 ricci[26853]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 ricci[26856]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/533317550&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n01 corosync[6448]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26653]: Executing &#039;/usr/bin/virsh nodeinfo&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 ricci[26656]: Executing &#039;/usr/libexec/ricci/ricci-worker -f /var/lib/ricci/queue/15604613&#039;&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 modcluster: Updating cluster.conf&lt;br /&gt;
Nov  1 17:47:50 an-c05n02 corosync[6404]:   [QUORUM] Members[2]: 1 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the Cluster&#039;s Status ==&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at a new tool; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, &#039;&#039;&#039;clu&#039;&#039;&#039;ster &#039;&#039;&#039;stat&#039;&#039;&#039;us. We&#039;ll be using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; extensively from here on out to monitor the status of the cluster members and managed services. It does not manage the cluster in any way, it is simply a status tool.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 18:08:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At this point, we&#039;re only running the foundation of the cluster, so we can only see which nodes are members. &lt;br /&gt;
&lt;br /&gt;
We&#039;ll now start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. It will read the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; configuration file and parse the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;rm&amp;gt;&amp;lt;/span&amp;gt; child elements. It will find our four new services and, according to their configuration, start them. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=We&#039;ve configured the storage services to start automatically. When we start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; now, it will start the storage resources, including DRBD. In turn, DRBD will stop and wait for up to five minutes and wait for its peer. This will cause the first node you start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on to appear to hang until the other node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; has started DRBD as well. If the other node doesn&#039;t start DRBD, it will be fenced. So be sure to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; on both nodes at the same time.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, and see what&#039;s new.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 19:04:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What we see are two section; The top section shows the cluster members and the lower part covers the managed resources. &lt;br /&gt;
&lt;br /&gt;
We can see that both members, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Online&amp;lt;/span&amp;gt;, meaning that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; is running and that they&#039;ve joined the cluster. It also shows us that both members are running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. You will always see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Local&amp;lt;/span&amp;gt; beside the name of the node you ran the actual &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; command from.&lt;br /&gt;
&lt;br /&gt;
Under the services, you can see the four new services we created with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix. We can see that each service is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;started&amp;lt;/span&amp;gt;, meaning that all four of the resources are up and running properly and which node each service is running on.&lt;br /&gt;
&lt;br /&gt;
If we were watching the system log, we will see that, very shortly after starting &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt;, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; starts and mounts. Somewhere in there, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; will start.&lt;br /&gt;
&lt;br /&gt;
Lets take a look.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:07 an-c05n01 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 kernel: dlm: connecting to 2&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: I am node #1&lt;br /&gt;
Nov  1 19:04:08 an-c05n01 rgmanager[10738]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Starting stopped service service:storage_n01&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 rgmanager[10738]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:10 an-c05n01 kernel: drbd: minor_table @ 0xffff880638752a80&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Found 4 transactions (126 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: bitmap READ of 4040 pages took 9 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: attached to UUIDs D62CF91BB06F1B41:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting worker thread (from cqueue [5069])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Found 1 transactions (1 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: disk( Attaching -&amp;gt; UpToDate ) pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: attached to UUIDs FF678525C82359F3:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: Starting receiver thread (from drbd0_worker [12026])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: Starting receiver thread (from drbd1_worker [12041])&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Starting stopped service service:libvirtd_n01&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 rgmanager[10738]: Service service:libvirtd_n01 started&lt;br /&gt;
Nov  1 19:04:11 an-c05n01 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Starting asender thread (from drbd0_receiver [12058])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: self D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Starting asender thread (from drbd1_receiver [12063])&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: self FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: uuid_compare()=1 by rule 70&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapS ) pdsk( Outdated -&amp;gt; Consistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated sync UUID FF678525C82359F2:CFC277C83C414547:CFC177C83C414547:0EC499BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-source minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( WFBitMapS -&amp;gt; SyncSource ) pdsk( Consistent -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Began resync as SyncSource (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated sync UUID D62CF91BB06F1B41:AB8966B4CD6A5E71:AB8866B4CD6A5E71:F1BA98C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: conn( SyncSource -&amp;gt; Connected ) pdsk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: bitmap WRITE of 2298 pages took 12 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n01 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1, already locked for use&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n01 rgmanager[10738]: Service service:storage_n01 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: Using TCP for communications&lt;br /&gt;
Nov  1 19:04:08 an-c05n02 kernel: dlm: got connection from 1&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: I am node #2&lt;br /&gt;
Nov  1 19:04:09 an-c05n02 rgmanager[10547]: Resource Group Manager Starting&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:storage_n02&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: initialized. Version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: registered as block device major 147&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: drbd: minor_table @ 0xffff880638440280&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Found 4 transactions (4 active extents) in activity log.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: drbd_bm_resize called with capacity == 1059008888&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: resync bitmap: bits=132376111 words=2068377 pages=4040&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: size = 505 GB (529504444 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: bitmap READ of 4040 pages took 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: recounting of set bits took additional 10 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: attached to UUIDs AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting worker thread (from cqueue [5161])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Diskless -&amp;gt; Attaching ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: No usable activity log found.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Method to ensure write ordering: flush&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: max BIO size = 131072&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: drbd_bm_resize called with capacity == 602165224&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: resync bitmap: bits=75270653 words=1176104 pages=2298&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: size = 287 GB (301082612 KB)&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: bitmap READ of 2298 pages took 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: recounting of set bits took additional 6 jiffies&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: disk( Attaching -&amp;gt; Outdated ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: attached to UUIDs CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: Starting receiver thread (from drbd0_worker [11833])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( StandAlone -&amp;gt; Unconnected ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: Starting receiver thread (from drbd1_worker [11848])&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Nov  1 19:04:11 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Nov  1 19:04:11 an-c05n02 rgmanager[10547]: Starting stopped service service:libvirtd_n02&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 rgmanager[10547]: Service service:libvirtd_n02 started&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Starting asender thread (from drbd0_receiver [11865])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: self AB8866B4CD6A5E70:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer D62CF91BB06F1B40:AB8866B4CD6A5E71:F1BA98C02D0BA9B9:F1B998C02D0BA9B9 bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Handshake successful: Agreed network protocol version 97&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFConnection -&amp;gt; WFReportParams ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Starting asender thread (from drbd1_receiver [11869])&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: data-integrity-alg: &amp;lt;not-used&amp;gt;&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: drbd_sync_handshake:&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: self CFC177C83C414546:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer FF678525C82359F2:CFC177C83C414547:0EC499BF75166A0D:0EC399BF75166A0D bits:0 flags:0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: uuid_compare()=-1 by rule 50&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Unknown -&amp;gt; Secondary ) conn( WFReportParams -&amp;gt; WFBitMapT ) pdsk( DUnknown -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: role( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: lo: Disabled Privacy Extensions&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFBitMapT -&amp;gt; WFSyncUUID ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated sync uuid CFC277C83C414547:0000000000000000:0EC499BF75166A0D:0EC399BF75166A0D&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm before-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: peer( Secondary -&amp;gt; Primary ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated sync uuid AB8966B4CD6A5E71:0000000000000000:F1BA98C02D0BA9B9:F1B998C02D0BA9B9&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: updated UUIDs FF678525C82359F3:0000000000000000:CFC277C83C414547:CFC177C83C414547&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm before-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( WFSyncUUID -&amp;gt; SyncTarget ) disk( Outdated -&amp;gt; Inconsistent ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Began resync as SyncTarget (will sync 0 KB [0 bits set]).&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm after-resync-target minor-1 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: Resync done (total 1 sec; paused 0 sec; 0 K/sec)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: updated UUIDs D62CF91BB06F1B41:0000000000000000:AB8966B4CD6A5E71:AB8866B4CD6A5E71&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: conn( SyncTarget -&amp;gt; Connected ) disk( Inconsistent -&amp;gt; UpToDate ) &lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm after-resync-target minor-0 exit code 0 (0x0)&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: bitmap WRITE of 2298 pages took 14 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd1: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: bitmap WRITE of 4040 pages took 15 jiffies&lt;br /&gt;
Nov  1 19:04:12 an-c05n02 kernel: block drbd0: 0 KB (0 bits) marked out-of-sync by on disk bit-map.&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 clvmd: Cluster LVM daemon started - connected to CMAN&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Starting up&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: Slow work thread pool: Ready&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2 (built Sep 14 2013 05:33:49) installed&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=: Trying to join cluster &amp;quot;lock_dlm&amp;quot;, &amp;quot;an-cluster-05:shared&amp;quot;&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: Joined cluster. Now mounting FS...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0, already locked for use&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=0: Done&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Nov  1 19:04:13 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Nov  1 19:04:14 an-c05n02 rgmanager[10547]: Service service:storage_n02 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sure enough, we can confirm that everything started properly.&lt;br /&gt;
&lt;br /&gt;
DRBD;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looks good. Lets look at clustered LVM;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  29009) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/clvmd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
clvmd (pid  28801) is running...&lt;br /&gt;
Clustered Volume Groups: an-c05n02_vg0 an-c05n01_vg0&lt;br /&gt;
Active clustered Logical Volumes: shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good, too. Last service in storage is GFS2;&lt;br /&gt;
&lt;br /&gt;
GFS2;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/gfs2 status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configured GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
Active GFS2 mountpoints: &lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Finally, our stand-alone service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  12131) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/libvirtd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
libvirtd (pid  11939) is running...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nice, eh?&lt;br /&gt;
&lt;br /&gt;
== Managing Cluster Resources ==&lt;br /&gt;
&lt;br /&gt;
Managing services in the cluster is done with a fairly simple tool called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to look at two commands at this time.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Command&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e &amp;lt;service&amp;gt; -m &amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Enable the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt; on the specified &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt;. When a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/span&amp;gt; is not specified, the local node where the command was run is assumed.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -d &amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|Disable (stop) the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service&amp;gt;&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stopping Clustered Storage - A Preview to Cold-Stopping the Cluster ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at how we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to stop our storage services.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Services with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:&amp;lt;/span&amp;gt; prefix can be called with their name alone. As we will see later, other services will need to have the service type prefix included.}}&lt;br /&gt;
&lt;br /&gt;
Before doing any work on an &#039;&#039;Anvil!&#039;&#039;, start by confirming the current state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:22:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is running, as expected. Let&#039;s stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;&#039;&#039;, run:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d storage_n01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling service:storage_n01...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we now run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; now, we should see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:25:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;service:storage_n01&amp;lt;/span&amp;gt; is now in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt; state? If you check the status of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; now, you will see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is indeed down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd not loaded&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs            ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
1:r1   WFConnection  Primary/Unknown  UpToDate/Outdated  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; are stopped as well.&lt;br /&gt;
&lt;br /&gt;
Pretty simple!&lt;br /&gt;
&lt;br /&gt;
== Starting Clustered Storage ==&lt;br /&gt;
&lt;br /&gt;
As we saw earlier, the storage and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; services start automatically. It&#039;s still important to know how to manually start these services though. So that is what we&#039;ll cover here.&lt;br /&gt;
&lt;br /&gt;
The main difference from stopping the service is that we swap the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-d&amp;lt;/span&amp;gt; switch for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;, &#039;&#039;&#039;e&#039;&#039;&#039;nable, switch. We will also add the target cluster member name using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt; switch. We didn&#039;t need to use the member switch while stopping because the cluster could tell where the service was running and, thus, which member to contact to stop the service.&lt;br /&gt;
&lt;br /&gt;
Should you omit the member name, the cluster will try to use the local node as the target member. Note though that a target service will start on the node the command was issued on, regardless of the fail-over domain&#039;s ordered policy. That is to say, a service will not start on another node in the cluster when the member option is not specified, despite the fail-over configuration set to prefer another node.&lt;br /&gt;
&lt;br /&gt;
As always, start by verifying the current state of the services.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:36:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;storage_n01&amp;lt;/span&amp;gt; is disabled. Let&#039;s start it up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e storage_n01 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable service:storage_n01...Success&lt;br /&gt;
service:storage_n01 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify with another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Fri Nov  1 23:45:20 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at DRBD now, it will show as being up and running on both nodes.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If the DRBD status shows the resource still stopped on the node, give it a minute and check again. It can sometimes take a few moments before the resources in the service starts.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back up and running normally.&lt;br /&gt;
&lt;br /&gt;
= Testing Network Redundancy =&lt;br /&gt;
&lt;br /&gt;
Now that the &#039;&#039;Anvil!&#039;&#039; is up and running, it&#039;s time to test the network&#039;s fault tolerance capabilities.&lt;br /&gt;
&lt;br /&gt;
We wanted to wait this long because we need to see how our cluster and storage software handles the failure and recovery of various networking components. Had we tested before now, we would have had to rely on simple tests, like ping responses, which do not give us a complete picture of the network&#039;s real resiliency.&lt;br /&gt;
&lt;br /&gt;
We will perform the following tests:&lt;br /&gt;
&lt;br /&gt;
* Pull each network cable and confirm that the bond it belongs to failed over to the other interface.&lt;br /&gt;
* Kill the primary switch entirely and then recover it.&lt;br /&gt;
* Kill the backup switch entirely and then recover it.&lt;br /&gt;
&lt;br /&gt;
During these tests, we will watch the following:&lt;br /&gt;
&lt;br /&gt;
* Watch a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc&amp;lt;/span&amp;gt; file for each bond to see how its state changes.&lt;br /&gt;
* Run a ping flood from each node to the other node, using each of out three networks.&lt;br /&gt;
* Watch the cluster membership.&lt;br /&gt;
* Watch the status of the DRBD resources.&lt;br /&gt;
* Tail the system log files.&lt;br /&gt;
&lt;br /&gt;
The cluster will be formed and the storage services will be running. We do not need to have the servers running, so we will turn them off. If something goes wrong here, it will certainly end up with a node being fenced. No need to risk hurting the servers. Whether they are running or nor will not will have no effect of the tests.&lt;br /&gt;
&lt;br /&gt;
== What we will be Watching ==&lt;br /&gt;
&lt;br /&gt;
Before setup for the tests, lets take a minute to look at the various things we&#039;ll be monitoring for faults.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/proc/net/bonding/bondX&#039; ===&lt;br /&gt;
&lt;br /&gt;
When a bond is created, a special &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file is created whose name matches the name of the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bondX&amp;lt;/span&amp;gt; device. We created three bonds; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;, so we&#039;ll find &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond0&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond1&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/net/bonding/bond2&amp;lt;/span&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
These look like normal files, and we can read them like files, but they&#039;re actually representations of kernel values. Specifically, the health and state of the bond device, its slaves and current performance settings. Lets take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /proc/net/bonding/bond0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)&lt;br /&gt;
&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you recall from the network setup step, we made &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; the primary interface and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; the backup interface for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;. Indeed, we can see that these two interfaces are indeed slaved to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The data here is in three sections:&lt;br /&gt;
&lt;br /&gt;
* The first section shows the state of the overall bond. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bonding Mode: fault-tolerance (active-backup)&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
MII Polling Interval (ms): 100&lt;br /&gt;
Up Delay (ms): 120000&lt;br /&gt;
Down Delay (ms): 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This tells us that we&#039;re using the &amp;quot;Active/Backup&amp;quot; bonding mode, that the currently active interface is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; will always be used when both interfaces are healthy, though it will wait two minutes (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;120,000 ms&amp;lt;/span&amp;gt;) after &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; returns before it will be used. It also tells us that it will manually check for a link on the slaved interfaces every 100 ms.&lt;br /&gt;
&lt;br /&gt;
The next two sections cover the two slaved interfaces:&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:19:99:9c:9b:9e&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the link (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MII Status&amp;lt;/span&amp;gt;) is up and running at 1000 Mbps in full duplex mode. It shows us that it has not seen any failures in this interface since the bond was last started. It also shows us the interfaces real [[MAC]] address. This is important because, from the point of view of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ifconfig&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ip addr&amp;lt;/span&amp;gt;, both slaved interfaces will &#039;&#039;appear&#039;&#039; to have the same MAC address (which depends on the currently active interface). This is a trick done in active-backup (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;mode=1&amp;lt;/span&amp;gt;) bonding to speed up fail-over. The queue ID is used in other bonding modes for routing traffic down certain slaves when possible, we can ignore it here.&lt;br /&gt;
&lt;br /&gt;
* Information on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Speed: 1000 Mbps&lt;br /&gt;
Duplex: full&lt;br /&gt;
Link Failure Count: 0&lt;br /&gt;
Permanent HW addr: 00:1b:21:81:c3:35&lt;br /&gt;
Slave queue ID: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; information is more or less the same as the first. This is expected because, usually, the hardware is the same. The only expected differences are the device name and MAC address, of course.&lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;/etc/init.d/drbd status&#039; ===&lt;br /&gt;
&lt;br /&gt;
Earlier, we looked at another &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[procfs]]&amp;lt;/span&amp;gt; file called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/proc/drbd&amp;lt;/span&amp;gt; in order to watch the state of our DRBD resources. There is another way we can monitor DRBD using its initialization script. We&#039;ll use that method here.&lt;br /&gt;
&lt;br /&gt;
Lets look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will notice that the output is almost exactly the same as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cat /proc/drbd&amp;lt;/span&amp;gt;&#039;s output, but formatted a little nicer. &lt;br /&gt;
&lt;br /&gt;
=== Understanding &#039;cman_tool nodes&#039; ===&lt;br /&gt;
&lt;br /&gt;
This is a more specific &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool&amp;lt;/span&amp;gt; call than we&#039;ve used in the past. Before, we called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; to get a broad overview of the cluster&#039;s state. It can be used in many ways to get more information about specific about the cluster. &lt;br /&gt;
&lt;br /&gt;
If you recall, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool status&amp;lt;/span&amp;gt; would show us the simple sum of nodes in the cluster; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Nodes: 2&amp;lt;/span&amp;gt;. If we want to know more about the nodes, we can use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;. Lets see what that looks like on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool nodes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    332   2013-11-27 14:11:01  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    340   2013-11-27 14:11:02  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Slightly more informative.&lt;br /&gt;
&lt;br /&gt;
== Network Testing Terminal Layout ==&lt;br /&gt;
&lt;br /&gt;
If you have a decent resolution monitor (or multiple monitors), you should be able to open 18 terminals at once. This is how many are needed to run ping floods, watch the bond status files, watch the system logs, watch DRBD and watch cluster membership all at the same time. This configuration makes it very easy to keep a near real-time, complete view of all network components.&lt;br /&gt;
&lt;br /&gt;
Personally, I have a 1920 x 1080 screen, which is pretty typical these days. I use a 9-point monospace font in my gnome terminals and I disable the menu bar. With that, the layout below fits nicely;&lt;br /&gt;
&lt;br /&gt;
[[Image:2-node_el6-tutorial_network-test_terminal-layout_02.png|thumb|center|1000px|Terminal layout used for HA network testing; Calls running.]]&lt;br /&gt;
&lt;br /&gt;
The details of that are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Terminal layout for monitoring during network testing.&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;70 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, terminal window @ &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;127 x 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The actual commands we will use are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n02.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;10&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
!Task&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond0 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond1 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch &amp;quot;cat /proc/net/bonding/bond2 | grep -e Slave -e Status | grep -v queue&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.bcn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.sn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ping flood &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; ping -f an-c05n01.ifn&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch cluster membership&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch cman_tool nodes&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Watch DRBD resource status&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch /etc/init.d/drbd status&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; system logs&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clear; tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With this, we can keep a real-time overview of the status of all network, drbd and cluster components for both nodes. It may take a little bit to setup, but it will make the following network failure and recovery tests much easier to keep track of. Most importantly, it will allow you to quickly see if any of the tests fail.&lt;br /&gt;
&lt;br /&gt;
== How to Know if the Tests Passed ==&lt;br /&gt;
&lt;br /&gt;
Well, the most obvious answer to this question is if the cluster stack blows up or not.&lt;br /&gt;
&lt;br /&gt;
We can be a little more subtle than that though.&lt;br /&gt;
&lt;br /&gt;
We will be watching for:&lt;br /&gt;
&lt;br /&gt;
* Bonds not failing over to or back from their backup links when the primary link fails.&lt;br /&gt;
* More than 20 or 30 lost packets across each/all effected bonds fail over or back. Keep in mind that this may sound like a lot of dropped packets, but we&#039;re flooding the network with as many pings as the hardware can push out, so 20 to 30 lost packets is actually very low packet loss.&lt;br /&gt;
* Corosync declaring the peer node lost and cluster membership changing / node fencing.&lt;br /&gt;
* DRBD losing connection to the peer / node fencing.&lt;br /&gt;
&lt;br /&gt;
== Breaking things! ==&lt;br /&gt;
&lt;br /&gt;
To document the testing of all failure conditions would add substantially to this tutorial and not add much value.&lt;br /&gt;
&lt;br /&gt;
So instead we will look at sample failures to see what to expect. You can then use them as references for your own testing.&lt;br /&gt;
&lt;br /&gt;
=== Failing a Bond&#039;s Primary Interface ===&lt;br /&gt;
&lt;br /&gt;
For this test, we will pull &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt;&#039;s network cable out of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This will trigger a fail-over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; which we will see in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; file and we will see messages about the failure in the system logs. Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s ping flood on the [[BCN]] will show a number of dropped packets.&lt;br /&gt;
&lt;br /&gt;
Assuming all goes well, corosync should not report any errors or react in any way to this test.&lt;br /&gt;
&lt;br /&gt;
So pull the cable and see if you&#039;re result match ours.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Nov 27 19:54:44 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This shows that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth3&amp;lt;/span&amp;gt; became the active link and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; shows as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;down&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lets look at the ping flood;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
..........................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly in-line with what we expected! If you look at the cluster membership and system logs, you will see that nothing was noticed outside of the bonding driver!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s plug the cable back in.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll notice that the bond driver will see the link return, change the state of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;going back&amp;lt;/span&amp;gt; and nothing more will happen at first. After two minutes, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; will switch back to using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;eth0&amp;lt;/span&amp;gt; and there will be another short burst of dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: going back&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Nov 27 20:02:24 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for two minutes.&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt; data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
System log entries:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Nov 27 20:04:24 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now lets look at the dropped packets when the switch-back happened;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; didn&#039;t lose a packet and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; only lost a few? The switch was controlled, so no time was lost detecting the link failure.&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t be tempted to test only a few links!}}&lt;br /&gt;
&lt;br /&gt;
Repeat this test for all network connections on both nodes. Ensure that each links fails and recovers in the same way. We have a complex network and tests like this help find cabling and configuration issues. These tests have value beyond simply verifying fail-over and recovery.&lt;br /&gt;
&lt;br /&gt;
=== Failing the Network Switches ===&lt;br /&gt;
&lt;br /&gt;
Failing and then recovering the primary switch tests a few things:&lt;br /&gt;
&lt;br /&gt;
* Can all the bonds fail over to their backup links at the same time?&lt;br /&gt;
* Does the switch handle the loss of the primary switch in the stack properly?&lt;br /&gt;
* Does the switch interrupt traffic when it recovers?&lt;br /&gt;
&lt;br /&gt;
Even if you don&#039;t have a stacked switch, this test is still very important. We set the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; to two minutes, but there is a chance that is still not long enough for your switch. This test will expose issues like this.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you don&#039;t have port trunking, be sure to switch your workstation&#039;s links or network uplink from the primary to backup switch before proceeding. This will ensure you can monitor the nodes during the test without interruption.}}&lt;br /&gt;
&lt;br /&gt;
Before we start, lets take a look at the current view of thing;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we will pull the power cable out of the primary switch and wait for things to settle.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n01 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
.............................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: down&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
..................................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: e1000e: eth2 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth0 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: igb: eth1 NIC Link is Down&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: link status definitely down for interface eth0, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond0: making interface eth3 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: link status definitely down for interface eth1, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond1: making interface eth4 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: link status definitely down for interface eth2, disabling it&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: bonding: bond2: making interface eth5 the new active one.&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth2 left promiscuous mode&lt;br /&gt;
Dec  2 14:30:33 an-c05n02 kernel: device eth5 entered promiscuous mode&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! All of the bonds failed over to their backup interfaces and the cluster stays stable. Both cluster membership and DRBD continued without interruption!&lt;br /&gt;
&lt;br /&gt;
Now to test recover of the primary switch. If everything was configured properly, the switch will recover, the primary links will wait two minutes before recovering and the actual cut-over will complete with few dropped packets.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.bcn (10.20.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    348   2013-12-02 10:05:17  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    360   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.sn (10.10.50.2) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n02.ifn (10.255.50.2) 56(84) bytes of data.&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n01 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n01 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n01 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n01 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;4&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth0 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth0&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth3&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.bcn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.bcn (10.20.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;cman_tool nodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Node  Sts   Inc   Joined               Name&lt;br /&gt;
   1   M    360   2013-12-02 10:17:45  an-c05n01.alteeve.ca&lt;br /&gt;
   2   M    356   2013-12-02 10:17:45  an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth1 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth1&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth4&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.sn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.sn (10.10.50.1) 56(84) bytes of data.&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Primary Slave: eth2 (primary_reselect always)&lt;br /&gt;
Currently Active Slave: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth2&lt;br /&gt;
MII Status: up&lt;br /&gt;
Slave Interface: eth5&lt;br /&gt;
MII Status: up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Ping flooding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.ifn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
PING an-c05n01.ifn (10.255.50.1) 56(84) bytes of data.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|Watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f -n 0 /var/log/messages&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: e1000e: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx&lt;br /&gt;
Dec  2 15:20:51 an-c05n02 kernel: bonding: bond2: link status up for interface eth2, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: bonding: bond1: link status up for interface eth1, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:20:52 an-c05n02 kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX&lt;br /&gt;
Dec  2 15:20:53 an-c05n02 kernel: bonding: bond0: link status up for interface eth0, enabling it in 120000 ms.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bond2: link status definitely up for interface eth2, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: bonding: bond2: making interface eth2 the new active one.&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth5 left promiscuous mode&lt;br /&gt;
Dec  2 15:22:51 an-c05n02 kernel: device eth2 entered promiscuous mode&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bond1: link status definitely up for interface eth1, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:52 an-c05n02 kernel: bonding: bond1: making interface eth1 the new active one.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex.&lt;br /&gt;
Dec  2 15:22:53 an-c05n02 kernel: bonding: bond0: making interface eth0 the new active one.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
{{note|1=Some switches will show a link and then drop the connection a few times as they boot. If your switch is like this, you will see this reflected in the system logs. This should be fine because of the two minute &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; value.}}&lt;br /&gt;
&lt;br /&gt;
Now repeat this test by failing and recovering the backup switch. Do not assume that, because the first switch cycled successfully, the second switch will as well. A bad configuration can easily allow the primary switch to pass this test while the secondary switch would cause a failure.&lt;br /&gt;
&lt;br /&gt;
With the second switch test complete, we can be confident that the networking infrastructure is totally fault tolerant.&lt;br /&gt;
&lt;br /&gt;
= Provisioning Virtual Machines =&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re getting to the purpose of our cluster; Provision virtual machines!&lt;br /&gt;
&lt;br /&gt;
We have two steps left:&lt;br /&gt;
&lt;br /&gt;
* Provision our VMs.&lt;br /&gt;
* Add the VMs to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Provisioning&amp;quot; a virtual machine simple means to create it; Assign a collection of emulated hardware, connected to physical devices, to a given virtual machine and begin the process of installing the operating system on it. This tutorial is more about clustering than it is about virtual machine administration, so some experience with managing virtual machines has to be assumed. If you need to brush up, here are some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM project&#039;s How-Tos]&lt;br /&gt;
* [http://kvm.et.redhat.com/page/FAQ KVM project&#039;s FAQ]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Hypervisor_Deployment_Guide/index.html Red Hat&#039;s Hypervisor Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Getting_Started_Guide/index.html Red Hat&#039;s Virtualization Guide]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/index.html Red Hat&#039;s Virtualization Administration]&lt;br /&gt;
* [http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html Red Hat&#039;s Virtualization Host Configuration and Guest Installation Guide]&lt;br /&gt;
&lt;br /&gt;
When you feel comfortable, proceed.&lt;br /&gt;
&lt;br /&gt;
== Before We Begin - Building a Dashboard ==&lt;br /&gt;
&lt;br /&gt;
[[Image:An-cdb-splash.png|thumb|right|400px|[[AN!CDB]] dashboard with server &amp;quot;monitor&amp;quot; displayed.]]&lt;br /&gt;
&lt;br /&gt;
One of the biggest advances since the initial tutorial was created was the creation of the [[AN!CDB - Cluster Dashboard]].&lt;br /&gt;
&lt;br /&gt;
It provides a very easy to use web-based user interface for building, modifying and removing servers on the &#039;&#039;Anvil!&#039;&#039; platform. &lt;br /&gt;
&lt;br /&gt;
It also provides a &amp;quot;[https://en.wikipedia.org/wiki/KVM_switch KVM switch]&amp;quot; style access to the servers you create. This gives you direct access to your servers, just as if you have a physical keyboard, mouse and monitor plugged into a physical server. You can watch the server boot from the virtual, boot into recovery consoles or off of repair &amp;quot;DVDs&amp;quot; and so forth.&lt;br /&gt;
&lt;br /&gt;
The link above covers the dashboard and its use, and includes a link to an installer showing how to setup a dashboard for yourself. Now is a good time to take a break from this tutorial and setup that dashboard.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to build a dashboard, that is fine. It is not required in this tutorial.&lt;br /&gt;
&lt;br /&gt;
If you decide not to though, you will now need to setup &amp;quot;Virtual Machine Manager&amp;quot; on your (Linux) computer in order to get access to the servers we are about to build. You will need this in order to walk through the installation process for your new servers. Of course, once the install is complete, you can switch to another, traditional form of remote access like [[RDP]] on windows servers or [[ssh]] on *nix servers.&lt;br /&gt;
&lt;br /&gt;
If you want to use &amp;quot;Virtual Machine Manager&amp;quot;, look for a package from your distribution package manager with a name like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;. Once it is installed, add the connections to your &#039;&#039;Anvil!&#039;&#039; nodes. Once that&#039;s done, you&#039;re ready to proceed to the next section!&lt;br /&gt;
&lt;br /&gt;
== A Note on the Following Server Installations ==&lt;br /&gt;
&lt;br /&gt;
We wanted to show as many different server installations as possible. Obviously, it&#039;s unlikely that you will want or need all of the operating we&#039;re about to install. Please feel free to skip over the installation of servers that are not interesting to you.&lt;br /&gt;
&lt;br /&gt;
== Provision Planning ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re going to spend a lot of time provisioning &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. If you plan to skip it, please be sure to refer back to it if you run into questions on a later install.}}&lt;br /&gt;
&lt;br /&gt;
If you recall, when we were planning out our partitions, we&#039;ve already chosen which servers will draw from which storage pools and how big their &amp;quot;hard drives&amp;quot; will be. The last thing to consider is RAM allocation. The servers we&#039;re using to write this tutorial are a little modest in the RAM department with only 24 [[GiB]] of RAM. We need to subtract at least 2 GiB for the host nodes, leaving us with a total of 22 GiB. &lt;br /&gt;
&lt;br /&gt;
That needs to be divided up amongst our eight servers. Now, nothing says you have to use it all, of course. It&#039;s perfectly fine to leave some RAM unallocated for future use. This is really up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s put together a table with the RAM we plan to allocate and summarizing the logical volume we&#039;re going to create for each server. The [[LV]]s will be named after the server they&#039;ll be assigned to with the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_0&amp;lt;/span&amp;gt;. Later, if we add a second &amp;quot;hard drive&amp;quot; to a server, it will have the suffix &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;_1&amp;lt;/span&amp;gt; and so on.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Server&lt;br /&gt;
!RAM (GiB)&lt;br /&gt;
!Storage Pool (VG)&lt;br /&gt;
!LV name&lt;br /&gt;
!LV size&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|150 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|50 GB&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|100 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you plan to set static IP addresses for your servers, now would be a good time to select them, too. It&#039;s not needed, of course, but it certainly can make things easier to have all the details in one place.&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Not to spoil the surprise, but if you plan to not follow this tutorial exactly, please be sure to read [[#Calculating_Free_Space.3B_Converting_GiB_to_MB|the notes in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris100&amp;lt;/span&amp;gt; section]].}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm01-win2008 ==&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_08.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_Svr_2008_R2_64Bit_SP1.ISO root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
  3166720000 100%   65.53MB/s    0:00:46 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3167106674 bytes  received 31 bytes  59198256.17 bytes/sec&lt;br /&gt;
total size is 3166720000  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; to grab the latest version from [https://alt.fedoraproject.org/pub/alt/virtio-win/ their website]. At the time of this writing, the &amp;quot;[https://alt.fedoraproject.org/pub/alt/virtio-win/stable/ stable]&amp;quot; version is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0.1-74&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Being conservative when it comes to servers, my preference is to use the &amp;quot;stable&amp;quot; version.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-04-28 18:01:10--  https://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-74.iso&lt;br /&gt;
Resolving alt.fedoraproject.org (alt.fedoraproject.org)... 209.132.181.27, 209.132.181.23, 209.132.181.24, ...&lt;br /&gt;
Connecting to alt.fedoraproject.org (alt.fedoraproject.org)|209.132.181.27|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 61272064 (58M) [application/octet-stream]&lt;br /&gt;
Saving to: ‘virtio-win-0.1-74.iso’&lt;br /&gt;
&lt;br /&gt;
100%[======================================&amp;gt;] 61,272,064  5.23MB/s   in 15s    &lt;br /&gt;
&lt;br /&gt;
2014-04-28 18:01:26 (3.86 MB/s) - ‘virtio-win-0.1-74.iso’ saved [61272064/61272064]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 3.1G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov  2 10:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--  1 root root  59M Nov 20 15:08 virtio-win-0.1-74.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm01-win2008_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm01-win2008_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm01-win2008_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm01-win2008_0&lt;br /&gt;
  LV Name                vm01-win2008_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                bT0zon-H2LN-0jmi-refA-J0QX-zHjT-nEY7YY&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-02 11:04:44 -0400&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm01-win2008&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm01-win2008.sh&lt;br /&gt;
chmod 755 /shared/provision/vm01-win2008.sh &lt;br /&gt;
vim /shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm01-win2008 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s break it down;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--connect qemu:///system&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; to use the [[QEMU]] hardware emulator (as opposed to [[Xen]], for example) and to install the server on to local node.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm01-win2008&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the name of the server. It is the name we will use in the cluster configuration and whenever we use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools, like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--arch x86_64&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the emulated CPU&#039;s architecture to 64-[[bit]]. This can be used even when you plan to install a 32-bit [[OS]], but not the other way around, of course.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--vcpus 2&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the number of CPU cores to allocate to this server. Here, we&#039;re allocating two CPUs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|We need to make the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers available during the install process. This command is similar to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom&amp;lt;/span&amp;gt; above, but crafted as if it was a disk drive with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;device=cdrom&amp;lt;/span&amp;gt; switch. This helps make sure that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cdrom&amp;lt;/span&amp;gt; above is used as the boot drive. Also note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; option. This is used because, normally, if the ISO was &amp;quot;inserted&amp;quot; into another server&#039;s cd-rom, it would refuse to work here. The nature of ISOs ensures they&#039;re read-only, so we can safely force two or more servers to use the same ISO at the same time.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tweaks the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-manager&amp;lt;/span&amp;gt;&#039;s initial method of running and tunes the hypervisor to try and get the best performance for the server. There are many possible values here for many, many different operating systems. If you run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install --os-variant list&amp;lt;/span&amp;gt; on your node, you will get a full list of available operating systems. If you can&#039;t find your exact operating system, select the one that is the closest match.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor that we want to create a network card using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; &amp;quot;hardware&amp;quot; and that we want it plugged into the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vbr2&amp;lt;/span&amp;gt; bridge. We only need one network card, but if you wanted two or more, simply repeat this command. If you create two or more bridges, you can have different network devices connect to different bridges.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm01-win2008_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finally, this tells the hypervisor to use the [http://www.spice-space.org/ spice] emulated video card. It is a bit simplistic to call it simply a &amp;quot;graphics card&amp;quot;, but that&#039;s close enough for now. Given that this is the last line, we close off the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command with a simple redirection to a log file. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm01-win2008.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm01-win2008&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
One the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm01-win2008.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_01.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_02.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN7\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_05.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_06.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm01-win2008_07.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm01-win2008_a_Highly_Available_Service|Making vm01-win2008 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm02-win2012 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As for drivers; We&#039;re going to use a special kind of emulated [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card for this and our other three windows installs. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
If you have ever installed windows on a newer server, you&#039;re probably already familiar with the process of installing drivers in order to see SCSI and RAID controllers during the boot process. If so, then what we&#039;re going to do here will be no different. If you have never done this before, don&#039;t worry. It&#039;s a fairly simple task.&lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_2012_R2_64-bit_Preview.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
  4128862208 100%   66.03MB/s    0:00:59 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 4129366322 bytes  received 31 bytes  65029391.39 bytes/sec&lt;br /&gt;
total size is 4128862208  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 6.9G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 11 11:28 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 150 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 150000M -n vm02-win2012_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm02-win2012_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm02-win2012_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm02-win2012_0&lt;br /&gt;
  LV Name                vm02-win2012_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                Lnyg1f-kNNV-qjfn-P7X3-LxLw-1Uyh-dfNfL0&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n02.alteeve.ca, 2013-11-11 11:30:55 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                146.48 GiB&lt;br /&gt;
  Current LE             37500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;146.48&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;150 [[GB]]&amp;quot; and &amp;quot;150 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm02-win2012&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm02-win2012.sh&lt;br /&gt;
chmod 755 /shared/provision/vm02-win2012.sh &lt;br /&gt;
vim /shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm02-win2012 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win2k8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm02-win2012&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_2012_R2_64-bit_Preview.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win2k8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is also the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script. At the time of writing, there wasn&#039;t an entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2012&amp;lt;/span&amp;gt;, so we&#039;re using the closest match which is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;win2k8&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm02-win2012_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm02-win2012.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm02-win2012&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm02-win2012.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm02-win2012_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm02-win2012_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm03-win7 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Before we can install the OS, we need to copy the installation media and our driver disk, if needed, and put them in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous two servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Windows_7_Pro_SP1_64bit_OEM_English.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
  3321233408 100%   83.97MB/s    0:00:37 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3321638948 bytes  received 31 bytes  80039493.47 bytes/sec&lt;br /&gt;
total size is 3321233408  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 10G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 11:32 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm03-win7_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm03-win7_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm03-win7_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm03-win7_0&lt;br /&gt;
  LV Name                vm03-win7_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                vgdtEm-aOsU-hatQ-2PxO-BN1e-sGLM-J7NVcn&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 12:08:52 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm03-win7&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm03-win7.sh&lt;br /&gt;
chmod 755 /shared/provision/vm03-win7.sh &lt;br /&gt;
vim /shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm03-win7 \&lt;br /&gt;
  --ram 3072 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm03-win7.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm03-win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 3072&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 3 [[GiB]], which is 3,072 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Windows_7_Pro_SP1_64bit_OEM_English.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm03-win7_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm03-win7.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm03-win7&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm03-win7.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm03-win7_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm03-win7_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm04-win8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our last Microsoft operating system!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation media and our driver disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Windows is licensed software, so you will need to purchase a copy. You can get an [http://technet.microsoft.com/en-US/evalcenter/dn407368 evaluation copy] from Microsoft&#039;s website. In either case, downloading a copy of the installation media is an exercise for you, I am afraid.&lt;br /&gt;
&lt;br /&gt;
As we did for the previous three servers, we&#039;re going to use a special kind of [https://en.wikipedia.org/wiki/SCSI SCSI] controller and a special kind of emulated network card. These are called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;http://www.linux-kvm.org/page/Virtio&amp;lt;/span&amp;gt; devices and they are designed to significantly improve storage and network speeds on [[KVM]] guests. &lt;br /&gt;
&lt;br /&gt;
You can create install media from a physical disk or copy install media using the [[AN!CDB]]&#039;s &amp;quot;Media Connector&amp;quot; function. Of course, you can also copy files to the &#039;&#039;Anvil!&#039;&#039; using standard tools like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;wget&amp;lt;/span&amp;gt; as well. What ever method you prefer, &lt;br /&gt;
&lt;br /&gt;
In my case, I will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rsync&amp;lt;/span&amp;gt; the Windows install ISO from another machine on our network to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt; via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/Win8.1_Enterprise_64-bit_eval.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
  3797866496 100%   62.02MB/s    0:00:58 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3798330205 bytes  received 31 bytes  60773283.78 bytes/sec&lt;br /&gt;
total size is 3797866496  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, we can simply re-use the [[ISO]] we uploaded for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 14G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 12 18:12 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov  1 01:23 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm04-win8_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm04-win8_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm04-win8_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm04-win8_0&lt;br /&gt;
  LV Name                vm04-win8_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                WZIGmp-xkyZ-Q6Qs-ovMP-qr1k-9xC2-PmbcUD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-12 18:13:53 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                97.66 GiB&lt;br /&gt;
  Current LE             25000&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;97.66&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;100 [[GB]]&amp;quot; and &amp;quot;100 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm04-win8&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm04-win8.sh&lt;br /&gt;
chmod 755 /shared/provision/vm04-win8.sh &lt;br /&gt;
vim /shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm04-win8 \&lt;br /&gt;
  --ram 4096 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso \&lt;br /&gt;
  --disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force\&lt;br /&gt;
  --os-variant win7 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm04-win8.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm04-win8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 4 [[GiB]], which is 4,096 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/Win8.1_Enterprise_64-bit_eval.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/virtio-win-0.1-52.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the same as the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; provision script, but this is where the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt; comes in handy. If this ISO was still &amp;quot;mounted&amp;quot; in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-2008&amp;lt;/span&amp;gt;&#039;s cd-rom tray, the install would abort without &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--force&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant win7&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Windows 7.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm04-win8_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm04-win8.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm04-win8&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm04-win8.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
Follow the install process, entering the values you want. When you get to the install target screen, you will see that Windows can&#039;t find the hard drive.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_03.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server doesn&#039;t see its hard drive.]]&lt;br /&gt;
&lt;br /&gt;
This was expected because windows 2008 does not natively support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;. That&#039;s why we used two virtual cd-rom drives and &amp;quot;inserted&amp;quot; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; driver disk into the second drive.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Load Driver&amp;quot; on the bottom right.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_04.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Load Driver&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s &amp;quot;Browse&amp;quot; menu.]]&lt;br /&gt;
&lt;br /&gt;
The driver disk is in the seconds (virtual) cd-rom drive mounted at drive &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e:&amp;lt;/span&amp;gt;. The drivers for Windows 2008 are the same as for Windows 7, so browse to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;E:\WIN8\AMD64&amp;lt;/span&amp;gt; (assuming you are installing the 64-bit version of windows) and click on &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_06.png|thumb|900px|center|Selecting the network and storage drivers for the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server.]]&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you forget to select the network drivers here, you will have to manually install the drivers for the network card after the install has completed.}}&lt;br /&gt;
&lt;br /&gt;
Press and hold the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;control&amp;gt;&amp;lt;/span&amp;gt; key and click on both the &amp;quot;Red Hat VirtIO Ethernet Adapter&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the &amp;quot;Red Hat VirtIO SCSI Controller&amp;quot; drivers. By doing this, we won&#039;t have to install the network card&#039;s drivers later. Click on &amp;quot;Next&amp;quot; and the drivers will be installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_07.png|thumb|900px|center|Now we see the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; server&#039;s hard drive! Complete the install from here as you normally would.]]&lt;br /&gt;
&lt;br /&gt;
Now you can finish installing Windows 2008 just as you would do so on a bare iron server!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm04-win8_08.png|thumb|900px|center|Install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is complete!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm04-win8_a_Highly_Available_Service|Making vm02-win2012 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm05-freebsd9 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Our first non-Microsft OS!&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[http://www.freebsd.org/ FreeBSD] is free software and can be downloaded directly from their website.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /shared/files/&lt;br /&gt;
wget -c ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2013-11-18 15:48:09--  ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
           =&amp;gt; `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039;&lt;br /&gt;
Resolving ftp.freebsd.org... 204.152.184.73, 2001:4f8:0:2::e&lt;br /&gt;
Connecting to ftp.freebsd.org|204.152.184.73|:21... connected.&lt;br /&gt;
Logging in as anonymous ... Logged in!&lt;br /&gt;
==&amp;gt; SYST ... done.    ==&amp;gt; PWD ... done.&lt;br /&gt;
==&amp;gt; TYPE I ... done.  ==&amp;gt; CWD (1) /pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2 ... done.&lt;br /&gt;
==&amp;gt; SIZE FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... 2554132480&lt;br /&gt;
==&amp;gt; PASV ... done.    ==&amp;gt; RETR FreeBSD-9.2-RELEASE-amd64-dvd1.iso ... done.&lt;br /&gt;
Length: 2554132480 (2.4G) (unauthoritative)&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================&amp;gt;] 2,554,132,480  465K/s   in 45m 9s  &lt;br /&gt;
&lt;br /&gt;
2013-11-18 16:33:19 (921 KB/s) - `FreeBSD-9.2-RELEASE-amd64-dvd1.iso&#039; saved [2554132480]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 18 15:48 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 18 16:35 ..&lt;br /&gt;
-rw-r--r--. 1 root root 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm05-freebsd9_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm05-freebsd9_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm05-freebsd9_0 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm05-freebsd9_0&lt;br /&gt;
  LV Name                vm05-freebsd9_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                ioF6jU-pXEQ-wAhm-1zkB-LTDw-PQPG-1SPdkD&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-18 16:41:30 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm05-freebsd9&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm05-freebsd9.sh&lt;br /&gt;
chmod 755 /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
vim /shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm05-freebsd9 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso \&lt;br /&gt;
  --os-variant freebsd8 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm05-freebsd9&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 4096&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/FreeBSD-9.2-RELEASE-amd64-dvd1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant freebsd8&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running FreeBSD 8, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm05-freebsd9_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It also tells it to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; emulated SCSI controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm05-freebsd9.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm05-freebsd9&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm05-freebsd9.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
The entire install process for FreeBSD is normal. It has native support for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so the virtual hard drive and network card will &amp;quot;just work&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_03.png|thumb|900px|center|The hard drive for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_04.png|thumb|900px|center|The network card for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is also found without loading drivers.]]&lt;br /&gt;
&lt;br /&gt;
There is one trick with installing FreeBSD 9 though. The optimization was for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;freebsd8&amp;lt;/span&amp;gt; and one down-side is that FreeBSD won&#039;t reboot automatically after the install finishes and tries to reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; server stays off after the initial install completes.]]&lt;br /&gt;
&lt;br /&gt;
Obviously, the server is not yet in the cluster so we can&#039;t use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm -e&amp;lt;/span&amp;gt;. So instead, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to boot it up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm05-freebsd9_06.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is back up and running.]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm05-freebsd9_a_Highly_Available_Service|Making vm05-freebsd9 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm06-solaris11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Oracle&#039;s Solaris operating system is a commercial [[UNIX]] product. You can download an [http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html?ssSourceSiteId=ocomen evaluation version] from their website. We&#039;ll be using the [[x86]] version.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/sol-11-1111-text-x86.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
sol-11-1111-text-x86.iso&lt;br /&gt;
   450799616 100%  108.12MB/s    0:00:03 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 450854737 bytes  received 31 bytes  69362272.00 bytes/sec&lt;br /&gt;
total size is 450799616  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 17G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 19 17:11 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 19 17:04 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 root root 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n02_vg0&amp;quot; has insufficient free space (23506 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What&#039;s this?!&lt;br /&gt;
&lt;br /&gt;
=== Calculating Free Space; Converting GiB to MB ===&lt;br /&gt;
&lt;br /&gt;
What we have here is, despite our efforts to mitigate the [[GiB]] versus [[GB]] issue, we ran out of space.&lt;br /&gt;
&lt;br /&gt;
This highlights the need for careful design planning. We weren&#039;t careful enough, so now we have to deal with the resources we have left. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s figure out how much space is left in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; volume group.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vgdisplay an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Volume group ---&lt;br /&gt;
  VG Name               an-c05n02_vg0&lt;br /&gt;
  System ID             &lt;br /&gt;
  Format                lvm2&lt;br /&gt;
  Metadata Areas        1&lt;br /&gt;
  Metadata Sequence No  3&lt;br /&gt;
  VG Access             read/write&lt;br /&gt;
  VG Status             resizable&lt;br /&gt;
  Clustered             yes&lt;br /&gt;
  Shared                no&lt;br /&gt;
  MAX LV                0&lt;br /&gt;
  Cur LV                2&lt;br /&gt;
  Open LV               2&lt;br /&gt;
  Max PV                0&lt;br /&gt;
  Cur PV                1&lt;br /&gt;
  Act PV                1&lt;br /&gt;
  VG Size               287.13 GiB&lt;br /&gt;
  PE Size               4.00 MiB&lt;br /&gt;
  Total PE              73506&lt;br /&gt;
  Alloc PE / Size       50000 / 195.31 GiB&lt;br /&gt;
  Free  PE / Size       23506 / 91.82 GiB&lt;br /&gt;
  VG UUID               1h5Gzk-6UX6-xvUo-GWVH-ZMFM-YLop-dYiC7L&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can see that there is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]] left (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; &amp;quot;extents&amp;quot; which are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;4.00&amp;lt;/span&amp;gt; [[MiB]] each).&lt;br /&gt;
&lt;br /&gt;
Knowing this, there are a few ways we could proceed.&lt;br /&gt;
&lt;br /&gt;
# Use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l xx&amp;lt;/span&amp;gt; syntax, which says to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xx&amp;lt;/span&amp;gt; extents. We have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;23,506&amp;lt;/span&amp;gt; extents free, so we could just do &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 23506&amp;lt;/span&amp;gt;&lt;br /&gt;
# Use the &amp;quot;percentage free&amp;quot; method of defining free space. That would be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; which simply uses all remaining free space.&lt;br /&gt;
# Calculate the number of [[MB]] in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; [[GiB]].&lt;br /&gt;
&lt;br /&gt;
The first two are self-evident, so let&#039;s look the 3rd option because math is awesome!&lt;br /&gt;
&lt;br /&gt;
To do this, we need to convert &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;91.82&amp;lt;/span&amp;gt; GiB into bytes. We can get close by simply doing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;(91.82 * (1024 * 1024 * 1024))&amp;lt;/span&amp;gt; (x GiB -&amp;gt; MiB -&amp;gt; KiB = bytes), but this gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590,974,279.68&amp;lt;/span&amp;gt;... The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.82&amp;lt;/span&amp;gt; is not precise enough. If we divide this by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; (number of bytes in a [[MB]]), we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98590.97&amp;lt;/span&amp;gt;. Round down to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,590&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If we take the extent size times free extent count, we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;((23506 * 4) * (1024 * 1024))&amp;lt;/span&amp;gt; (extents free * extent size) converted to MiB -&amp;gt; KiB = bytes) which gives us &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591309824&amp;lt;/span&amp;gt;. Divided by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1,000,000&amp;lt;/span&amp;gt; to get [[MB]] and we have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98591.30&amp;lt;/span&amp;gt;, rounded down we get &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;98,591&amp;lt;/span&amp;gt; [[MB]].&lt;br /&gt;
&lt;br /&gt;
Both methods are pretty darn close, and would end up with the same number of extents used. So now, if we wanted to, we could use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -L 98591M&amp;lt;/span&amp;gt; to keep in line with our previous usage of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
That was fun!&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll be boring and practical and use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; because it&#039;s safe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm06-solaris11_0 /dev/an-c05n02_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm06-solaris11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n02_vg0/vm06-solaris11_0&lt;br /&gt;
  LV Name                vm06-solaris11_0&lt;br /&gt;
  VG Name                an-c05n02_vg0&lt;br /&gt;
  LV UUID                3BQgmu-QHca-0XtE-PRQB-btQc-LmdF-rTVyi5&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-19 15:37:29 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                91.82 GiB&lt;br /&gt;
  Current LE             23506&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we&#039;re a little smaller than we originally planned. A good and simple way to avoid this problem is to plan your storage to have more free space than you think you will need. Storage space is, relatively speaking, fairly cheap.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm06-solaris11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Solaris 11 does not support &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt;, so we will be emulating a simple &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;scsi&amp;lt;/span&amp;gt; storage controller and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;e1000&amp;lt;/span&amp;gt; (Intel 1 Gbps) network card.}}&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm06-solaris11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm06-solaris11.sh &lt;br /&gt;
vim /shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm06-solaris11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/sol-11-1111-text-x86.iso \&lt;br /&gt;
  --os-variant solaris10 \&lt;br /&gt;
  --network bridge=vbr2,model=e1000 \&lt;br /&gt;
  --disk path=/dev/an-c05n02_vg0/vm06-solaris11_0 \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm06-solaris11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/sol-11-1111-text-x86.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant solaris10&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running Solaris 10, which is the closest optimization available.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n02_vg0/vm06-solaris11_0&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--network bridge=vbr2,model=e1000&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to emulate an Intel gigabit network controller.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm06-solaris11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm06-solaris11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm06-solaris11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display: &lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off, but with errors!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; begins, but with (harmless) errors.]]&lt;br /&gt;
&lt;br /&gt;
By default, Solaris tries to use the [[uhci]] USB driver which doesn&#039;t work. It generates the following error;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received&lt;br /&gt;
, this USB UHCI host controller is unusable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is harmless and can be safely ignored. Once the install is complete, we will disabled [[uhci]] by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rem_drv uhci&amp;lt;/span&amp;gt; in the server.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_03.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_04.png|thumb|900px|center|Installation summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm06-solaris11_05.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
What you do from here is entirely up to you and your needs.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm06-solaris11_a_Highly_Available_Service|Making vm06-solaris11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm07-rhel6 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
Red Hat&#039;s Enterprise Linux operating system is a commercial [[Linux]] product. You can download an [http://www.redhat.com/products/enterprise-linux/server/download.html evaluation version] from their website. If you prefer a community-supported version, the [http://www.centos.org/modules/tinycontent/index.php?id=30 CentOS] project is a binary-compatible, free-as-in-beer operating system that you can use here instead.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/rhel-server-6.4-x86_64-dvd.iso root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sending incremental file list&lt;br /&gt;
rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
  3720347648 100%   65.25MB/s    0:00:54 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
sent 3720801890 bytes  received 31 bytes  64709598.63 bytes/sec&lt;br /&gt;
total size is 3720347648  speedup is 1.00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 20G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 20 16:54 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 20 16:50 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 1000 1000 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 50 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 50000M -n vm07-rhel6_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm07-rhel6_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm07-rhel6_0&lt;br /&gt;
  LV Name                vm07-rhel6_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                wBNRrK-N8xL-nJm4-lM0y-a858-ydgC-d0UU04&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-20 16:56:22 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                48.83 GiB&lt;br /&gt;
  Current LE             12500&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice how we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;48.83&amp;lt;/span&amp;gt; [[GiB]]? That is roughly the difference between &amp;quot;50 [[GB]]&amp;quot; and &amp;quot;50 [[GiB]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Creating vm07-rhel6&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm07-rhel6.sh&lt;br /&gt;
chmod 755 /shared/provision/vm07-rhel6.sh &lt;br /&gt;
vim /shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm07-rhel6 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso \&lt;br /&gt;
  --os-variant rhel6 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm07-rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/rhel-server-6.4-x86_64-dvd.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant rhel6&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running RHEL 6.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm07-rhel6_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm07-rhel6.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm07-rhel6&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm07-rhel6.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
It&#039;s no surprise that [[RHEL6]] works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers. Red Hat did write them, after all.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_04.png|thumb|900px|center|Configuring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s hard drive.]]&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_05.png|thumb|900px|center|Performing a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Desktop&amp;lt;/span&amp;gt; install on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_06.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm07-rhel6_07.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Desktop&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm07-rhel6_a_Highly_Available_Service|Making vm07-rhel6 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
=== Making sure RHEL 6 reboots after panic&#039;ing ===&lt;br /&gt;
&lt;br /&gt;
It used to be that [[RHEL]] would halt all CPU activity if the kernel panic&#039;ed. This lack of activity could be used to detect a failure in the guest which &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; could use to trigger recovery of the guest. Now though, RHEL 6 keeps one of the virtual CPUs after after panic&#039;ing, which the node can not differentiate from a normal load.&lt;br /&gt;
&lt;br /&gt;
To ensure that your RHEL guest recovers after panic&#039;ing, you will need to append the following to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/sysctl.conf&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make the server reboot within 5 seconds of a panic.&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make the change take immediate effect, run the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 5 &amp;gt; /proc/sys/kernel/panic&lt;br /&gt;
sysctl -e kernel.panic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kernel.panic = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify that the server will reboot post panic, you can send the following command to your server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=This command will immediately and totally halt your server. It will not recover until it reboots.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If things worked properly, the server will reboot five seconds after issuing this command.&lt;br /&gt;
&lt;br /&gt;
== Provisioning vm08-sles11 ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=This install references steps taken in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[vm01-win2008]]&amp;lt;/span&amp;gt; install. If you skipped it, you may wish to look at it to get a better idea of some of the steps performed here.}}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_01.png|thumb|500px|right|View of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s desktop.]]&lt;br /&gt;
&lt;br /&gt;
The last server in our tutorial!&lt;br /&gt;
&lt;br /&gt;
SUSE&#039;s Linux Enterprise Server is a commercial [[Linux]] product. You can download an [https://www.suse.com/products/server/eval.html evaluation version] from their website.&lt;br /&gt;
&lt;br /&gt;
As always, we need to copy the installation disk into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/files&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync -av --progress /data0/VMs/files/SLES-11-SP3-DVD-x86_64-GM-DVD* root@10.255.50.1:/shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@10.255.50.1&#039;s password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
  3362783232 100%   60.94MB/s    0:00:52 (xfer#1, to-check=1/2)&lt;br /&gt;
SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
  5311318016 100%   73.66MB/s    0:01:08 (xfer#2, to-check=0/2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ve planned to run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will use that node for the provisioning stage.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /shared/files/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
total 28G&lt;br /&gt;
drwxr-xr-x. 2 root root 3.8K Nov 21 01:19 .&lt;br /&gt;
drwxr-xr-x. 6 root root 3.8K Nov 21 01:12 ..&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 2.4G Nov 18 16:33 FreeBSD-9.2-RELEASE-amd64-dvd1.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.5G Mar  4  2013 rhel-server-6.4-x86_64-dvd.iso&lt;br /&gt;
-rw-------. 1 1000 1000 3.2G Oct 30 17:52 SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&lt;br /&gt;
-rw-------. 1 1000 1000 5.0G Oct 30 18:25 SLES-11-SP3-DVD-x86_64-GM-DVD2.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 430M Sep 28  2012 sol-11-1111-text-x86.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu  56M Jan 22  2013 virtio-win-0.1-52.iso&lt;br /&gt;
-rw-r--r--. 1 qemu qemu 3.6G Oct 31 01:44 Win8.1_Enterprise_64-bit_eval.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.9G Oct  2 22:31 Windows_2012_R2_64-bit_Preview.iso&lt;br /&gt;
-rw-rw-rw-. 1 qemu qemu 3.1G Jun  8  2011 Windows_7_Pro_SP1_64bit_OEM_English.iso&lt;br /&gt;
-rw-rw-r--. 1 qemu qemu 3.0G Oct 14  2011 Windows_Svr_2008_R2_64Bit_SP1.ISO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ok, we&#039;re ready!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s Storage ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=Earlier, we used &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; to examine our free space and create our DRBD partitions. Unfortunately, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; shows sizes in [[GB]] (base 10) where LVM uses [[GiB]] (base 2). If we used LVM&#039;s &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;xxG&amp;lt;/span&amp;gt; size notation, it will use more space than we expect, relative to our planning in the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;parted&amp;lt;/span&amp;gt; stage. LVM doesn&#039;t allow specifying new LV sizes in [[GB]] instead of [[GiB]], so here we will specify sizes in [[MiB]] to help narrow the differences. You can read more about this issue [[TLUG_Talk:_Storage_Technologies_and_Theory#Capacity.2C_or_A_Lesson_in_Marketing|here]].}}&lt;br /&gt;
&lt;br /&gt;
Creating the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s &amp;quot;hard drive&amp;quot; is a simple process. Recall that we want a 100 [[GB]] logical volume carved from the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01_vg0&amp;lt;/span&amp;gt; volume group (the &amp;quot;storage pool&amp;quot; for servers designed to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;). Knowing this, the command to create the new LV is below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 100000M -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Volume group &amp;quot;an-c05n01_vg0&amp;quot; has insufficient free space (19033 extents): 25000 required.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ve run into the same problem that we hit with [[#Calculating_Free_Space.3B_Converting_GiB_to_MB]]. So we&#039;ve learned our lesson and will switch to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;lvcreate -l 100%FREE&amp;lt;/span&amp;gt; to use up the free space that remains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -l 100%FREE -n vm08-sles11_0 /dev/an-c05n01_vg0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  Logical volume &amp;quot;vm08-sles11_0&amp;quot; created&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvdisplay /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  --- Logical volume ---&lt;br /&gt;
  LV Path                /dev/an-c05n01_vg0/vm08-sles11_0&lt;br /&gt;
  LV Name                vm08-sles11_0&lt;br /&gt;
  VG Name                an-c05n01_vg0&lt;br /&gt;
  LV UUID                9J9eO1-BhTe-Ee8X-zP5u-UY5S-Y7AB-Ql0hhI&lt;br /&gt;
  LV Write Access        read/write&lt;br /&gt;
  LV Creation host, time an-c05n01.alteeve.ca, 2013-11-21 01:23:16 -0500&lt;br /&gt;
  LV Status              available&lt;br /&gt;
  # open                 0&lt;br /&gt;
  LV Size                74.35 GiB&lt;br /&gt;
  Current LE             19033&lt;br /&gt;
  Segments               1&lt;br /&gt;
  Allocation             inherit&lt;br /&gt;
  Read ahead sectors     auto&lt;br /&gt;
  - currently set to     256&lt;br /&gt;
  Block device           253:8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our compounding error in planning has reduced this server&#039;s planned space down to a mere &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;74.35&amp;lt;/span&amp;gt; [[GiB]]!&lt;br /&gt;
&lt;br /&gt;
=== Creating vm08-sles11&#039;s virt-install Call ===&lt;br /&gt;
&lt;br /&gt;
Now with the storage created, we can craft the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt; command. we&#039;ll put this into a file under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/provision/&amp;lt;/span&amp;gt; directory for future reference. Let&#039;s take a look at the command, then we&#039;ll discuss what the switches are for.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch /shared/provision/vm08-sles11.sh&lt;br /&gt;
chmod 755 /shared/provision/vm08-sles11.sh &lt;br /&gt;
vim /shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-install --connect qemu:///system \&lt;br /&gt;
  --name vm08-sles11 \&lt;br /&gt;
  --ram 2048 \&lt;br /&gt;
  --arch x86_64 \&lt;br /&gt;
  --vcpus 2 \&lt;br /&gt;
  --cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso \&lt;br /&gt;
  --disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force \&lt;br /&gt;
  --os-variant sles11 \&lt;br /&gt;
  --network bridge=vbr2,model=virtio \&lt;br /&gt;
  --disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio \&lt;br /&gt;
  --graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note|1=Don&#039;t use tabs to indent the lines.}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the differences from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Switch&lt;br /&gt;
!Descriptions&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name vm08-sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This is the name we&#039;re going to use for this server in the cluster and with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--ram 2048&amp;lt;/span&amp;gt;&lt;br /&gt;
|This sets the amount of RAM, in [[MiB]], to allocate to this server. Here, we&#039;re allocating 2 [[GiB]], which is 2,048 MiB.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--cdrom /shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor to create a cd-rom (dvd-rom) drive and to &amp;quot;insert&amp;quot; the specified ISO as if it was a physical disk. This will be the initial boot device, too.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/shared/files/SLES-11-SP3-DVD-x86_64-GM-DVD2.iso,device=cdrom --force&amp;lt;/span&amp;gt;&lt;br /&gt;
|SLES 11 has two install DVDs. This tells the hypervisor to create a second DVD drive and to insert &#039;Disc 2&#039; into it.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--os-variant sles11&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the KVM hypervisor to optimize for running SLES 11.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--disk path=/dev/an-c05n01_vg0/vm08-sles11_0,bus=virtio&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the hypervisor what logical volume to use for the server&#039;s &amp;quot;hard drive&amp;quot;. It does not specify any &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bus=&amp;lt;/span&amp;gt;, unlike the other servers.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--graphics spice &amp;gt; /var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt;&lt;br /&gt;
|We&#039;re using a new log file for our bash redirection. Later, if we want to examine the install process, we can review &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-install_vm08-sles11.log&amp;lt;/span&amp;gt; for details on the install process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initializing vm08-sles11&#039;s Install ===&lt;br /&gt;
&lt;br /&gt;
On your [[AN!CDB|dashboard]] or workstation, open the &amp;quot;Virtual Machine Manager&amp;quot; and connect to both nodes.&lt;br /&gt;
&lt;br /&gt;
We can install any server from either node. However, we know that each server has a preferred host, so it&#039;s sensible to use that host for the installation stage. In the case of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;, the preferred host is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we&#039;ll use it to kick off the install. &lt;br /&gt;
&lt;br /&gt;
Once the install begins, the new server should appear in &amp;quot;Virtual Machine Manager&amp;quot;. Double-click on it and you will see that the new server is booting off of the install cd-rom. We&#039;re installing Windows, so that will begin the install process.&lt;br /&gt;
&lt;br /&gt;
Time to start the install!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/shared/provision/vm08-sles11.sh &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cannot open display:&lt;br /&gt;
Run &#039;virt-viewer --help&#039; to see a full list of available command line options&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And it&#039;s off!&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_02.png|thumb|900px|center|Installation of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; begins!]]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll get prompted to check the installation media before starting the install. Given that we don&#039;t have a physical disk to scratch, it&#039;s safe to skip that.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_03.png|thumb|900px|center|No need to check for defects in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s installation &amp;quot;disc&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
SLES 11 works flawlessly with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virtio&amp;lt;/span&amp;gt; drivers.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_04.png|thumb|900px|center|Install summary for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
As we saw with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;, the post install reboot doesn&#039;t actually reboot.&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_05.png|thumb|900px|center|After the first stage of the install of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; leaves the server off.]]&lt;br /&gt;
&lt;br /&gt;
Easy enough to boot it back up though.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh start vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:AN!Cluster_Tutorial_2-vm08-sles11_08.png|thumb|900px|center|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is done!]]&lt;br /&gt;
&lt;br /&gt;
If you did a &amp;quot;Physical Machine&amp;quot; install, you will get the &amp;quot;First Boot&amp;quot; menus. Once done, you&#039;re new server is ready.&lt;br /&gt;
&lt;br /&gt;
That is all eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you wish, jump to [[#Making_vm08-sles11_a_Highly_Available_Service|Making vm08-sles11 a Highly Available Service]] now to immediately add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; to the cluster manager.}}&lt;br /&gt;
&lt;br /&gt;
Eight of eight servers built!&lt;br /&gt;
&lt;br /&gt;
= Making Our VMs Highly Available Cluster Services =&lt;br /&gt;
&lt;br /&gt;
We&#039;re ready to start the final step; Making our VMs highly available cluster services! This involves two main steps:&lt;br /&gt;
&lt;br /&gt;
* Creating two new, ordered fail-over Domains; One with each node as the highest priority.&lt;br /&gt;
* Adding our VMs as services, one is each new fail-over domain.&lt;br /&gt;
&lt;br /&gt;
== Creating the Ordered Fail-Over Domains ==&lt;br /&gt;
&lt;br /&gt;
We have planned for two VMs, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-dev&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-web&amp;lt;/span&amp;gt; to normally run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; while &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-db&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-ms&amp;lt;/span&amp;gt; to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Of course, should one of the nodes fail, the lost VMs will be restarted on the surviving node. For this, we will use an ordered fail-over domain.&lt;br /&gt;
&lt;br /&gt;
The idea here is that each new fail-over domain will have one node with a higher priority than the other. That is, one will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; with the highest priority and the other will have &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as the highest. This way, VMs that we want to normally run on a given node will be added to the matching fail-over domain.&lt;br /&gt;
&lt;br /&gt;
{{note|1=With 2-node clusters like ours, ordering is arguably useless. It&#039;s used here more to introduce the concepts rather than providing any real benefit. If you want to make production clusters unordered, you can. Just remember to run the VMs on the appropriate nodes when both are on-line.}}&lt;br /&gt;
&lt;br /&gt;
Here are the two new domains we will create in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/cluster/cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			...&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The two major pieces of the puzzle here are the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomain ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ordered=&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; attribute and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;failoverdomainnode ...&amp;gt;&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;priority=&amp;quot;x&amp;quot;&amp;lt;/span&amp;gt; attributes. The former tells the cluster that there is a preference for which node should be used when both are available. The later, which is the difference between the two new domains, tells the cluster which specific node is preferred.&lt;br /&gt;
&lt;br /&gt;
The first of the new fail-over domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt;. Any service placed in this domain will prefer to run on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, as its priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; is higher than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&#039;s priority of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;. The second of the new domains is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; which reverses the preference, making &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; preferred over &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; with the new domain, and the version updated to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s validate it now, but we won&#039;t bother to push it out just yet.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, now to create the new VM services!&lt;br /&gt;
&lt;br /&gt;
== Making vm01-win2008 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you jumped straight here after provisioning the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server, please [[#Making_Our_VMs_Highly_Available_Cluster_Services|jump back]] and be sure you&#039;ve created the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; fail-over domains.}}&lt;br /&gt;
&lt;br /&gt;
The final piece of the puzzle, and the whole purpose of this exercise is in sight!&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm01-win2008|vm01-win2008]]&amp;lt;/span&amp;gt;, as it was the first server we provisioned.&lt;br /&gt;
&lt;br /&gt;
There is a special resource agent for virtual machines which use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:&amp;lt;/span&amp;gt; service prefix in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. We will need to create one of these services for each server that will be managed by the &#039;&#039;Anvil!&#039;&#039; platform.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm01-win2008 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
In order for the cluster to manage a server, it must know where to find the &amp;quot;definition&amp;quot; file that describes the virtual machine and its hardware. When the server was created with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt-install&amp;lt;/span&amp;gt;, it saved this definition file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/libvirt/qemu/vm01-win2008.xml&amp;lt;/span&amp;gt;. If this was a single-host setup, that would be fine.&lt;br /&gt;
&lt;br /&gt;
In our case though, there are two reasons we need to move this.&lt;br /&gt;
&lt;br /&gt;
# We want both nodes to be able to see the definition file and we want a single place to make updates.&lt;br /&gt;
# Normal &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tools are not cluster-aware, so we don&#039;t want them to see our server except when it is running.&lt;br /&gt;
&lt;br /&gt;
To address the first issue, we&#039;re going to use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to write out the definition file for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. We&#039;ll use a simple bash redirection to write this to a file on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; where both nodes will be able to read it. Also, being stored on our GFS2 partition, any change made to the file will immediately be seen by both nodes.&lt;br /&gt;
&lt;br /&gt;
To address the second issue, we will &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;&amp;quot; the server. This effectively deletes it from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;, so when a server is off (or running elsewhere), tools like &amp;quot;Virtual Machine Manager&amp;quot; will not see it. This helps avoid problems like a user, unaware that the server is running on another node, starting it on the first. The cluster will still be able to start and stop the server just fine, so there is no worry about losing your new server. The cluster tools, being cluster-aware obviously, are smart enough to not try and boot a server on one node when it&#039;s already running on another.&lt;br /&gt;
&lt;br /&gt;
So the first step is to dump the server&#039;s definition file.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; tool, to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--all&amp;lt;/span&amp;gt; option is needed to show us servers that are defined but powered off. Normally, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh list&amp;lt;/span&amp;gt; only shows running servers, so it&#039;s a good habit to always use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--list&amp;lt;/span&amp;gt; to be sure you have a complete view of your system.&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is running. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots. It changes frequently and you need not worry about it. its principal purpose to be unique among running servers.&lt;br /&gt;
&lt;br /&gt;
So before we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt; the server, we first need to record its definition. We can do that with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh dumpxml $vm&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain type=&#039;kvm&#039; id=&#039;1&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;vm01-win2008&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;uuid&amp;gt;d06381fc-8033-9768-3a28-b751bcc00716&amp;lt;/uuid&amp;gt;&lt;br /&gt;
  &amp;lt;memory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/memory&amp;gt;&lt;br /&gt;
  &amp;lt;currentMemory unit=&#039;KiB&#039;&amp;gt;3145728&amp;lt;/currentMemory&amp;gt;&lt;br /&gt;
  &amp;lt;vcpu placement=&#039;static&#039;&amp;gt;2&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch=&#039;x86_64&#039; machine=&#039;rhel6.4.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;boot dev=&#039;hd&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
  &amp;lt;features&amp;gt;&lt;br /&gt;
    &amp;lt;acpi/&amp;gt;&lt;br /&gt;
    &amp;lt;apic/&amp;gt;&lt;br /&gt;
    &amp;lt;pae/&amp;gt;&lt;br /&gt;
  &amp;lt;/features&amp;gt;&lt;br /&gt;
  &amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;timer name=&#039;rtc&#039; tickpolicy=&#039;catchup&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/clock&amp;gt;&lt;br /&gt;
  &amp;lt;on_poweroff&amp;gt;destroy&amp;lt;/on_poweroff&amp;gt;&lt;br /&gt;
  &amp;lt;on_reboot&amp;gt;restart&amp;lt;/on_reboot&amp;gt;&lt;br /&gt;
  &amp;lt;on_crash&amp;gt;restart&amp;lt;/on_crash&amp;gt;&lt;br /&gt;
  &amp;lt;devices&amp;gt;&lt;br /&gt;
    &amp;lt;emulator&amp;gt;/usr/libexec/qemu-kvm&amp;lt;/emulator&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/Windows_Svr_2008_R2_64Bit_SP1.ISO&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hda&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-0-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;0&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;file&#039; device=&#039;cdrom&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source file=&#039;/shared/files/virtio-win-0.1-52.iso&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;hdc&#039; bus=&#039;ide&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;readonly/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0-1-0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;drive&#039; controller=&#039;0&#039; bus=&#039;1&#039; target=&#039;0&#039; unit=&#039;0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;disk type=&#039;block&#039; device=&#039;disk&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&#039;qemu&#039; type=&#039;raw&#039; cache=&#039;none&#039; io=&#039;native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&#039;/dev/an-c05n01_vg0/vm01-win2008_0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vda&#039; bus=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;virtio-disk0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x04&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;usb&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;usb0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;controller type=&#039;ide&#039; index=&#039;0&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;ide0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x01&#039; function=&#039;0x1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/controller&amp;gt;&lt;br /&gt;
    &amp;lt;interface type=&#039;bridge&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;mac address=&#039;52:54:00:8e:67:32&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;source bridge=&#039;vbr2&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&#039;vnet0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;virtio&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;net0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x03&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/interface&amp;gt;&lt;br /&gt;
    &amp;lt;serial type=&#039;pty&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/serial&amp;gt;&lt;br /&gt;
    &amp;lt;console type=&#039;pty&#039; tty=&#039;/dev/pts/3&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;source path=&#039;/dev/pts/3&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;target type=&#039;serial&#039; port=&#039;0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;serial0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/console&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;tablet&#039; bus=&#039;usb&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;input0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;graphics type=&#039;spice&#039; port=&#039;5900&#039; autoport=&#039;yes&#039; listen=&#039;127.0.0.1&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;listen type=&#039;address&#039; address=&#039;127.0.0.1&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/graphics&amp;gt;&lt;br /&gt;
    &amp;lt;video&amp;gt;&lt;br /&gt;
      &amp;lt;model type=&#039;qxl&#039; ram=&#039;65536&#039; vram=&#039;65536&#039; heads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;video0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x02&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/video&amp;gt;&lt;br /&gt;
    &amp;lt;memballoon model=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
      &amp;lt;alias name=&#039;balloon0&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x05&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/memballoon&amp;gt;&lt;br /&gt;
  &amp;lt;/devices&amp;gt;&lt;br /&gt;
  &amp;lt;seclabel type=&#039;dynamic&#039; model=&#039;selinux&#039; relabel=&#039;yes&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;unconfined_u:system_r:svirt_t:s0:c68,c367&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;imagelabel&amp;gt;unconfined_u:object_r:svirt_image_t:s0:c68,c367&amp;lt;/imagelabel&amp;gt;&lt;br /&gt;
  &amp;lt;/seclabel&amp;gt;&lt;br /&gt;
&amp;lt;/domain&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is your server&#039;s hardware!&lt;br /&gt;
&lt;br /&gt;
Notice how it shows the mounted cd-roms? You can also see the [[MAC]] address assigned to the network card, the RAM and CPU cores allocated and other details. Pretty awesome!&lt;br /&gt;
&lt;br /&gt;
So let&#039;s re-run the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dumpxml&amp;lt;/span&amp;gt; file, but this time, we&#039;ll use a bash redirection to save the output to a file in our &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definition&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm01-win2008 &amp;gt; /shared/definitions/vm01-win2008.xml&lt;br /&gt;
ls -lah /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 11:54 /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent! Now, as we will see in a moment, the cluster will be able to use this to start, stop, migrate and recover the server.&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm01-win2008.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm01-win2008 Service ===&lt;br /&gt;
&lt;br /&gt;
As we discussed earlier, we are now going to create a new service for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; resource agent.&lt;br /&gt;
&lt;br /&gt;
This element will have a child element that tells the cluster to give servers up to 30 minutes to shut down. Normally, the cluster will wait for two minutes after calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; against a server. For privacy reasons, there is not way for the cluster to know what is happening inside the server. So after the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;stop&amp;lt;/span&amp;gt; timeout expires, the node is considered failed and is forced off. The problem is that windows often queues updates to be installed during the shut down, so it can take a very long time to turn off. We don&#039;t want to risk &amp;quot;pulling the plug&amp;quot; on a windows machine that is being updated, of course, so we will tell the cluster to be very patient.&lt;br /&gt;
&lt;br /&gt;
{{note|1=It is a good idea to set your windows servers to download updates but not install them until an admin says to do so. This way, there is less chance of problem because the admin can do a reboot to install the updates during a maintenance window. It also avoids false-decleration of server failure.}}&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12&amp;lt;/span&amp;gt; and take a look at the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at each of the attributes now;&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;&lt;br /&gt;
|This must match the name we created the VM with (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--name ...&amp;lt;/span&amp;gt; value when we provisioned the VM). In this case, that is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. This is the name that will be passed to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm.sh&amp;lt;/span&amp;gt; resource agent when managing this service, and it will be the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;name&amp;gt;.xml&amp;lt;/span&amp;gt; used when looking under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path=...&amp;lt;/span&amp;gt; for the VM&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;domain&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster to manage the VM using the given fail-over domain. We built &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage pool, so this server will be assigned to the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; domain. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster where to look for the server&#039;s definition file. &#039;&#039;&#039;Do not&#039;&#039;&#039; include the actual file name, just the path. The cluster takes this path, appends the server&#039;s name and then appends &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.xml&amp;lt;/span&amp;gt; in order to find the server&#039;s definition file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the cluster &#039;&#039;not&#039;&#039; to start the server automatically. This is needed because, if this was &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;, the cluster will try to start the server and the storage at the same time. It takes a few moments for the storage to start, and by the time it did, the server service would have failed.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;exclusive&amp;lt;/span&amp;gt;&lt;br /&gt;
|As we saw with the storage services, we want to ensure that this service &#039;&#039;&#039;is not&#039;&#039;&#039; exclusive. If it were, starting the VM would stop storage/&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt; and prevent other servers from running on the node. This would be a bad thing™.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;&lt;br /&gt;
|This tells the &#039;&#039;Anvil!&#039;&#039; what to do when the service fails. We are setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt;, so the cluster will try to restart the server on the same node it was on when it failed. The alternative is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;, which would instead start the server on another node. More about this next.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt;&lt;br /&gt;
|When a server fails, it is possible that it is because there is a subtle problem on the host node itself. So this attribute allows us to set a limit on how many times a server will be allowed to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart&amp;lt;/span&amp;gt; before giving up and switching to a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy. We&#039;re setting this to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;, which means that if a server is restarted twice, the third failure will trigger a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restart_expire_time&amp;lt;/span&amp;gt;&lt;br /&gt;
|If we let the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;max_restarts&amp;lt;/span&amp;gt; failure count increment indefinitely, than a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; policy becomes inevitable. To account for this, we use this attribute to tell the &#039;&#039;Anvil!&#039;&#039; to &amp;quot;forget&amp;quot; a restart after the defined number of seconds. We&#039;re using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds (ten minutes). So if a server fails, the failure count increments from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;. After &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; seconds though, the restart is &amp;quot;forgotten&amp;quot; and the failure count returns to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;. Said another way, a server will have to fail three times in ten minutes to trigger the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;relocate&amp;lt;/span&amp;gt; recovery policy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So let&#039;s take a look at the final, complete &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s now take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:29:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;? That is because of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;autostart=&amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thankfully, the cluster is smart enough that we can tell it to start the service and it will see the server is already running and not actually do anything. So we can do this next step safely while the server is running.&lt;br /&gt;
&lt;br /&gt;
The trick, of course, is to be sure to tell the cluster to start the server on the right cluster node.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; once more to verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is, in fact, still on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent. So now to tell the cluster to begin managing the server, we&#039;re use a program called &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. It takes two switches in this case:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-e&amp;lt;/span&amp;gt;; &amp;quot;enable&amp;quot; the service&lt;br /&gt;
* &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-m&amp;lt;/span&amp;gt;; do the action on the named member.&lt;br /&gt;
&lt;br /&gt;
We can run &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; from any node in the cluster. For now though, lets stick to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; that the server is now under cluster control.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 12:37:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking good!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;. Windows 2008 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 13:36:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Windows occasionally ignores ACPI power button events. In other cases, some programs will block the shut-down. In either case, the server will not actually shut down. It&#039;s a good habit to connect to the server and make sure it shuts down when you disable the service. If it does not shut down on its own, use the operating system&#039;s power off feature.}}&lt;br /&gt;
&lt;br /&gt;
As we expected. So now, &amp;quot;press the server&#039;s power button&amp;quot; using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We have to do it this way because, if the server stops any other way, the cluster will treat it as a failure and boot it right back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:11:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
Note the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt;; That tells rgmanager to start the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service on the preferred host. It&#039;s a nice habit to get into as it will ensure the server always boots on the preferred node, when possible.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What the deuce!?&lt;br /&gt;
&lt;br /&gt;
=== Solving vm01-win2008 &amp;quot;Failure to Enable&amp;quot; Error ===&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at the log file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:43 an-c05n01 rgmanager[2921]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /var/log/message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Nov 11 16:16:43 an-c05n02 rgmanager[2864]: Recovering failed service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: #68: Failed to start vm:vm01-win2008; return value: 1&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Stopping service vm:vm01-win2008&lt;br /&gt;
Nov 11 16:16:44 an-c05n02 rgmanager[2864]: Service vm:vm01-win2008 is recovering&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, we&#039;ll see that the server is stuck in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;recovery&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:16:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            none                                       recovering    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is why we saw the &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;start on vm &amp;quot;vm01-win2008&amp;quot; returned 1 (generic error)&amp;lt;/span&amp;gt;&amp;quot; message on both nodes. The cluster tried to enable it on the preferred host first, because of the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch, that failed so it tried to enable it on the second node and that also failed. &lt;br /&gt;
&lt;br /&gt;
The first step to diagnosing the problem is to disable the service in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and then manually trying to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 11 16:17:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now the cluster is no longer trying to touch the server. Lets start it manually. As always, verify the state of things. In this case, we&#039;ll double-check that the server really didn&#039;t start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s for sure off, so let&#039;s try to start it. As you can see above, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; server is not shown as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;shut off&amp;lt;/span&amp;gt; because we &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;undefine&amp;lt;/span&amp;gt;d it. So to start it, we need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt; option and specify the definition file manually.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh create &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 created from /shared/definitions/vm01-win2008.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 10    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So now we know that the server itself is fine. Let&#039;s shut down the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;. Note that it will take a minute for the server to gracefully shut down.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh shutdown vm01-win2008 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm01-win2008 is being shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a likely cause of problems is an [[SELinux]] denial. Let&#039;s verify that SELinux is, in fact, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enforcing&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is. So to test, let&#039;s temporarily put SELinux into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;permissive&amp;lt;/span&amp;gt; mode and see if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; starts working.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bingo! So we&#039;ve SELinux appears to be the problem.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s disable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt;, re-enable SELinux and then try to debug SELinux.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 1&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /selinux&lt;br /&gt;
Current mode:                   enforcing&lt;br /&gt;
Mode from config file:          enforcing&lt;br /&gt;
Policy version:                 24&lt;br /&gt;
Policy from config file:        targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re back to where it fails. We will now want to look for errors. SELinux writes log entries to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/audit/audit.log&amp;lt;/span&amp;gt;, however, by default, many things are set to not logged (set to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; in SELinux parlance). This includes cluster related issues. So to temporarily enable complete logging, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semodule&amp;lt;/span&amp;gt; command to tell it to log all messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# no output, but it takes a while to complete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we will &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail -f /var/log/audit/audit.log&amp;lt;/span&amp;gt; and try again to start the server using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;. We expect it will fail, but the log messages will be useful. Once it fails, we&#039;ll immediately disable it again. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm01-win2008...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Looking at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;audit.log&amp;lt;/span&amp;gt;, we see;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1384209306.795:2768): avc:  denied  { search } for  pid=24850 comm=&amp;quot;virsh&amp;quot; name=&amp;quot;/&amp;quot; dev=dm-0 ino=22 scontext=unconfined_u:system_r:xm_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=dir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s complaining about the device &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; and specifically about the [[inode]] &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;. If you recall from when we setup the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; partition, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dm-0&amp;lt;/span&amp;gt; was a &amp;quot;device mapper&amp;quot; device. Let&#039;s see what this is.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lah /dev/mapper/ | grep dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
lrwxrwxrwx.  1 root root      7 Nov  3 12:14 an--c05n01_vg0-shared -&amp;gt; ../dm-0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the device mapper name for the [[LV]] we created for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. Knowing this, let&#039;s search &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; for what is at [[inode]] number &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
find /shared -inum 22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So inode &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt; is the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; directory itself. So lets look at the SELinux context using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-Z&amp;lt;/span&amp;gt; switch.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:file_t:s0      .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:file_t:s0  provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can see that the current context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; (the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt; entry above) is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;system_u:object_r:file_t:s0&amp;lt;/span&amp;gt;. This isn&#039;t permissive enough, so we need to fix it. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_t&amp;lt;/span&amp;gt; context should be good enough as it allows reads from files under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{{note|1=If you use a program other than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; that tries to manipulate the files in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;, you may need to use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virt_etc_rw_t&amp;lt;/span&amp;gt; context as it allows read/write permissions.}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll need to make this change on &#039;&#039;&#039;both&#039;&#039;&#039; nodes. We&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;semanage&amp;lt;/span&amp;gt; to make the change followed by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;restorecon&amp;lt;/span&amp;gt; to make sure the changes remain in case the file system is ever re-labelled.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t virt_etc_t &#039;/shared(/.*)?&#039; &lt;br /&gt;
restorecon -r /shared&lt;br /&gt;
ls -laZ /shared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:virt_etc_t:s0  .&lt;br /&gt;
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 archive&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 definitions&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 files&lt;br /&gt;
drwxr-xr-x. root root unconfined_u:object_r:virt_etc_t:s0 provision&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We told SELinux to ignore the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;dontaudit&amp;lt;/span&amp;gt; option earlier. We&#039;ll want to undo this so that our logs don&#039;t get flooded.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# No output, but it will take a while to return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If all went well, we should now be able to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt;to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm01-win2008&amp;lt;/span&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm01-win2008&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm01-win2008...Success&lt;br /&gt;
vm:vm01-win2008 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
=== Testing vm01-win2008 Live Migration ===&lt;br /&gt;
&lt;br /&gt;
One of the most useful features of the &#039;&#039;Anvil!&#039;&#039; is the ability to &amp;quot;push&amp;quot; a running server from one node to another. This can be done without interrupting users, so it allows maintenance of nodes in the middle of work days. Upgrades, maintenance and repairs can be done without scheduling maintenance windows!&lt;br /&gt;
&lt;br /&gt;
As always, lets take a look at where things are right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:15:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that the cluster&#039;s view is accurate.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exactly what we expected.&lt;br /&gt;
&lt;br /&gt;
Now, to live-migrate a server, we will use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; with the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-M&amp;lt;/span&amp;gt; (note the capitalization). This tells &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; to migrate, instead of relocated, the service to the target cluster member.&lt;br /&gt;
&lt;br /&gt;
Seeing as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; is currently on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll migrate it over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you get an error like &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Failed; service running on original owner&amp;lt;/span&amp;gt;, you may not have your [[#Configuring_iptables|firewall]] configured properly. Alternately, you may have run into [[2-Node_Red_Hat_KVM_Cluster_Tutorial_-_Troubleshooting#.5Bvm.5D_error:_internal_error_Attempt_to_migrate_guest_to_the_same_host_.7Buuid.7D|mainboards with matching UUIDs]].}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 14:57:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you were logged into the server, you would have noticed than any running appications, including network applications, would have not been effected in any way.&lt;br /&gt;
&lt;br /&gt;
How cool is that?&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll push it back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 14 15:02:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As always, we can confirm this worked with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Very cool.&lt;br /&gt;
&lt;br /&gt;
== Making vm02-win2012 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm02-win2012|vm02-win2012]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm02-win2012 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Recall that we provisioned &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, so we will have to use that node for the next step.}}&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. Recall that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Id&amp;lt;/span&amp;gt; is a simple integer that increments each time a server boots.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm02-win2012 &amp;gt; /shared/definitions/vm02-win2012.xml&lt;br /&gt;
ls -lah /shared/definitions/vm02-win2012.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 13:03 /shared/definitions/vm02-win2012.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm02-win2012.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. This will ensure that tools like &amp;quot;Virtual Machine Manager&amp;quot; will not know about our servers except when they are running on the node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm02-win2012 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm02-win2012 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;13&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;13&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you&#039;ve been following along, this will be the first time we&#039;ve pushed a change to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. So we&#039;ll need to enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ricci&amp;lt;/span&amp;gt; user&#039;s password on both nodes.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n02.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
You have not authenticated to the ricci daemon on an-c05n01.alteeve.ca&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:08:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:09:00 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{{note|1=To show that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; can be used anywhere, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to enable the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:29:12 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm02-win2012 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:35:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;re flipping to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, but we don&#039;t have to. The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disable&amp;lt;/span&amp;gt; command is smart enough to know where the server is running and disable it on the appropriate node.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm02-win2012...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm02-win2012&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 13:36:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{{note|1=We&#039;ll go back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; so that we can see how the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;-F&amp;lt;/span&amp;gt; switch is, in fact, smart enough to start the server on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm02-win2012&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm02-win2012...Success&lt;br /&gt;
vm:vm02-win2012 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SELinux fix [[#Solving_vm01-win2008_Failure_to_Enable_Error|from before]] worked for this server, too! You can verify this by disabling the server and re-running the above command on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:08:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@an-c05n01 ~]# virsh list --all&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 6     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:13:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
== Making vm03-win7 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm03-win7|vm03-win7]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm03-win7 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm03-win7 &amp;gt; /shared/definitions/vm03-win7.xml&lt;br /&gt;
ls -lah /shared/definitions/vm03-win7.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 14:21 /shared/definitions/vm03-win7.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm03-win7.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm03-win7 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm03-win7 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. This time though, because this server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;14&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:27:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 3     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:01 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm03-win7 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:29:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm03-win7...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:30:32 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm03-win7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm03-win7...Success&lt;br /&gt;
vm:vm03-win7 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:43:29 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:56:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
 4     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 14:59:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 3     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm04-win8 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm04-win8|vm04-win8]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm04-win8 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm04-win8 &amp;gt; /shared/definitions/vm04-win8.xml&lt;br /&gt;
ls -lah /shared/definitions/vm04-win8.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.3K Nov 18 15:24 /shared/definitions/vm04-win8.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm04-win8.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm04-win8 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm04-win8 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. This server is assigned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, so we will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;15&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 14&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:25:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm04-win8 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;. Windows 2012 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:26:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm04-win8...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm04-win8&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:06 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm04-win8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm04-win8...Success&lt;br /&gt;
vm:vm04-win8 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:32:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:34:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 7     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Mon Nov 18 15:35:11 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm05-freebsd9 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm05-freebsd9|vm05-freebsd9]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm05-freebsd9 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm05-freebsd9 &amp;gt; /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
ls -lah /shared/definitions/vm05-freebsd9.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.8K Nov 19 12:29 /shared/definitions/vm05-freebsd9.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm05-freebsd9.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm05-freebsd9 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm05-freebsd9 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;16&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:54:27 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 9     vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm05-freebsd9...Success&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:56:03 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm05-freebsd9 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 12:57:09 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm05-freebsd9...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm05-freebsd9&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:17 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm05-freebsd9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm05-freebsd9 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:00:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:02:18 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 10    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Tue Nov 19 13:03:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 2     vm01-win2008                   running&lt;br /&gt;
 5     vm03-win7                      running&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 5     vm02-win2012                   running&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm06-solaris11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm06-solaris11|vm06-solaris11]]&amp;lt;/span&amp;gt; to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm06-solaris11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm06-solaris11 &amp;gt; /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm06-solaris11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 20 16:05 /shared/definitions/vm06-solaris11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm06-solaris11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm06-solaris11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm06-solaris11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n02&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;17&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:28 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:30:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n02.alteeve.ca trying to enable vm:vm06-solaris11...Success&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:31:26 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm06-solaris11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:39:44 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm06-solaris11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm06-solaris11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:38 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          (an-c05n02.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm06-solaris11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
vm:vm06-solaris11 is now running on an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:41:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:42:46 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 16    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Nov 20 16:43:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 14    vm03-win7                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
== Making vm07-rhel6 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm07-rhel6|vm07-rhel6]]&amp;lt;/span&amp;gt; to the cluster&#039;s management. This will be a little different from the windows installs we&#039;ve done up until now.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm07-rhel6 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm07-rhel6 &amp;gt; /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
ls -lah /shared/definitions/vm07-rhel6.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 2.9K Nov 21 00:55 /shared/definitions/vm07-rhel6.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm07-rhel6.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm07-rhel6 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm07-rhel6 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 17&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:02:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 19    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm07-rhel6 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:03:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you did a &amp;quot;minimal&amp;quot; install, then &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; will not be installed. Without it, the server will not shut down gracefully in the next step. Be sure that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpid&amp;lt;/span&amp;gt; is installed and that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;acpi&amp;lt;/span&amp;gt; daemon is running.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm07-rhel6...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm07-rhel6&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:05:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm07-rhel6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm07-rhel6...Success&lt;br /&gt;
vm:vm07-rhel6 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:06:16 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:07:56 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 20    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 01:08:49 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making vm08-sles11 a Highly Available Service ==&lt;br /&gt;
&lt;br /&gt;
{{note|1=If you skipped adding &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; to the cluster manager, please [[#Making_vm01-win2008_a_Highly_Available_Service|jump back]] and review the steps there. Particularly on creating the new failover domains and SELinux fix.}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to add our last server, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[#Provisioning_vm08-sles11|vm08-sles11]]&amp;lt;/span&amp;gt;, to the cluster&#039;s management.&lt;br /&gt;
&lt;br /&gt;
=== Dumping the vm08-sles11 XML Definition File ===&lt;br /&gt;
&lt;br /&gt;
As we did with the previous servers, we need to dump &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;&#039;s [[XML]] definition out to a file in &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First, let&#039;s use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt; to see the server&#039;s state.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So we see that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, which is where we provisioned it.&lt;br /&gt;
&lt;br /&gt;
Now dump the server&#039;s XML.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh dumpxml vm08-sles11 &amp;gt; /shared/definitions/vm08-sles11.xml&lt;br /&gt;
ls -lah /shared/definitions/vm08-sles11.xml &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. 1 root root 3.1K Nov 21 02:14 /shared/definitions/vm08-sles11.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Be sure the XML file was written properly! This next step will remove the server from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;. Once done, the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared/definitions/vm08-sles11.xml&amp;lt;/span&amp;gt; will be the only way to boot the server!}}&lt;br /&gt;
&lt;br /&gt;
The last step is, again, to remove &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;libvirtd&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh undefine vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Domain vm08-sles11 has been undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done.&lt;br /&gt;
&lt;br /&gt;
=== Creating the vm:vm08-sles11 Service ===&lt;br /&gt;
&lt;br /&gt;
As we did for the previous servers, we will create a &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm&amp;lt;/span&amp;gt; service entry for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; under the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;primary_n01&amp;lt;/span&amp;gt; failover domain.&lt;br /&gt;
&lt;br /&gt;
Lets increment the version to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;19&amp;lt;/span&amp;gt; and add the new entry.&lt;br /&gt;
&lt;br /&gt;
One major difference this time is that we will not alter the shut down timer. The default of two minutes is fine for non-Microsoft servers.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Making the new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cluster.conf&amp;lt;/span&amp;gt; as we see it below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;cluster name=&amp;quot;an-cluster-05&amp;quot; config_version=&amp;quot;15&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cman expected_votes=&amp;quot;1&amp;quot; two_node=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;clusternodes&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; nodeid=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n01&amp;quot; action=&amp;quot;reboot&amp;quot; delay=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;1&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
		&amp;lt;clusternode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; nodeid=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fence&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;ipmi&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;ipmi_n02&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
				&amp;lt;method name=&amp;quot;pdu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu1&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;device name=&amp;quot;pdu2&amp;quot; port=&amp;quot;2&amp;quot; action=&amp;quot;reboot&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/method&amp;gt;&lt;br /&gt;
			&amp;lt;/fence&amp;gt;&lt;br /&gt;
		&amp;lt;/clusternode&amp;gt;&lt;br /&gt;
	&amp;lt;/clusternodes&amp;gt;&lt;br /&gt;
	&amp;lt;fencedevices&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n01&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n01.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice name=&amp;quot;ipmi_n02&amp;quot; agent=&amp;quot;fence_ipmilan&amp;quot; ipaddr=&amp;quot;an-c05n02.ipmi&amp;quot; login=&amp;quot;admin&amp;quot; passwd=&amp;quot;secret&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p01.alteeve.ca&amp;quot; name=&amp;quot;pdu1&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;fencedevice agent=&amp;quot;fence_apc_snmp&amp;quot; ipaddr=&amp;quot;an-p02.alteeve.ca&amp;quot; name=&amp;quot;pdu2&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/fencedevices&amp;gt;&lt;br /&gt;
	&amp;lt;fence_daemon post_join_delay=&amp;quot;30&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;totem rrp_mode=&amp;quot;none&amp;quot; secauth=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;rm log_level=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;resources&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/drbd&amp;quot; name=&amp;quot;drbd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/clvmd&amp;quot; name=&amp;quot;clvmd&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;clusterfs device=&amp;quot;/dev/an-c05n01_vg0/shared&amp;quot; force_unmount=&amp;quot;1&amp;quot; fstype=&amp;quot;gfs2&amp;quot; mountpoint=&amp;quot;/shared&amp;quot; name=&amp;quot;sharedfs&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;script file=&amp;quot;/etc/init.d/libvirtd&amp;quot; name=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/resources&amp;gt;&lt;br /&gt;
		&amp;lt;failoverdomains&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;only_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;0&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n01&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
			&amp;lt;failoverdomain name=&amp;quot;primary_n02&amp;quot; nofailback=&amp;quot;1&amp;quot; ordered=&amp;quot;1&amp;quot; restricted=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n01.alteeve.ca&amp;quot; priority=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;failoverdomainnode name=&amp;quot;an-c05n02.alteeve.ca&amp;quot; priority=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/failoverdomain&amp;gt;&lt;br /&gt;
		&amp;lt;/failoverdomains&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;storage_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;drbd&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;script ref=&amp;quot;clvmd&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;clusterfs ref=&amp;quot;sharedfs&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/script&amp;gt;&lt;br /&gt;
			&amp;lt;/script&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n01&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n01&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;service name=&amp;quot;libvirtd_n02&amp;quot; autostart=&amp;quot;1&amp;quot; domain=&amp;quot;only_n02&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;script ref=&amp;quot;libvirtd&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/service&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm01-win2008&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm02-win2012&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm03-win7&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm04-win8&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;action name=&amp;quot;stop&amp;quot; timeout=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/vm&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm05-freebsd9&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm06-solaris11&amp;quot; domain=&amp;quot;primary_n02&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm07-rhel6&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;vm name=&amp;quot;vm08-sles11&amp;quot; domain=&amp;quot;primary_n01&amp;quot; autostart=&amp;quot;0&amp;quot; path=&amp;quot;/shared/definitions/&amp;quot; exclusive=&amp;quot;0&amp;quot; recovery=&amp;quot;restart&amp;quot; max_restarts=&amp;quot;2&amp;quot; restart_expire_time=&amp;quot;600&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/rm&amp;gt;&lt;br /&gt;
&amp;lt;/cluster&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s activate the new configuration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ccs_config_validate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Configuration validates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version -r&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cman_tool version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
6.2.0 config 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on both nodes now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:16:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (none)                                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;. Verify that it is still running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 23    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Confirmed, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we did before, we&#039;ll use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clusvcadm&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;enable&amp;lt;/span&amp;gt; the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service on the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01.alteeve.ca&amp;lt;/span&amp;gt; cluster member.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -e vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Member an-c05n01.alteeve.ca trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
Now, should &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; fail or if &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; should fail, the &#039;&#039;Anvil!&#039;&#039; will recover it automatically.&lt;br /&gt;
&lt;br /&gt;
=== Testing vm08-sles11 Management With clusvcadm ===&lt;br /&gt;
&lt;br /&gt;
The first thing we&#039;re going to do is disable (gracefully shut down) the server. To do this, we&#039;ll send an [[ACPI]] &amp;quot;power button&amp;quot; event to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. FreeBSD 9 will, like most operating systems, respond to having its &amp;quot;power button pressed&amp;quot; by beginning a graceful shut down.&lt;br /&gt;
&lt;br /&gt;
As always, start by checking the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:17:51 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As we expected.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -d vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine disabling vm:vm08-sles11...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; again, we&#039;ll see that the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm08-sles11&amp;lt;/span&amp;gt; service is indeed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;disabled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             (an-c05n01.alteeve.ca)                     disabled      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good, it&#039;s off. Let&#039;s turn it back on now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -F -e vm:vm08-sles11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Local machine trying to enable vm:vm08-sles11...Success&lt;br /&gt;
vm:vm08-sles11 is now running on an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:19:40 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One last step; Testing live migration! We&#039;ll push &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; and then pull it back again.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:20:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n02.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;, we can confirm that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; has, in fact, moved over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
 21    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you had a program running or were logged into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over [[RDP]] or similar, you would have noticed no interruptions.&lt;br /&gt;
&lt;br /&gt;
So now we&#039;ll pull it back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Nov 21 02:21:13 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                         ID   Status&lt;br /&gt;
 ------ ----                                         ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                    1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                    2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                               Owner (Last)                               State         &lt;br /&gt;
 ------- ----                               ----- ------                               -----         &lt;br /&gt;
 service:libvirtd_n01                       an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:libvirtd_n02                       an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n01                        an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 service:storage_n02                        an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm01-win2008                            an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm02-win2012                            an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm03-win7                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm04-win8                               an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm05-freebsd9                           an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm06-solaris11                          an-c05n02.alteeve.ca                       started       &lt;br /&gt;
 vm:vm07-rhel6                              an-c05n01.alteeve.ca                       started       &lt;br /&gt;
 vm:vm08-sles11                             an-c05n01.alteeve.ca                       started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;ll confirm with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;virsh&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 9     vm04-win8                      running&lt;br /&gt;
 15    vm01-win2008                   running&lt;br /&gt;
 17    vm03-win7                      running&lt;br /&gt;
 21    vm07-rhel6                     running&lt;br /&gt;
 25    vm08-sles11                    running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virsh list --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 11    vm05-freebsd9                  running&lt;br /&gt;
 17    vm02-win2012                   running&lt;br /&gt;
 19    vm06-solaris11                 running&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s really pretty easy, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
= Setting Up Alerts =&lt;br /&gt;
&lt;br /&gt;
One of the major additions to this second addition is the advent of the new alert system we developed called &amp;quot;AN!CM&amp;quot;; &amp;quot;AN! Cluster Monitor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Alert System Overview ==&lt;br /&gt;
&lt;br /&gt;
It is hardly fancy, but it does provide, in one package, very careful and detailed monitoring of:&lt;br /&gt;
&lt;br /&gt;
* Incoming power issues via UPS monitoring.&lt;br /&gt;
* Network interruptions via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;bond&amp;lt;/span&amp;gt; driver events&lt;br /&gt;
* Monitoring of node environmental health via IPMI BMC sensor readings&lt;br /&gt;
* Monitoring of all storage components via LSI&#039;s MegaCli tool&lt;br /&gt;
* Monitoring of the HA cluster stack using Red Hat&#039;s tools&lt;br /&gt;
&lt;br /&gt;
In all, over 200 points are monitored every 30 seconds. Most changes are simply logged, but events deemed important (or new events not before seen) trigger email alerts. These alerts are kept as simple and to the point as possibly to minimize the amount of time needed to understand what event triggered the alert.&lt;br /&gt;
&lt;br /&gt;
The alerting system tries to be intelligent about how alerts are triggered. For example, a thermal alert can trigger if it passes a set threshold, of course. At the same time, &amp;quot;early warning&amp;quot; alerts can be triggered is a sudden excessive change in temperature is seen. This allows early reaction to major events like HVAC failures in the server room or DC.&lt;br /&gt;
&lt;br /&gt;
Basic predictive failure analysis is also provided. Examples of this are alerts on distorted incoming power from the building mains. Likewise, a sudden jump in the number of media errors from a disk drive will trigger alerts. In this way, early warning alerts can get out before a component actually fails. This allows for corrective measures or replacement parts to be ordered pre-failure, minimizing risk exposure time.&lt;br /&gt;
&lt;br /&gt;
== AN!CM Requirements ==&lt;br /&gt;
&lt;br /&gt;
The alerting system is fairly customized to the &#039;&#039;Anvil!&#039;&#039; build-out. For example, only APC brand UPSes with [http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=AP9630 AP9630] controllers are supported for UPS monitoring. Likewise, only LSI-brand RAID controllers are currently supported.&lt;br /&gt;
&lt;br /&gt;
That said, AN!CM is an [https://github.com/digimer/an-cdb/tree/master/tools open-source project] (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.lib&amp;lt;/span&amp;gt;), so contributions are happily accepted. If you need help adapting this to your hardware, please don&#039;t hesitate to [[Support|contact us]]. We will be happy to assist however we can.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Your Dashboard ==&lt;br /&gt;
&lt;br /&gt;
You can configure a node&#039;s monitoring without a dashboard, if you wish. However, [[AN!CDB]] has been designed to use the dashboard systems as the center of the AN! tools.&lt;br /&gt;
&lt;br /&gt;
Please setup a dashboard before proceeding:&lt;br /&gt;
&lt;br /&gt;
* [[Install and Configure AN!CDB]]&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re done there, come back here.&lt;br /&gt;
&lt;br /&gt;
== Testing Monitoring ==&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/an/an.conf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm.lib&amp;lt;/span&amp;gt; should be on our nodes.&lt;br /&gt;
&lt;br /&gt;
Before we enable monitoring, lets test it once manually. If things work as expected, you should get two emails:&lt;br /&gt;
&lt;br /&gt;
* First indicating that the alert system has started with an overview of the node&#039;s health.&lt;br /&gt;
* Second indicating that the alert system has stopped.&lt;br /&gt;
&lt;br /&gt;
{{note|1=The monitoring and alert program generally will not print anything to the screen. When we run the command below, the terminal will appear hung. It is not though. Wait a minute and you should get an email from the node. Once you see that email, press &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; to close the program and return to the command prompt.}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C3:34&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:58:06:A9&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:8E:67:32&lt;br /&gt;
          |- vnet2, MAC: FE:54:00:68:9B:FD&lt;br /&gt;
          |- vnet3, MAC: FE:54:00:D5:49:4C&lt;br /&gt;
          \- vnet4, MAC: FE:54:00:8A:6C:52&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 73 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4080 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      36 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 110 Watts  | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 16.50 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 18.70 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 210 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 37        |&lt;br /&gt;
| CPU2           | ok        | 41        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4560      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     30.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  sharedfs&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/root/an-cm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After a moment, you should get an email like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cluster: an-cluster-05&lt;br /&gt;
Quorum:  Quorate&lt;br /&gt;
Node:    an-c05n01.alteeve.ca - Online, rgmanager&lt;br /&gt;
Node:    an-c05n02.alteeve.ca - Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service: libvirtd_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: libvirtd_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
Service: storage_n01	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
Service: storage_n02	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm01-win2008	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm02-win2012	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm03-win7	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm04-win8	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm05-freebsd9	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm06-solaris11	-&amp;gt; started on an-c05n02.alteeve.ca&lt;br /&gt;
     VM: vm07-rhel6	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
     VM: vm08-sles11	-&amp;gt; started on an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): |- bond2, MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
          |- vnet0, MAC: FE:54:00:5E:29:1C&lt;br /&gt;
          |- vnet1, MAC: FE:54:00:29:38:3B&lt;br /&gt;
          \- vnet2, MAC: FE:54:00:B0:6C:AA&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       98 %, 68 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4058 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      35 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6480 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.13 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 17.60 Watts  |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 33        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6480      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4680      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4920      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 51.0 Minutes    Current Load:    26.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 52.0 Minutes    Current Load:    25.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 123.0 Volts -&amp;gt; UPS -&amp;gt; 123.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once you see these emails, you can close the monitoring programs by pressing &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ctrl&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot;. When you do, the terminal will return and you will get another email from each node warning you that the alerting system has stopped.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 2480 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n01 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ctrl&amp;gt; + &amp;lt;c&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Process with PID 1447 Exiting on SIGINT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should then get an email like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Shutdown&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The an-c05n02 cluster node&#039;s monitor program has stopped.&lt;br /&gt;
It received a SIGINT signal and shut down.&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Perfect!&lt;br /&gt;
&lt;br /&gt;
If you want to see what AN!CM is doing, it writes its log files to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt;. There are many events that are logged which do not trigger emails. Sensors like thermometers, fan tachometers and various voltage and wattage sensors will constantly be shifting. These changes are recorded in this log file, should you ever wish to see how things change over time.&lt;br /&gt;
&lt;br /&gt;
Lets take a quick look at what was written to each node&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm.log&amp;lt;/span&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 41 *C -&amp;gt; 42 *C&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 18.70 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 19.80 Watts -&amp;gt; ok, 17.60 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201452 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 52.0 Minutes -&amp;gt; 51.0 Minutes&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4081 mV -&amp;gt; 4079 mV&lt;br /&gt;
1386201487 an-cm 5936; RAID 0&#039;s Physical Disk 1&#039;s &amp;quot;Drive Temperature&amp;quot; has changed; 42 *C -&amp;gt; 41 *C&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 17.60 Watts -&amp;gt; ok, 20.90 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN1 PSU2&amp;quot; fan speed has change; ok, 6480 RPM -&amp;gt; ok, 6600 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 SYS&amp;quot; fan speed has change; ok, 5280 RPM -&amp;gt; ok, 5340 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN3 SYS&amp;quot; fan speed has change; ok, 4980 RPM -&amp;gt; ok, 5040 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 5220 RPM -&amp;gt; ok, 5280 RPM.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /var/log/an-cm.log &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
======&lt;br /&gt;
Opening AN!CDB - Cluster Dasboard log at 1386201452&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 14.30 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 15.40 Watts -&amp;gt; ok, 11 Watts.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN1 SYS&amp;quot; fan speed has change; ok, 4740 RPM -&amp;gt; ok, 4680 RPM.&lt;br /&gt;
1386201452 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6360 RPM -&amp;gt; ok, 6240 RPM.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;PSU2 Power&amp;quot; has change; ok, 120 Watts -&amp;gt; ok, 110 Watts.&lt;br /&gt;
1386201452 an-cm 6188; Host&#039;s &amp;quot;Total Power&amp;quot; has change; ok, 210 Watts -&amp;gt; ok, 200 Watts.&lt;br /&gt;
1386201452 an-cm 6540; UPS an-u01&#039;s line voltage has changed but it is within acceptable range. Currently: [121.0 vAC], minimum is: [103.0 vAC], maximum is: [130.0 vAC]&lt;br /&gt;
1386201487 an-cm 5668; ** Relearn cycle active **: RAID 0&#039;s Battery Backup Unit&#039;s &amp;quot;Voltage&amp;quot; has changed; 4060 mV -&amp;gt; 4061 mV&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;BATT 3.0V&amp;quot; voltage has change; ok, 3.14 Volts -&amp;gt; ok, 3.13 Volts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU1 Power&amp;quot; has change; ok, 14.30 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6188; Host&#039;s &amp;quot;CPU2 Power&amp;quot; has change; ok, 11 Watts -&amp;gt; ok, 13.20 Watts.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN2 PSU2&amp;quot; fan speed has change; ok, 6240 RPM -&amp;gt; ok, 6360 RPM.&lt;br /&gt;
1386201487 an-cm 6234; Host&#039;s &amp;quot;FAN5 SYS&amp;quot; fan speed has change; ok, 4860 RPM -&amp;gt; ok, 4920 RPM.&lt;br /&gt;
1386201487 an-cm 6385; Host&#039;s &amp;quot;IOH 1.8V&amp;quot; voltage has change; ok, 1.80 Volts -&amp;gt; ok, 1.79 Volts.&lt;br /&gt;
1386201487 an-cm 6599; UPS an-u01&#039;s load has changed; 26.0 Percent Load Capacity -&amp;gt; 25.0 Percent Load Capacity&lt;br /&gt;
1386201487 an-cm 6608; UPS an-u01&#039;s &amp;quot;TIMELEFT&amp;quot; has had a state changed; 51.0 Minutes -&amp;gt; 52.0 Minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shortly, we will look at what alerts that trigger emails look like. For now, we&#039;re ready to enable monitoring!&lt;br /&gt;
&lt;br /&gt;
== Enabling Monitoring ==&lt;br /&gt;
&lt;br /&gt;
Now that we know that monitoring and emailing is working, it is time to enable it.&lt;br /&gt;
&lt;br /&gt;
By design, the monitoring program is designed to exit should it run into any unexpected problems. Obviously, it is quite important that the alert system always run. &lt;br /&gt;
&lt;br /&gt;
The way we ensure this is to use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[crontab]]&amp;lt;/span&amp;gt; to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/an-cm&amp;lt;/span&amp;gt; every five minutes. The first thing that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; does is check to see if it is already running. If so, it simply exits, so the alert system won&#039;t run more than once. Should it crash or be killed for some reason, however, this will ensure that the alert system is back up within five minutes.&lt;br /&gt;
&lt;br /&gt;
So if you find that you suddenly get an email claiming that the monitoring software has started, be sure to check &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/an-cm.log&amp;lt;/span&amp;gt; for error messages.&lt;br /&gt;
&lt;br /&gt;
Back to enabling monitoring; &lt;br /&gt;
&lt;br /&gt;
We&#039;re going to also enable two log archival scripts; &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_megasas.log.sh&amp;lt;/span&amp;gt;. These prevent the log files generated by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-cm&amp;lt;/span&amp;gt; directly and the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaSAS.log&amp;lt;/span&amp;gt; file created by &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;MegaCli64&amp;lt;/span&amp;gt; from growing too big. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; will run once a day and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt; archival scripts will run once per month. We already downloaded &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;archive_an-cm.log.sh&amp;lt;/span&amp;gt;, but we still need to download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt;. Both will create up to five archived log files, allowing you to review up to five days and five months, respectively. After that, the oldest log files are removed, effectively capping the amount of disk space these logs will use.&lt;br /&gt;
&lt;br /&gt;
Lets download &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/archive_megasas.log.sh&amp;lt;/span&amp;gt; and make it executable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:58--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.1 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
--2014-02-24 19:37:59--  https://raw.github.com/digimer/an-cdb/master/tools/archive_megasas.log.sh&lt;br /&gt;
Resolving raw.github.com... 199.27.73.133&lt;br /&gt;
Connecting to raw.github.com|199.27.73.133|:443... connected.&lt;br /&gt;
HTTP request sent, awaiting response... 200 OK&lt;br /&gt;
Length: 814 [text/plain]&lt;br /&gt;
Saving to: `archive_megasas.log.sh&#039;&lt;br /&gt;
&lt;br /&gt;
100%[====================================================================&amp;gt;] 814         --.-K/s   in 0s      &lt;br /&gt;
&lt;br /&gt;
2014-02-24 19:37:59 (27.3 MB/s) - `archive_megasas.log.sh&#039; saved [814/814]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 archive_megasas.log.sh&lt;br /&gt;
ls -lah archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 root root 814 Feb 24 19:37 archive_megasas.log.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll call &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cronbtab -e&amp;lt;/span&amp;gt; to edit the cron table and add three entries for these programs. If you already added &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/archive_an-cm.log.sh&amp;lt;/span&amp;gt;, then simply append the other two.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
*/5 * * * * /root/an-cm &amp;gt;&amp;gt; /var/log/an-cm.log&lt;br /&gt;
0 1 * * *  /root/archive_megasas.log.sh &amp;gt; /dev/null&lt;br /&gt;
0 0 1 * *  /root/archive_an-cm.log.sh &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save and quit. Within five minutes, you should see an email telling you that the monitoring system has started up again.&lt;br /&gt;
&lt;br /&gt;
We&#039;re done!&lt;br /&gt;
&lt;br /&gt;
== We&#039;re Done! or are We? ==&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, ladies and gentlemen. Our cluster is completed! In theory now, any failure in the cluster will result in no lost data and, at worst, no more than a minute or two of downtime.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In theory&amp;quot; just isn&#039;t good enough in clustering though. Time to take &amp;quot;theory&amp;quot; and make it a tested, known fact.&lt;br /&gt;
&lt;br /&gt;
= Testing Server Recovery =&lt;br /&gt;
&lt;br /&gt;
You may have thought that we were done. Indeed, the &#039;&#039;Anvil!&#039;&#039; has been built, but we need to do a final round of testing. Thus far, we&#039;re tested network redundancy and we have tested our fencing devices.&lt;br /&gt;
&lt;br /&gt;
The last round of testing will be to make sure our servers recover properly. We will test the following;&lt;br /&gt;
&lt;br /&gt;
# Controlled migration and node withdrawal.&lt;br /&gt;
## Migrate all servers to one node, then withdraw and power off the other node.&lt;br /&gt;
## Restart the node and rejoin it to the cluster.&lt;br /&gt;
## Repeat for the other node.&lt;br /&gt;
# Controlled, out-of-cluster power-off of a server, ensure it is restarted&lt;br /&gt;
# Crashing nodes.&lt;br /&gt;
## Ensuring crashed node is fenced.&lt;br /&gt;
## Confirm all servers recover on the surviving node.&lt;br /&gt;
## Rejoining the recovered node and migrating servers back.&lt;br /&gt;
## Crashing the other node, ensuring its servers recover.&lt;br /&gt;
&lt;br /&gt;
== Controlled Migration and Node Withdrawal ==&lt;br /&gt;
&lt;br /&gt;
These tests ensure that we will be able to safely pull a node out of service for upgrades, repairs, routine service and OS updates.&lt;br /&gt;
&lt;br /&gt;
We will start with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;; We will live-migrate all servers over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;, stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and then power off &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. We will then power &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back up and rejoin it to the cluster. Once both DRBD resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; again, we will live-migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
Once done, we will repeat the process in order to test taking &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; out, then restarting it and putting it back into production. If all goes well, both nodes will be powered off at one point or another and none of the servers should be interrupted.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
As always, the first step is to check what state the cluster is in.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:08:02 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Remember; It is not uncommon for live migrations to take several minutes to complete. The hypervisor will slow the migration process if it thinks that is needed to avoid negatively affecting performance inside the server. Please be patient!}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=It&#039;s a good idea to be running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;watch clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; from this point forward. It will allow you to monitor the changes as they happen.}}&lt;br /&gt;
&lt;br /&gt;
Before we can withdraw &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we&#039;ll need to live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What is this? An alert!&lt;br /&gt;
&lt;br /&gt;
You should have just gotten two alerts, one from each node, telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt; has moved. Lets take a look;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n01.alteeve.ca	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike the long and detailed message from the initial startup, these &amp;quot;state change&amp;quot; emails are much shorter and to the point. It tells you only what has changed, so that you can quickly tell exactly what happened. In this case, we expected this change so there is no need for concern.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s migrate the other servers. You will see another pair of alerts like this after each migration.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That should be all of them. Verify with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:53:54 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Good. Now we will stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;. We&#039;ll verify that the node is gone by calling &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; from both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 21:56:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
We can now update &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s OS or power it off for physical maintenance, repairs or upgrades!&lt;br /&gt;
&lt;br /&gt;
We will power it off now to simulate hardware maintenance.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
poweroff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n01.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 21:57 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for power off NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Load Testing in a Degraded State ===&lt;br /&gt;
&lt;br /&gt;
At this point, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is powered off. &lt;br /&gt;
&lt;br /&gt;
This is a great time to load test your servers! &lt;br /&gt;
&lt;br /&gt;
This is an effective simulation of a degraded state. Should you lose a node, you will be forced to run on a single node until repairs can be made. You need to be sure that performance on a single node is good enough to maintain full production during this time. &lt;br /&gt;
&lt;br /&gt;
How you load test your servers will be entirely dependent on what they are and what they do. So there is not much we can do in the scope of this tutorial. Once your load tests are done, proceed to the next section.&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
So you&#039;re load tests are done. Now you&#039;re ready to bring &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; back online and rejoin it to the cluster.&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt; fence agent to first verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is truly off, then we will use it to turn it on. We could certainly use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ipmitool&amp;lt;/span&amp;gt; directly, of course, but it is an excellent opportunity to practice with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Getting status of IPMI:an-c05n01.ipmi...Chassis power = Off&lt;br /&gt;
Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State confirmed. Let&#039;s power it up!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_ipmilan -a an-c05n01.ipmi -l admin -p secret -o on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Powering on machine @ IPMI:an-c05n01.ipmi...Done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most hardware servers take several minutes to boot, so this is a great time to go make a tea or coffee. Once it&#039;s booted, within five minutes, you should get an alert email telling you that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; is up and running. This is an excellent way to know when your break is over.&lt;br /&gt;
&lt;br /&gt;
Once the node is up, log back into and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resource are back to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;. Do not proceed until this is the case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:24:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready to migrate the servers back!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:15 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:31:22 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All done!&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Anvil!&#039;&#039; is once again fully redundant and our servers are back on their preferred hosts.&lt;br /&gt;
&lt;br /&gt;
=== Withdraw an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Next up; Withdrawing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;. As always, we will check the state of things.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:34:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This time, we will live-migrate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm02-win2012&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm05-freebsd9&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm06-solaris11&amp;lt;/span&amp;gt; over to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:19 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:37:57 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All servers are off, so now we&#039;ll stop &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Stopping cluster: &lt;br /&gt;
   Leaving fence domain...                                 [  OK  ]&lt;br /&gt;
   Stopping gfs_controld...                                [  OK  ]&lt;br /&gt;
   Stopping dlm_controld...                                [  OK  ]&lt;br /&gt;
   Stopping fenced...                                      [  OK  ]&lt;br /&gt;
   Stopping cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for corosync to shutdown:                       [  OK  ]&lt;br /&gt;
   Unloading kernel modules...                             [  OK  ]&lt;br /&gt;
   Unmounting configfs...                                  [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Verify that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; shows &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; as offline now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:41:52 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As before, we can now do an OS update or power off the node.&lt;br /&gt;
&lt;br /&gt;
We did our single-node load testing already, so this time we will simply reboot &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to simulate a (very quick) hardware service.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Broadcast message from root@an-c05n02.alteeve.ca&lt;br /&gt;
	(/dev/pts/0) at 22:43 ...&lt;br /&gt;
&lt;br /&gt;
The system is going down for reboot NOW!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rejoin an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
As before, we&#039;ll verify the current state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;. Then we&#039;ll watch &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/drbd status&amp;lt;/span&amp;gt; and wait until both resources are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:47:30 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            (an-c05n02.alteeve.ca)         stopped&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:50:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step; Migrate the servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:39 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Wed Dec  4 22:55:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once again, we&#039;re back into a fully redundant state and our servers are running on their preferred nodes!&lt;br /&gt;
&lt;br /&gt;
== Out-of-Cluster Server Power-off ==&lt;br /&gt;
&lt;br /&gt;
If a server shuts off, for any reason, the cluster will treat it as a failed service and it will recover it by turning it back on. &lt;br /&gt;
&lt;br /&gt;
There is a catch though...&lt;br /&gt;
&lt;br /&gt;
For privacy reasons, there is no way to look inside a server to determine if it has failed. So detecting a failure is restricted to simply seeing it not do anything any more. Some operating systems, like most or all Microsoft operating systems, go into an infinite loop when they [http://en.wikipedia.org/wiki/Blue_Screen_of_Death blue screen]. To the cluster, it simply looks like the server is really really busy, so it is not treated as failed. &lt;br /&gt;
&lt;br /&gt;
So please make sure, if at all possible, to set your servers to reboot on crash. Most modern operating systems do this already, but consult your server operating system&#039;s documentation to verify.&lt;br /&gt;
&lt;br /&gt;
For this test, all we will do is log into a server and turn it off the way you would if it was a bare-iron server. If things work properly, the server should see it as failed and turn it back on within a few seconds.&lt;br /&gt;
&lt;br /&gt;
For this test, we will log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, click on the &amp;quot;Start&amp;quot; icon and then click on &#039;&#039;Shut down&#039;&#039;. We will watch the system logs on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; as that is the node hosting the server.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clear; tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: device vnet1 left promiscuous mode&lt;br /&gt;
Dec  5 02:10:16 an-c05n01 kernel: vbr2: port 3(vnet1) entering disabled state&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: Deleting interface #19 vnet1, fe80::fc54:ff:fe68:9bfd#123, interface stats: received=0, sent=0, dropped=0, active_time=99 secs&lt;br /&gt;
Dec  5 02:10:17 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:23 an-c05n01 rgmanager[2770]: status on vm &amp;quot;vm03-win7&amp;quot; returned 1 (generic error)&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Stopping service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 is recovering&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 rgmanager[2770]: Recovering failed service vm:vm03-win7&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: device vnet1 entered promiscuous mode&lt;br /&gt;
Dec  5 02:10:24 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
Dec  5 02:10:25 an-c05n01 rgmanager[2770]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: Listen normally on 20 vnet1 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 02:10:28 an-c05n01 ntpd[2100]: peers refreshed&lt;br /&gt;
Dec  5 02:10:39 an-c05n01 kernel: vbr2: port 3(vnet1) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Above we see the hypervisor report that the server shut down at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:17&amp;lt;/span&amp;gt;. The message &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Deleting interface #19 vnet1...&amp;lt;/span&amp;gt;&amp;quot; is the virtual network cable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; being deleted because the server it was &amp;quot;plugged into&amp;quot; was no longer running.&lt;br /&gt;
&lt;br /&gt;
Six seconds later, at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;02:10:23&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; realized that the server had failed. If you had been watching &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;, you would have seen the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm:vm03-win7&amp;lt;/span&amp;gt; server enter the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;failed&amp;lt;/span&amp;gt; state. Moments later, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; began recovering the server by first disabling it, then starting it back up.&lt;br /&gt;
&lt;br /&gt;
Two seconds after that, eight seconds after the unexpected shut down, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt; was recovered and running again. Three seconds later, a new &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnet1&amp;lt;/span&amp;gt; was created, reconnecting the server to the network. A this point, recovery is complete!&lt;br /&gt;
&lt;br /&gt;
Probably the easiest test so far. Of course, you will want to repeat this test for all of your servers.&lt;br /&gt;
&lt;br /&gt;
== Crashing Nodes; The Ultimate Test ==&lt;br /&gt;
&lt;br /&gt;
Finally, we&#039;ve reaches the ultimate test.&lt;br /&gt;
&lt;br /&gt;
Most people first look at high-availability to protect against crashed bare-iron servers. As we&#039;ve seen, there are many other single-points of failure that we had to address and which we&#039;ve already tested.&lt;br /&gt;
&lt;br /&gt;
In this test, we&#039;re going to have all services and servers running. &lt;br /&gt;
&lt;br /&gt;
We will first crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; by sending a &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;&amp;quot; character to the &amp;quot;magic &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Magic_SysRq_key SysRq Key]&amp;lt;/span&amp;gt;, as we did when we first tested our fencing configuration. This will cause &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; to instantly [http://en.wikipedia.org/wiki/Kernel_panic kernel panic], crashing the node and halting all the servers running on it. This will simulate the harshest software crash possible on a node.&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve recovered from that, we will crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; by cutting the power to it. This will simulate a total destruction of a node. As we saw in our early fence testing, this will cause the [[IPMI]] [[BMC]] under &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; to also fail, forcing the surviving node to fall back to the [[PDU]] based backup fence method.&lt;br /&gt;
&lt;br /&gt;
These tests will also ensure that your &#039;&#039;Anvil!&#039;&#039; does not suffer from a [[boot storm]] when all of the servers from either node reboot at the same time during recovery. This is a very, very important aspect of this test. Should the servers start, but fail to finish booting and become unresponsive, it is likely that your storage was not fast enough to handle the sudden high read load placed on them during recovery. As bad as this is, it is much better to find out now, &#039;&#039;&#039;before&#039;&#039;&#039; going into production.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
{{note|1=&#039;&#039;Virtual Machine Manager&#039;&#039; will appear to hang when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; until the connection is determined to have failed. To watch the recovery of the servers on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in real time, please disconnect from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; first.}}&lt;br /&gt;
&lt;br /&gt;
Once we crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;, we should see the following sequence of events:&lt;br /&gt;
&lt;br /&gt;
* Both &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;drbd&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will declare &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; lost and will fence it.&lt;br /&gt;
* An alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; will arrive indicating the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;.&lt;br /&gt;
* All servers that had been running on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; will boot on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
* Additional alerts will arrive as the servers are recovered.&lt;br /&gt;
* Within five or ten minutes, we will get an alert from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; saying that the alert system has started, indicating the node is back.&lt;br /&gt;
&lt;br /&gt;
Before we do this, lets see what is on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; right now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 11:55:23 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So this test is going to crash &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm01-win2008&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm03-win7&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm04-win8&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;m07-rhel6&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vm08-sles11&amp;lt;/span&amp;gt;. This is the majority of our servers, so this recovery will tell us if we&#039;re going to have a boot storm or not. If all of them boot without trouble, we will know that our storage is likely fast enough.&lt;br /&gt;
&lt;br /&gt;
Be sure to log into &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;tail&amp;lt;/span&amp;gt; the system logs before proceeding.&lt;br /&gt;
&lt;br /&gt;
Ok, let&#039;s do this!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nothing returned, it&#039;s dead&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f -n 0 /var/log/messages&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 12:01:27 an-c05n02 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:27 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 corosync[2546]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 12:01:32 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 12:01:32 an-c05n02 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [QUORUM] Members[1]: 2&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: dlm: closing connection to node 1&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 fenced[2613]: fencing node an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.2) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 corosync[2546]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 12:01:34 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fenced[2613]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 fence_node[2294]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: new current UUID AC7D34993319CF07:96939998C25B00D5:C667A4D09ADAF91B:C666A4D09ADAF91B&lt;br /&gt;
Dec  5 12:02:05 an-c05n02 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:06 an-c05n02 rgmanager[2785]: Marking service:storage_n01 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 fence_node[2325]: fence an-c05n01.alteeve.ca success&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: new current UUID 20CEE1AD5C066F57:BF89350BA62F87D1:EAA52C899C7C1F8D:EAA42C899C7C1F8D&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Looking at journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replaying journal...&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Replayed 259 of 476 blocks&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Found 5 revoke tags&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Journal replayed in 1s&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: GFS2: fsid=an-cluster-05:shared.1: jid=0: Done&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm01-win2008 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm03-win7 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm04-win8 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: device vnet3 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm07-rhel6 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:07 an-c05n02 rgmanager[2785]: Taking over service vm:vm08-sles11 from down member an-c05n01.alteeve.ca&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet4 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 rgmanager[2785]: Service vm:vm01-win2008 started&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:08 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 12:02:09 an-c05n02 rgmanager[2785]: Service vm:vm03-win7 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm07-rhel6 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm04-win8 started&lt;br /&gt;
Dec  5 12:02:10 an-c05n02 rgmanager[2785]: Service vm:vm08-sles11 started&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 14 vnet3 fe80::fc54:ff:fe8e:6732 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 15 vnet5 fe80::fc54:ff:fe58:6a9 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 16 vnet6 fe80::fc54:ff:fe8a:6c52 UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 17 vnet4 fe80::fc54:ff:fe68:9bfd UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: Listen normally on 18 vnet7 fe80::fc54:ff:fed5:494c UDP 123&lt;br /&gt;
Dec  5 12:02:12 an-c05n02 ntpd[2084]: peers refreshed&lt;br /&gt;
Dec  5 12:02:19 an-c05n02 kernel: kvm: 3933: cpu0 disabled perfctr wrmsr: 0xc1 data 0xabcd&lt;br /&gt;
Dec  5 12:02:22 an-c05n02 kernel: vbr2: port 5(vnet3) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 6(vnet4) entering forwarding state&lt;br /&gt;
Dec  5 12:02:23 an-c05n02 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 12:02:24 an-c05n02 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that, in this case, DRBD caught the failure slightly faster than &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;corosync&amp;lt;/span&amp;gt; did. It initiated a fence via &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rhcs_fence&amp;lt;/span&amp;gt;. Next we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; also call a fence, which succeeded on first try. Shortly after, DRBD recognized the fence succeeded as well. &lt;br /&gt;
&lt;br /&gt;
With the fence actions succeeded, we see DRBD mark the lost resources as &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Outdated&amp;lt;/span&amp;gt;, GFS2 reaps lost locks and cleans up the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt; filesystem. We also see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; mark &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&#039;s storage as disabled and then begin recovery of the five lost servers. Once they&#039;re booted, the last recovery step is &amp;quot;plugging them in&amp;quot; to the bridge.&lt;br /&gt;
&lt;br /&gt;
Lets look at the alerts we received.&lt;br /&gt;
&lt;br /&gt;
The alert system checks for state changes every 30 seconds. So depending on when the loop fires during the failure and recovery process, you may get a couple alerts. That is what happened in my case.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n01.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local, rgmanager	-&amp;gt; Online, Local&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
30 seconds later, the next alert arrives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, Local	-&amp;gt; Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n01; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
Service storage_n01; State change!&lt;br /&gt;
  --	-&amp;gt; stopped&lt;br /&gt;
  --	-&amp;gt; (an-c05n01.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm01-win2008; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm03-win7; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm04-win8; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm07-rhel6; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm08-sles11; State change!&lt;br /&gt;
  --	-&amp;gt; started&lt;br /&gt;
  --	-&amp;gt; an-c05n02.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first email shows the loss of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. The second email shows the recovery of all the servers. The astute reader will notice that &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; showed &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. &lt;br /&gt;
&lt;br /&gt;
This is because there is a time between node loss and fence complete where [[DLM]] stops giving out locks. As we mentioned, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clvmd&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gfs2&amp;lt;/span&amp;gt; all require DLM locks in order to work. So during a pending fence, these programs will appear to hang, which is by design. Once the fence action succeeds, normal operation resumes. In this case, we see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; returned to &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; in the second email alert.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 12:37:42 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we look at the timeline, we see that the fault was detected almost immediately at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:01:27&amp;lt;/span&amp;gt;. Recovery is completed at &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;12:02:24&amp;lt;/span&amp;gt;. The total recovery time was 57 seconds.&lt;br /&gt;
&lt;br /&gt;
Not too shabby!&lt;br /&gt;
&lt;br /&gt;
=== Degraded Mode Load Testing ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=Load-testing your &#039;&#039;Anvil!&#039;&#039; in a degraded state is just as critical as anything else we&#039;ve done thus far!}}&lt;br /&gt;
&lt;br /&gt;
It is very important that you ensure all of your servers can run well at full load on a single node. All of our work until now is useless if your servers grind during a degraded state.&lt;br /&gt;
&lt;br /&gt;
The two biggest concerns are CPU and storage.&lt;br /&gt;
&lt;br /&gt;
Please be sure to test, as long as needed, all of your applications running at full speed, both CPU and storage. If those tests pass, it&#039;s a good idea to then run synthetic benchmarks to find out just how much load your servers can take on the one node before performance degrades. This will be very useful for predicting when additional resource must be added as you grow.&lt;br /&gt;
&lt;br /&gt;
The actual methods used in this step are dependent entirely on your setup, so no further discussion can be had here.&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n01 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; recovers from the fence, it will send out the &amp;quot;I&#039;ve started!&amp;quot; alerts. There might be two emails, depending on the when the alert system started. That was the case in this test. The first alert came up before the bond devices &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;updelay&amp;lt;/span&amp;gt; expired. Once that delay passed, a second alert was triggered showing the backup interfaces coming online.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C3:34, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:9B:9E&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9E | 00:1B:21:81:C3:35 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:9B:9F&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:9B:9F | A0:36:9F:02:E0:04 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C3:34&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | --                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps         |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C3:34 | A0:36:9F:02:E0:05 |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 15686&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 71 % of design&lt;br /&gt;
	 - Capacity:     No / 906 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4077 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       35&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Wed Dec 18 16:47:41 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3T7X6&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CMMC&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      40 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3CD2Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      37 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVY33ARM&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 120 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 110 Watts  | 6600 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 6.60 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.49 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12 Volts     | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.18 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 120 Watts    |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 110 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 200 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 26.50     |&lt;br /&gt;
| CPU1           | ok        | 35        |&lt;br /&gt;
| CPU2           | ok        | 39        |&lt;br /&gt;
| Systemboard    | ok        | 45        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6600      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4500      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4800      |&lt;br /&gt;
| FAN5 SYS       | ok        | 4740      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     31.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 120.0 Volts -&amp;gt; UPS -&amp;gt; 120.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bond bond0 (Back-Channel Network); Second slave eth3&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond1 (Storage Network); Second slave eth4&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
Bond bond2 (Internet-Facing Network); Second slave eth5&#039;s link status has changed!&lt;br /&gt;
  going back	-&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lets check the state of things on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 13:04:05 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Offline&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            (an-c05n01.alteeve.ca)         stopped&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything looks good, so lets rejoin &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:31 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n02.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:20:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n02.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we wait for the DRBD resource to both be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    71.2%            (176592/607108)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   Connected   Primary/Primary  UpToDate/UpToDate      C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a bit...&lt;br /&gt;
&lt;br /&gt;
Ding!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last step is to start live-migrating the five servers back.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm01-win2008 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm01-win2008 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm03-win7 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm03-win7 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm04-win8 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm04-win8 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm07-rhel6 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm07-rhel6 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm08-sles11 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm08-sles11 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:41 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:26:58 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                             ID   Status&lt;br /&gt;
 ------ ----                             ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                        1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                        2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                   Owner (Last)                   State&lt;br /&gt;
 ------- ----                   ----- ------                   -----&lt;br /&gt;
 service:libvirtd_n01           an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:libvirtd_n02           an-c05n02.alteeve.ca           started&lt;br /&gt;
 service:storage_n01            an-c05n01.alteeve.ca           started&lt;br /&gt;
 service:storage_n02            an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm01-win2008                an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm02-win2012                an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm03-win7                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm04-win8                   an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm05-freebsd9               an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm06-solaris11              an-c05n02.alteeve.ca           started&lt;br /&gt;
 vm:vm07-rhel6                  an-c05n01.alteeve.ca           started&lt;br /&gt;
 vm:vm08-sles11                 an-c05n01.alteeve.ca           started&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Everything is back to normal.&lt;br /&gt;
&lt;br /&gt;
You should see numerous alert emails showing &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; rejoining the cluster and the servers moving back.&lt;br /&gt;
&lt;br /&gt;
=== Crashing an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Last test!&lt;br /&gt;
&lt;br /&gt;
As mentioned, we&#039;re going to cut the power to this node. We could just pull the power cables out and that would be perfectly fine. Downside to that is that it requires getting up, and who wants to do that?&lt;br /&gt;
&lt;br /&gt;
So we&#039;ll use the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_apc_snmp&amp;lt;/span&amp;gt; fence agent to call each PDU and turn off outlet #2, which powers &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As we saw in our initial round of fence testing, the initial fence attempt using [[IPMI]] will fail. Then the PDUs should be called and the outlets we turned off will be verified as off, then turned back on. &lt;br /&gt;
&lt;br /&gt;
If your server is set to boot when power is restored, or if you have it set to &amp;quot;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;Last State&amp;lt;/span&amp;gt;&amp;quot;, the server should boot automatically. If it stays off, simply call an &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;on&amp;lt;/span&amp;gt; action against it using &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;fence_ipmilan&amp;lt;/span&amp;gt;. It will be great practice!&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s watch the logs, kill the power, and look at the email alerts.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p01 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An alert!&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Warning! - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN1 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6360 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN1 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host&#039;s &amp;quot;FAN2 PSU1&amp;quot; fan speed has dropped below the minimum of 500 RPM!&lt;br /&gt;
  ok, 6480 RPM	-&amp;gt; ok, 0 RPM&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;FAN2 PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;Power Unit&amp;quot; has change!&lt;br /&gt;
  ok, 0x01	-&amp;gt; ok, 0x02&lt;br /&gt;
&lt;br /&gt;
Host sensor &amp;quot;PSU1 State&amp;quot; has change!&lt;br /&gt;
  ok, 0x02	-&amp;gt; bad!, 0x08&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is because we took our time killing the second power supply. The node stayed up long enough for a scan to run and it saw all power lost to its primary PSU, so its fans have died as well as the power itself vanishing. If you&#039;re in earshot on the node, you can probably hear an audible alarm, too.&lt;br /&gt;
&lt;br /&gt;
Lets finish the job.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fence_apc_snmp -a an-p02 -n 2 -o off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Success: Powered OFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Terminating drbd1_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: Restarting drbd1_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: PingAck did not arrive in time.&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: peer( Primary -&amp;gt; Unknown ) conn( Connected -&amp;gt; NetworkFailure ) pdsk( UpToDate -&amp;gt; DUnknown ) susp( 0 -&amp;gt; 1 ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: asender terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Terminating drbd0_asender&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Connection closed&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( NetworkFailure -&amp;gt; Unconnected ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver terminated&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: Restarting drbd0_receiver&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: receiver (re)started&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: conn( Unconnected -&amp;gt; WFConnection ) &lt;br /&gt;
Dec  5 18:38:02 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0&lt;br /&gt;
Dec  5 18:38:02 an-c05n01 rhcs_fence: Attempting to fence peer using RHCS from DRBD...&lt;br /&gt;
Dec  5 18:38:03 an-c05n01 corosync[27890]:   [TOTEM ] A processor failed, forming new configuration.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [QUORUM] Members[1]: 1&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [CPG   ] chosen downlist: sender r(0) ip(10.20.50.1) ; members(old:2 left:1)&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 corosync[27890]:   [MAIN  ] Completed service synchronization, ready to provide service.&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: dlm: closing connection to node 2&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 fenced[27962]: fencing node an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:05 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Trying to acquire journal lock...&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 fence_node[19868]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: helper command: /sbin/drbdadm fence-peer minor-1 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: new current UUID 982B45395AF5322D:AC7D34993319CF07:96949998C25B00D5:96939998C25B00D5&lt;br /&gt;
Dec  5 18:38:22 an-c05n01 kernel: block drbd1: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 fence_node[19898]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 7 (0x700)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: fence-peer helper returned 7 (peer was stonithed)&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: pdsk( DUnknown -&amp;gt; Outdated ) &lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: new current UUID 46F3B4E245FCFB01:20CEE1AD5C066F57:BF8A350BA62F87D1:BF89350BA62F87D1&lt;br /&gt;
Dec  5 18:38:23 an-c05n01 kernel: block drbd0: susp( 1 -&amp;gt; 0 ) &lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca dev 0.0 agent fence_ipmilan result: error from agent&lt;br /&gt;
Dec  5 18:38:26 an-c05n01 fenced[27962]: fence an-c05n02.alteeve.ca success&lt;br /&gt;
Dec  5 18:38:27 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Looking at journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Acquiring the transaction lock...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replaying journal...&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Replayed 3 of 5 blocks&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Found 12 revoke tags&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Journal replayed in 1s&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 kernel: GFS2: fsid=an-cluster-05:shared.0: jid=1: Done&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:storage_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Marking service:libvirtd_n02 as stopped: Restricted domain unavailable&lt;br /&gt;
Dec  5 18:38:28 an-c05n01 rgmanager[28154]: Taking over service vm:vm02-win2012 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm05-freebsd9 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet5 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Taking over service vm:vm06-solaris11 from down member an-c05n02.alteeve.ca&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 rgmanager[28154]: Service vm:vm02-win2012 started&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: device vnet6 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:29 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: device vnet7 entered promiscuous mode&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
Dec  5 18:38:30 an-c05n01 rgmanager[28154]: Service vm:vm06-solaris11 started&lt;br /&gt;
Dec  5 18:38:31 an-c05n01 rgmanager[28154]: Service vm:vm05-freebsd9 started&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 16 vnet6 fe80::fc54:ff:feb0:6caa UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 17 vnet7 fe80::fc54:ff:fe29:383b UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: Listen normally on 18 vnet5 fe80::fc54:ff:fe5e:291c UDP 123&lt;br /&gt;
Dec  5 18:38:33 an-c05n01 ntpd[2182]: peers refreshed&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 7(vnet5) entering forwarding state&lt;br /&gt;
Dec  5 18:38:44 an-c05n01 kernel: vbr2: port 8(vnet6) entering forwarding state&lt;br /&gt;
Dec  5 18:38:45 an-c05n01 kernel: vbr2: port 9(vnet7) entering forwarding state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see here that the log entries are almost the same as we saw when &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt; was crashed. The main difference is that the first fence attempt failed, as expected.&lt;br /&gt;
&lt;br /&gt;
Lets look at the timeline;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Event&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:02&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD detects the failure and initiates a fence.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:03&amp;lt;/span&amp;gt;&lt;br /&gt;
|Corosync detects the failure, reforms the cluster. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:05&amp;lt;/span&amp;gt;&lt;br /&gt;
|[[DLM]] blocks.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:22&amp;lt;/span&amp;gt;&lt;br /&gt;
|DRBD-called fence succeeds. We do not see the failed IPMI attempt in the log.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:26&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; initiated [[IPMI]] call fails, the [[PDU]]-based fence succeeds.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:27&amp;lt;/span&amp;gt;&lt;br /&gt;
|GFS2 cleans up &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/shared&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:28&amp;lt;/span&amp;gt;&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; begins recovery, boots lost servers.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;18:38:44&amp;lt;/span&amp;gt;&lt;br /&gt;
|The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;vnetX&amp;lt;/span&amp;gt; interfaces link the recovered servers to the bridge. Recovery is complete.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this case, recovery took 42 seconds, actually faster than the recovery of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;. This shows the difference in timings to detect losses. Normally, this is a little slower because of the time taken to declare the &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;IPMI&amp;lt;/span&amp;gt; fence method &amp;quot;failed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lets look again at the alerts from &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; triggered by the failure of &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Node an-c05n02.alteeve.ca; State change!&lt;br /&gt;
  Online, rgmanager	-&amp;gt; Offline&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Half a minute later;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n01 - State Change!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Changes have been detected in the cluster. If you anticipated this&lt;br /&gt;
change then there is no reason for concern. If this change was &lt;br /&gt;
unexpected, please feel free to contact support.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Service libvirtd_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
Service storage_n02; State change!&lt;br /&gt;
  started	-&amp;gt; stopped&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; (an-c05n02.alteeve.ca)&lt;br /&gt;
&lt;br /&gt;
VM vm02-win2012; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm05-freebsd9; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
VM vm06-solaris11; State change!&lt;br /&gt;
  started	-&amp;gt; started&lt;br /&gt;
  an-c05n02.alteeve.ca	-&amp;gt; an-c05n01.alteeve.ca&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n01.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unlike last time, we didn&#039;t see &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; disappear. This is because the fence completed, so &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt; didn&#039;t block when the monitoring system checked it. Half a minute later, the servers were already recovered so the alert system saw them move rather than recover.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s verify that the servers are indeed back up.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 18:56:04 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
=== Recovering an-c05n02 ===&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt; boots up, we&#039;ll get the usual &amp;quot;I&#039;m alive!&amp;quot; alert.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Subject: [ AN!CM ] - Alteeve&#039;s Niche! - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;) - an-c05n02 - Cluster Monitor Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster node&#039;s monitor program has started.&lt;br /&gt;
&lt;br /&gt;
Current State:&lt;br /&gt;
&lt;br /&gt;
--[ Cluster Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This node is not currently in the cluster.&lt;br /&gt;
&lt;br /&gt;
--[ Network Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bridge:   vbr2, MAC: 00:1B:21:81:C2:EA, STP disabled&lt;br /&gt;
Links(s): \- bond2&lt;br /&gt;
&lt;br /&gt;
Bond: bond0 -+- eth0 -+-&amp;gt; Back-Channel Network&lt;br /&gt;
             \- eth3 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth0 using MAC: 00:19:99:9C:A0:6C&lt;br /&gt;
    Prefer Slave: eth0&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth0        |       eth3        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6C | 00:1B:21:81:C2:EB |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond1 -+- eth1 -+-&amp;gt; Storage Network&lt;br /&gt;
             \- eth4 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth1 using MAC: 00:19:99:9C:A0:6D&lt;br /&gt;
    Prefer Slave: eth1&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth1        |       eth4        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:19:99:9C:A0:6D | A0:36:9F:07:D6:2E |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
Bond: bond2 -+- eth2 -+-&amp;gt; Internet-Facing Network&lt;br /&gt;
             \- eth5 -/&lt;br /&gt;
      &lt;br /&gt;
    Active Slave: eth2 using MAC: 00:1B:21:81:C2:EA&lt;br /&gt;
    Prefer Slave: eth2&lt;br /&gt;
    Reselect:     Primary always, after 120000 seconds&lt;br /&gt;
    Link Check:   Every 100 ms&lt;br /&gt;
    MTU Size:     1500 Bytes&lt;br /&gt;
&lt;br /&gt;
                 +-------------------+-------------------+&lt;br /&gt;
       Slaves    |       eth2        |       eth5        |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
    | Link:      | Up                | Up                |&lt;br /&gt;
    | Speed:     | 1000 Mbps FD      | 1000 Mbps FD      |&lt;br /&gt;
    | MAC:       | 00:1B:21:81:C2:EA | A0:36:9F:07:D6:2F |&lt;br /&gt;
    | Failures:  | 0                 | 0                 |&lt;br /&gt;
    +------------+-------------------+-------------------+&lt;br /&gt;
&lt;br /&gt;
--[ Storage Status ]--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adapter: #0&lt;br /&gt;
         Model:    RAID Ctrl SAS 6G 5/6 512MB (D2616)&lt;br /&gt;
         Revision: &lt;br /&gt;
         Serial #: &lt;br /&gt;
         Cache:    512MB&lt;br /&gt;
         BBU:      iBBU, pn: LS1121001A, sn: 18704&lt;br /&gt;
	 - Failing:      No&lt;br /&gt;
	 - Charge:       95 %, 65 % of design&lt;br /&gt;
	 - Capacity:     No / 841 mAh, 1215 mAh design&lt;br /&gt;
	 - Voltage:      4052 mV, 3700 mV design&lt;br /&gt;
	 - Cycles:       31&lt;br /&gt;
	 - Hold-Up:      0 hours&lt;br /&gt;
	 - Learn Active: No&lt;br /&gt;
	 - Next Learn:   Mon Dec 23 05:29:33 2013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     Array: Virtual Drive 0, Target ID 0&lt;br /&gt;
            State:        Optimal&lt;br /&gt;
            Drives:       4&lt;br /&gt;
            Usable Size:  836.625 GB&lt;br /&gt;
            Parity Size:  278.875 GB&lt;br /&gt;
            Strip Size:   64 KB&lt;br /&gt;
            RAID Level:   Primary-5, Secondary-0, RAID Level Qualifier-3&lt;br /&gt;
            Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU&lt;br /&gt;
            Bad Blocks:   No&lt;br /&gt;
&lt;br /&gt;
         Drive: 0&lt;br /&gt;
                Position:  disk group 0, span 0, arm 0&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      41 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DE9Z&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 1&lt;br /&gt;
                Position:  disk group 0, span 0, arm 1&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      42 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3DNG7&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 2&lt;br /&gt;
                Position:  disk group 0, span 0, arm 2&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      39 degrees Celcius&lt;br /&gt;
                Device:    Seagate ST3300657SS, sn: 17036SJ3E01G&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  278.875 GB&lt;br /&gt;
&lt;br /&gt;
         Drive: 6&lt;br /&gt;
                Position:  disk group 0, span 0, arm 3&lt;br /&gt;
                State:     Online, Spun Up&lt;br /&gt;
                Fault:     No&lt;br /&gt;
                Temp:      38 degrees Celcius&lt;br /&gt;
                Device:    HITACHI HUS156045VLS600 A42BJVWMYA6L&lt;br /&gt;
                Media:     Hard Disk Device&lt;br /&gt;
                Interface: SAS, drive: 6.0Gb/s, bus: 6.0Gb/s&lt;br /&gt;
                Capacity:  418.656 GB&lt;br /&gt;
&lt;br /&gt;
--[ Host Power and Thermal Sensors ]----------------------------------&lt;br /&gt;
&lt;br /&gt;
		+--------+------------+---------------+---------------+&lt;br /&gt;
 Power Supplies | Status |  Wattage   |  Fan 1 Speed  |  Fan 2 Speed  |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
|     PSU 1     | ok     | 90 Watts   | 6360 RPM      | 6480 RPM      |&lt;br /&gt;
|     PSU 2     | ok     | 100 Watts  | 6360 RPM      | 6360 RPM      |&lt;br /&gt;
+---------------+--------+------------+---------------+---------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   +--------------+--------------+--------------+&lt;br /&gt;
   Power Levels    |    State     |   Voltage    |   Wattage    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
| BATT 3.0V        | ok           | 3.14 Volts   | --           |&lt;br /&gt;
| CPU1 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU1 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| CPU2 1.8V        | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| CPU2 Power       | ok           | --           | 4.40 Watts   |&lt;br /&gt;
| ICH 1.5V         | ok           | 1.50 Volts   | --           |&lt;br /&gt;
| IOH 1.1V         | ok           | 1.10 Volts   | --           |&lt;br /&gt;
| IOH 1.1V AUX     | ok           | 1.09 Volts   | --           |&lt;br /&gt;
| IOH 1.8V         | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| iRMC 1.2V STBY   | ok           | 1.19 Volts   | --           |&lt;br /&gt;
| iRMC 1.8V STBY   | ok           | 1.80 Volts   | --           |&lt;br /&gt;
| LAN 1.0V STBY    | ok           | 1.01 Volts   | --           |&lt;br /&gt;
| LAN 1.8V STBY    | ok           | 1.81 Volts   | --           |&lt;br /&gt;
| MAIN 12V         | ok           | 12.06 Volts  | --           |&lt;br /&gt;
| MAIN 3.3V        | ok           | 3.37 Volts   | --           |&lt;br /&gt;
| MAIN 5.15V       | ok           | 5.15 Volts   | --           |&lt;br /&gt;
| PSU1 Power       | ok           | --           | 90 Watts     |&lt;br /&gt;
| PSU2 Power       | ok           | --           | 100 Watts    |&lt;br /&gt;
| STBY 3.3V        | ok           | 3.35 Volts   | --           |&lt;br /&gt;
| Total Power      | ok           | --           | 190 Watts    |&lt;br /&gt;
+------------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Temperatures   |   State   | Temp (*C) |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| Ambient        | ok        | 27        |&lt;br /&gt;
| CPU1           | ok        | 31        |&lt;br /&gt;
| CPU2           | ok        | 36        |&lt;br /&gt;
| Systemboard    | ok        | 43        |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
                 +-----------+-----------+&lt;br /&gt;
  Cooling Fans   |   State   |   RPMs    |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
| FAN1 PSU1      | ok        | 6360      |&lt;br /&gt;
| FAN1 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN1 SYS       | ok        | 4920      |&lt;br /&gt;
| FAN2 PSU1      | ok        | 6480      |&lt;br /&gt;
| FAN2 PSU2      | ok        | 6360      |&lt;br /&gt;
| FAN2 SYS       | ok        | 5100      |&lt;br /&gt;
| FAN3 SYS       | ok        | 4860      |&lt;br /&gt;
| FAN4 SYS       | ok        | 4980      |&lt;br /&gt;
| FAN5 SYS       | ok        | 5160      |&lt;br /&gt;
+----------------+-----------+-----------+&lt;br /&gt;
&lt;br /&gt;
--[ UPS Status ]------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Name:        an-u01          &lt;br /&gt;
Status:      ONLINE          Temperature:     33.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1038232403    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 54.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 05.0 / COM 02.1&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
Name:        an-u02          &lt;br /&gt;
Status:      ONLINE          Temperature:     32.0 *C&lt;br /&gt;
Model:       Smart-UPS 1500  Battery Voltage: 27.0 vAC&lt;br /&gt;
Serial #:    AS1224213144    Battery Charge:  100.0 %&lt;br /&gt;
Holdup Time: 55.0 Minutes    Current Load:    24.0 %&lt;br /&gt;
Self Test:   OK              Firmware:        UPS 08.3 / MCU 14.0&lt;br /&gt;
&lt;br /&gt;
Mains -&amp;gt; 122.0 Volts -&amp;gt; UPS -&amp;gt; 122.0 Volts -&amp;gt; PDU&lt;br /&gt;
&lt;br /&gt;
==[ Source Details ]==================================================&lt;br /&gt;
&lt;br /&gt;
Company: Alteeve&#039;s Niche!&lt;br /&gt;
Anvil!:  an-cluster-05&lt;br /&gt;
Node:    an-c05n02.alteeve.ca&lt;br /&gt;
Description:&lt;br /&gt;
 - Cluster 05 (Demo Cluster - &amp;quot;Tyson&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns, please don&#039;t hesitate to&lt;br /&gt;
contact support. &lt;br /&gt;
&lt;br /&gt;
                    https://alteeve.ca/w/Support&lt;br /&gt;
&lt;br /&gt;
                                                     Alteeve&#039;s Niche!&lt;br /&gt;
                                                      Cluster Monitor&lt;br /&gt;
======================================================================&lt;br /&gt;
--&lt;br /&gt;
You received this email because you were listed as a contact for the&lt;br /&gt;
Anvil! described in this email. If you do not wish to receive these&lt;br /&gt;
emails, please contact your systems administrator. AN!CM runs on&lt;br /&gt;
Anvil! nodes directly and are not sent by Alteeve&#039;s Niche!.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s log in and double check the state of affairs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:46:35 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Offline&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           (an-c05n02.alteeve.ca)                        stopped       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not connect to CMAN: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expected. Time to start &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;cman&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;rgmanager&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/cman start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting cluster: &lt;br /&gt;
   Checking if cluster has been disabled at boot...        [  OK  ]&lt;br /&gt;
   Checking Network Manager...                             [  OK  ]&lt;br /&gt;
   Global setup...                                         [  OK  ]&lt;br /&gt;
   Loading kernel modules...                               [  OK  ]&lt;br /&gt;
   Mounting configfs...                                    [  OK  ]&lt;br /&gt;
   Starting cman...                                        [  OK  ]&lt;br /&gt;
   Waiting for quorum...                                   [  OK  ]&lt;br /&gt;
   Starting fenced...                                      [  OK  ]&lt;br /&gt;
   Starting dlm_controld...                                [  OK  ]&lt;br /&gt;
   Tuning DLM kernel config...                             [  OK  ]&lt;br /&gt;
   Starting gfs_controld...                                [  OK  ]&lt;br /&gt;
   Unfencing self...                                       [  OK  ]&lt;br /&gt;
   Joining fence domain...                                 [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/rgmanager start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Starting Cluster Service Manager:                          [  OK  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Watch the status of the drbd resources and wait until both are &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;UpToDate&amp;lt;/span&amp;gt; on both nodes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs          ro               ds                     p  mounted  fstype&lt;br /&gt;
...    sync&#039;ed:    36.7%            (391292/612720)K&lt;br /&gt;
...    sync&#039;ed:    7.1%             (653544/699704)K&lt;br /&gt;
0:r0   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
1:r1   SyncTarget  Primary/Primary  Inconsistent/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wait a few...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/drbd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drbd driver loaded OK; device status:&lt;br /&gt;
version: 8.3.16 (api:88/proto:86-97)&lt;br /&gt;
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43&lt;br /&gt;
m:res  cs         ro               ds                 p  mounted  fstype&lt;br /&gt;
0:r0   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
1:r1   Connected  Primary/Primary  UpToDate/UpToDate  C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ready. &lt;br /&gt;
&lt;br /&gt;
Verify everything with &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;clustat&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:43 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:51:48 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Excellent!&lt;br /&gt;
&lt;br /&gt;
Ready to live-migrate the servers back now.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n01&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2012 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2012 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm05-freebsd9 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm05-freebsd9 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm06-solaris11 -m an-c05n02.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm06-solaris11 to an-c05n02.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:33 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, Local, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;an-c05n02&amp;lt;/span&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: nowrap;&amp;quot;|&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clustat &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Cluster Status for an-cluster-05 @ Thu Dec  5 21:54:36 2013&lt;br /&gt;
Member Status: Quorate&lt;br /&gt;
&lt;br /&gt;
 Member Name                                            ID   Status&lt;br /&gt;
 ------ ----                                            ---- ------&lt;br /&gt;
 an-c05n01.alteeve.ca                                       1 Online, rgmanager&lt;br /&gt;
 an-c05n02.alteeve.ca                                       2 Online, Local, rgmanager&lt;br /&gt;
&lt;br /&gt;
 Service Name                                  Owner (Last)                                  State         &lt;br /&gt;
 ------- ----                                  ----- ------                                  -----         &lt;br /&gt;
 service:libvirtd_n01                          an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:libvirtd_n02                          an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n01                           an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 service:storage_n02                           an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm01-win2008                               an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm02-win2012                               an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm03-win7                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm04-win8                                  an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm05-freebsd9                              an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm06-solaris11                             an-c05n02.alteeve.ca                          started       &lt;br /&gt;
 vm:vm07-rhel6                                 an-c05n01.alteeve.ca                          started       &lt;br /&gt;
 vm:vm08-sles11                                an-c05n01.alteeve.ca                          started       &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
That is beautiful.&lt;br /&gt;
&lt;br /&gt;
== Done and Done! ==&lt;br /&gt;
&lt;br /&gt;
That, ladies and gentlemen, is all she wrote!&lt;br /&gt;
&lt;br /&gt;
You should now be safely ready to take your &#039;&#039;Anvil!&#039;&#039; into production at this stage.&lt;br /&gt;
&lt;br /&gt;
Happy Clustering!&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
Here are some common problems you might run into.&lt;br /&gt;
&lt;br /&gt;
== SELinux Related Problems ==&lt;br /&gt;
&lt;br /&gt;
SELinux is a double-edged sword. It can certainly protect you, and it is worth having, but it can cut you, too. Here we cover a couple common issues.&lt;br /&gt;
&lt;br /&gt;
=== Password-less SSH doesn&#039;t work, but ~/.ssh/authorized_keys is fine ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve double-checked that you&#039;ve copied your public keys into a target node or server&#039;s &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;~/.ssh/authorized_keys&amp;lt;/span&amp;gt; file, it could be that the file&#039;s context is not correct. To check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how the context is &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt;? That should be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. So we need to update the context now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/authorized_keys&lt;br /&gt;
restorecon -r /root/.ssh/authorized_keys&lt;br /&gt;
ls -lahZ /root/.ssh/authorized_keys &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/authorized_keys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to log in to the target machine without a password.&lt;br /&gt;
&lt;br /&gt;
=== Live-Migration fails with &#039;[vm] error: Unable to read from monitor: Connection reset by peer&#039; ===&lt;br /&gt;
&lt;br /&gt;
When trying to migrate a server using the [[AN!CDB|dashboard]], you will see an error like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm01-win2008 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/var/log/messages&amp;lt;/span&amp;gt; you will see errors like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8474]: [vm] Migrate vm01-win2008 to an-c05n02.alteeve.ca failed:&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[8496]: [vm] error: Unable to read from monitor: Connection reset by peer&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: migrate on vm &amp;quot;vm01-win2008&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Mar 17 01:14:05 an-c05n01 rgmanager[3412]: Migration of vm:vm01-win2008 to an-c05n02.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can happen for two reasons;&lt;br /&gt;
&lt;br /&gt;
# You forgot to [[#Populate_known_hosts|populate &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt;]].&lt;br /&gt;
# The context on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/root/.ssh/known_hosts&amp;lt;/span&amp;gt; is not correct.&lt;br /&gt;
&lt;br /&gt;
It is usually the second case, so that is what we will address here.&lt;br /&gt;
&lt;br /&gt;
Check to see what context is currently set for &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The context on this file needs to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;. To change it, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts &lt;br /&gt;
ls -lahZ /root/.ssh/known_hosts &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 /root/.ssh/known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now be able to live-migrate your servers to the node.&lt;br /&gt;
&lt;br /&gt;
=== Attempting to Live Migrate Fails with &#039;Host key verification failed.&#039; ===&lt;br /&gt;
&lt;br /&gt;
Attempting to Live-Migrate a server from one node to another fails with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Failed; service running on original owner&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the system log, we see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migrating vm:vm02-win2008r2 to an-c05n01.alteeve.ca&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10618]: [vm] Migrate vm02-win2008r2 to an-c05n01.alteeve.ca failed:&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[10640]: [vm] error: Cannot recv data: Host key verification failed.: Connection reset by peer&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: migrate on vm &amp;quot;vm02-win2008r2&amp;quot; returned 150 (unspecified)&lt;br /&gt;
Aug  4 19:18:41 an-c05n02 rgmanager[3526]: Migration of vm:vm02-win2008r2 to an-c05n01.alteeve.ca failed; return code 150&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has two causes:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[AN!Cluster_Tutorial_2#Populate_known_hosts|/root/.ssh/known_hosts]]&amp;lt;/span class=&amp;quot;code&amp;quot;&amp;gt; isn&#039;t populated.&lt;br /&gt;
# The &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;[[selinux]]&amp;lt;/span&amp;gt; context is not correct.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve confirmed that your &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt; file is correct, then you can verify you&#039;ve hit an SELinux issue by running &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 0&amp;lt;/span&amp;gt; on both nodes and trying again. If the migration works, you have an SELinux issue. Re-enable &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;setenforce 1&amp;lt;/span&amp;gt; and we&#039;ll fix it.&lt;br /&gt;
&lt;br /&gt;
If we look at the current context:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:admin_home_t:s0 id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We see that it is currently &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;admin_home_t&amp;lt;/span&amp;gt; on &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;id_rsa.pub&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;known_hosts&amp;lt;/span&amp;gt;, but &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;authorized_keys&amp;lt;/span&amp;gt; is fine. We want all of them to be &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ssh_home_t&amp;lt;/span&amp;gt;, so we&#039;ll have to fix it.&lt;br /&gt;
&lt;br /&gt;
{{note|1=Check both nodes! If one node has a bad context, it&#039;s likely the other node is bad, too. Both nodes will need to be fixed for reliable migration.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/known_hosts&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa&lt;br /&gt;
semanage fcontext -a -t ssh_home_t /root/.ssh/id_rsa.pub &lt;br /&gt;
restorecon -r /root/.ssh/known_hosts&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa&lt;br /&gt;
restorecon -r /root/.ssh/id_rsa.pub &lt;br /&gt;
ls -lahZ /root/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
drwx------. root root system_u:object_r:admin_home_t:s0 .&lt;br /&gt;
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 ..&lt;br /&gt;
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys&lt;br /&gt;
-rw-------. root root system_u:object_r:ssh_home_t:s0  id_rsa&lt;br /&gt;
-rw-r--r--. root root system_u:object_r:ssh_home_t:s0  id_rsa.pub&lt;br /&gt;
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can try migrating again, and this time it should work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
clusvcadm -M vm:vm02-win2008r2 -m an-c05n01.alteeve.ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Trying to migrate vm:vm02-win2008r2 to an-c05n01.alteeve.ca...Success&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed!&lt;br /&gt;
&lt;br /&gt;
== Other Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These tutorials are not directly related to this one, but might be of use to some.&lt;br /&gt;
&lt;br /&gt;
* [[Anvil! Tutorial 2 - Growing Storage]]&lt;br /&gt;
* [[Configuring Brocade Switches]]&lt;br /&gt;
* [[Anvil! m2 Tutorial]]&lt;br /&gt;
* [[Configuring Network Boot on Fujitsu Primergy]]&lt;br /&gt;
* [[Configuring Hardware RAID Arrays on Fujitsu Primergy]]&lt;br /&gt;
* [[Encrypted Arrays with LSI SafeStore]]&lt;br /&gt;
* [[Configuring an APC AP7900]]&lt;br /&gt;
* [[Configuring APC SmartUPS with AP7930 Network Cards]]&lt;br /&gt;
* [[Anvil! m2 Tutorial - Installing RHEL/Centos]]&lt;br /&gt;
&lt;br /&gt;
== Older Issues From Previous Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These links have older troubleshooting issues that probably aren&#039;t needed anymore, but you never know.&lt;br /&gt;
&lt;br /&gt;
* [[Managing Drive Failures with AN!CDB]]&lt;br /&gt;
* [[2-Node Red Hat KVM Cluster Tutorial - Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
{{footer}}&lt;/div&gt;</summary>
		<author><name>Misko</name></author>
	</entry>
</feed>