Setting up a HA cluster in 20 minutes + avoiding common errors
Goedemorgen. Mijn naam is Sander en ik heb mijn cluster overgemaakt. Daar is het. En de probleem van dit talk is dat we het gaan configureren. Het is gewoon verbeterd omdat er wat weerste problemen zijn met het video-uitput. Ik weet niet wat het doen is, maar ik weet dat het normaal goed werkt als ik het verbeterd heb. Ik vind het rood op deze demo-machine. Het is de enige gebruik die er is. Het ziet er goed uit. Dus ik heb 10 slijten hier. Ik wil niet veel slijten doen. Ik wil de demo doen meestal. De titel van deze seizoen is het creëren van een cluster in 20 minuten. Dit is een seizoen waar ik normaal 3 uur requesten om alles te coveren. De jongens die deze minicone organiseren zijn het kinderlijk om 20 minuten te geven om de configuratie van een cluster te praten. Ik hoop dat je het in een 20 minuutig tijdvleemt. Ik kan niet alle details coveren. Maar ik zou je een ruffe uitleiding kunnen geven. Als je meer interesse hebt, de boek Practical Guide to Xen high availability. Ik heb het als boek over Xen high availability. Ik probeer het niet te zetten hier. Natuurlijk ben je wel welkom. Just send me een e-mail en ik zal blij zijn om je de PDF te senden. Het is een boek dat ik... Ik geef voor vreemd en normaal mensen vinden het. Dus sommige van ze zijn het te zetten. Als je vraagt wat een weird accent is, dat is omdat ik uit Nederland ben. Ik heb de dag van vorige dag. In mijn tijdzone is het 3 uur nu, ik geloof. Dus als ik volle sleep, help me, wake me up. Je bent meer dan welkom om vragen te vragen om het makkelijker voor mij te maken om te blijven. En als je mijn Engels niet begint, dan ben ik altijd glad om het opnieuw in Duits, in Frans of in Duits. Iedereen die Duits spreekt hier. Goedemorgen. Goedemorgen, heel goed. Wees welkom. Weet je van de Nederlandse aandacht? Ik weet het. Oké. Ik kom vandaag. Oké, goed. Laten we toch eindigen. Dus, eigenlijk, dit is de hele setup van de cluster. 3 bullet points. Dus de eerste waarom we de cluster moeten zetten. We moeten een cluster communicatieleer zetten. De communicatieleer is een coro syncleer.  Het is basically a configuration file that makes sure that nodes in the cluster can find each other. By default, that works on multicast. So the nodes are all configured to use a specific multicast address. And all of the nodes that are multicasting on the same address, they tend to find each other and add each other to the cluster automatically. I'll show you how that works. Then we need to start up the cluster service. And then we need to configure resources. If you want to configure resources, normally I like using the CRM interface, which is a command shell interface. There is also the CRM GUI, which is a graphical interface. It gives more information, so in this session I will show you how to do it with the CRM GUI. So enough slides for the moment. Let's go to demo. Dit is Suzer Linux Enterprise Server. One of the nice thing it has is the YAST configuration utility, which helps setting up the corrosion configuration in an easy way. It's easier to see what exactly it is doing while you are using YAST. So instead of talking through the configuration file, I talk through the configuration as it's offered by YAST. Of course, the inconvenience is that it's slow. The VI on the configuration files much faster. So basically this is everything you need to do in order to set up the cluster membership layer. What you can see here is first that there's a communications channel. The channel is the bind network address. This typically is the network address where the cluster has to send its packets over to get in touch with the other nodes. Typically, you would design a nice networking solution using redundant links and bond interfaces to make sure that the cluster will never lose its network connection. Because if it can't reach the other nodes anymore, well, that means that the other node is no longer available and that means that the cluster has to do something. Then you need to configure a multicast address. Ik heb een random multicast adres gekregen van de 239 range. De 239 range is gebruikt voor private multicasting. En je kunt er zeker zijn dat je binnen die range geen hardware gebruikt hebt van default. En we hebben ook de multicast port nodig. In de cluster hebben alle nodes een node ID.  De node ID moet uniek zijn. Als je de optie hebt om de node ID automatisch te genereren, krijg je een uniek node ID automatisch. In het geval gebruik je verschillende links voor de cluster communicatie. Dat is de top item die we hebben hier, de bind network adres. Je kunt specifieren welke protocol je kunt gebruiken. In mijn situatie is het de non-protocool, want ik heb geen redonatie. Je kunt het op de active en passief zetten. Meer configuratie, veiligheid. Je kunt de veiligheid op de veiligheid configureren. Dit is heel belangrijk om zeker te maken dat je niet meer nodes in de cluster hebben gehouden. In de vorige versie van deze software, was het niet zo voldoende. En wat er gebeurd was, was dat ik mijn laptop op de customer site en we gebruikten hetzelfde broadcast over hetzelfde network. En mijn node appeared in de cluster. En het was hard om het eruit te krijgen. Dus als je er niet meer problemen hebt, maak je ervoor om de authenticeerheden te ontdekken. Dat creëert een keyfile die je kunt copyeren, die functioneert als een shared secret om te zorgen dat er geen nodes automatisch opgepareerd zijn. Nu, de service zelf, dit spreekt voor hetzelfde. En dat is genoeg, we kunnen hier finiseren. Nu, de resultaat is in de configuratie vijl, de ETC Corrosing. De naam van de configuratie vijl is Corrosing.com. En natuurlijk kan je de vijl gebruiken om de configuratie hier te creëren. Als je de configuratie van Jals hebt gezien, is het niet zo hard. Is dat een vraag? Ja, bedankt, ik ben er niet bezig met dat. Dat is beter. Ik ben een beetje veranderd aan de linker. Dus als je de Corrosing laag hebt configurat op alle nodes in de cluster, zullen we automatisch elkaar vinden, zodat je de service ook begint te starten. Op de SUSE Linux Enterprise Server, de naam van de service is OpenAIS. Dus laten we een service openAIS status doen. En het geeft ons dat de service er nu is gegaan. Nu, ik bedoel nooit als het me vertelt dat het gegaan is. Dus een andere manier om te zien dat het echt iets doet is om de CRM-on-de-score MON-tool te gebruiken. CRM is een essentieel deel van de cluster. Het is een clusor-resource manager.  Het is een deel van de clusor die op welke nodes in de clusor-resources gaat worden gegaan. En CRM-MON is een monitoring tool. Er zijn andere CRM-tools available op jouw computer ook. Je moet gewoon CRM-tab-tab voor auto-completion doen, want het heeft te veel opties. Het is niet auto-completie, maar het stelt allemaal de opties dat je ervoor hebt. Je zal deze commanden appregen wanneer je een clusor uit de command-lijn werkt. Nu, hier wil ik CRM-MON doen. En een CRM-MON stelt dat ik een clusor heb, die is op en rond. De deel van de clusor is niet de domain-controller. Het is de designator-coordinator. Het is, wel, de masternode in de clusor. De node dat synchronisert de CIB.xml. CIB.xml is de koorkonfiguration van de clusor die moet synchroniseren tussen alle nodes in de clusor. Nu, wat je hier kunt zien, is dat we een patissie hebben zonder quorum. Wat is quorum? Quorum is de minimale aantal nodes die je zou verwachten te zijn in de clusor. En typisch zijn clusor's van twee nodes. Zodat van één. Ik wilde niet te veel laptops nemen over naar Australië. Dus ik heb een eennode clusor hier. Het is het gevoel om het. Een node konvogelig te verwachten. Voeten en we hebben nog geen resources konvogelig. Oké, en dat is de volgende deel van mijn presentatie. De configuratie van resources. Nu, in order om dat te doen, ik ga C.R.M.Gooie gebruiken. En C.R.M.Gooie, op beeld wil je een useraccount hA clusor. Er is een groep ontwikkeld op jouw computer wanneer je de software installeert. Het is een hA groep. Nog een user die een member van de hA groep kan configureren de clusor met C.R.M.Gooie. Ik gebruik de beeldgevoelde user, die is hA clusor. Dus laten we de C.R.M.Gooie beginnen. Er is niets te zien. In order om het te laten zien iets, ik moet de login naar de clusor. Dus dat is mijn user naam server. Dat is gewoon de lokale IP adres, de loopback adres, die is goed genoeg. Voor deze probleem. Ik moet de login. Het zal een paar seconden nemen voor het om de informatie uit de server te updatesen. Het is eigenlijk wat het doet wanneer het informatie uit de server updates. We hebben de CIB, CIB.xml. Dat is de core component van de clusor.  En het is reed in de CIB configuratie dat er op de designatie, de coördinatie. Je kan hier mijn current CIB configuratie zien. Dat is heel volledig. Maar in de CIB configuratie, je kan zien de deel die C.R.M.Gooie. Met alle generale parameters voor de clusor. Je kan zien de nodes deel om alle nodes die in de clusor te ontdekken. Je kan zien de resources. Nou, we hebben nog niet meer resources. Dus laten we gaan en creëren wat resources in deze mooie clusor. Dus dit is een grafische overvuur. En alles wat je wilt zien in de grafische overvuur is een groene bol. Want als je niets ziet, maar groene bols, dat betekent dat de clusor is helemaal operatie. Nou, er zijn twee deel in de configuratie, de deel en de management deel. Natuurlijk om een configuratie te creëren, moet ik naar de configuratie resources gaan. Zoals je kunt zien, er zijn veel generale properties die je kunt zetten. Ik zal over een aantal van die properties later in deze sessie als ik de vijf dingen discussieer ga, om het uit te vervoeren als het een pacemaker hoge availability clusor is. Voor nu wil ik creëren een resource, een heel belangrijk resource, de IP adres. Het is gewoon een dumme resource, maar voor demonstratie en purposes, het is de easiest resource om de clusor te configureren. Dus ik ga een clusor IP adres hier configureren. En je zal zien wat de procedure is die je moet gaan door wanneer je iets zo zet. Als ik op de ad klik, vraagt me wat je precies wilt. Ik heb vier verschillende opties hier. Ik kan een primitief, een groep, een clon of een master creëren. Nu, in de meeste situaties, je zou een primitief creëren, wat eigenlijk een indipendent service is die je wilt runnen in de clusor. Een groep is, wel, een groep van primitiefs. Als je bijvoorbeeld een patchy wilt zetten voor hoge availabiliteit, kun je typisch primitiefs creëren zoals een IP adres, een filesystemresource en een patchy-webserver en neemt ze allemaal samen in de groep. En omdat ze in de groep zouden zijn, dat betekent dat de clusor ze aan te loaden en ook in een specifieke orde. Dat is leuk, maar voor de purposes van deze demonstratie ga ik niet doen. Dan hebben we de clon.  De clon is een primitief dat moet beïnactiverend zijn met bepaalde tijds simultanelijk. Dus typisch kan de clon iets zoals een database zijn. Als je wilt hebben runnen op drie verschillende noten in de clusor met dezelfde tijd. Of een clusor-aware filesystem, bijvoorbeeld. OCFS2 is een exemple van zo'n clusor-aware filesystem. Je wilt het typisch op beveiligd met bepaalde noten simultanelijk. Dus voor die cases zou je de clon chooseen. De master is een typisch example van de clon in die een van de clon-resourcen acteert als een master waar de andere slaven zijn. Ik klik oké en ik moet een id geven. Mijn ip. Het klopt als een mooie naam. En dan moet ik specifiek welke class van primitief ik wil gebruiken. Nu, er zijn vier van hem. De meeste tijd gebruiken we OCFS. OCFS staat voor open clusor framework. Het is een open standard dat bevindt hoe de resources moeten bemanningen in de clusor. Maar in order te gebruiken, OCFS, je moet een OCFS resource agent. De resource agent is zoals een script. Een script dat lijkt een beetje als de in-it script die je in je run-levels vindt, typisch. Je kunt zeggen dat een OCFS script een in-it script op steroids is. Dus als het available is, zou je altijd een OCFS gebruiken. Als het niet available is, kan je LSB gebruiken. LSB, die staat voor Linux Standard Base, die is gewoon een typisch in-it script dat je in de clusor kan gebruiken. Dan optie nummer 3 is hardbeat. Hardbeat is een clustering oud style. Het is een resource type dat je altijd moet proberen te vervoeren. Het is echt oud. Het is lame. Je wilt het niet meer gebruiken. En het is alleen voor de probleem van bepaalde competitie. Het zou leuk zijn als iemand zijn resource ontwikkeld heeft. Het is een hardbeat resource. En dan hebben we Stonif. Dat is het mooiste acronym dat je kunt vinden in IT. Het stelt voor de andere node in de hoofd. De idee van Stonif is dat als in een clusor node 1 zegt dat node 2 niet meer available is, node 2 moet echt betermineerd zijn. Dus node 1 gebruikt een hardbeat mechanism om node 2 in de hoofd te schuien. En het gaat naar beneden. En wilt het naar beneden, kun je zeker dat de resources kunnen worden aangeven veilig.  En dat is belangrijk omdat, nou, als je niet je kunt zien wat kritische issues. Ik heb het eens gezien dat de andere node niet in de hoofd schuurd was. En het resultaat was dat mijn EXT3 veiligzaam twee keer in de clusor ontwikkeld werd. En dat twee node samen schuien op mijn EXT3 veiligzaam. Het is ongeveer 8 seconden om te vinden dat het gebeurde. Het is ongeveer 4 uur om de EXT3 veiligzaam te repareren. Stonif is essentieel. Dus in dit exemple ga ik voor de OCF. Nu hebben we de provider. De provider is waar de OCF script komt. Het maakt geen sens op mij, de verschillende categorieken. Dus ik denk altijd en. Ik denk dat hardbeat de provider is voor de IP adres. Dus we zien de list van de available OCF scripts hier. De een die ik nodig is de IP adres. Initieel staat van de resource is stoppen dat betekent dat de clusor de resource van te creëren maar het wil automatisch starten de resource. Ik wil dat zetten om het te starten zodat het automatisch komt. En dan hebben we de optie add monitor operation. Resource monitoring betekent dat de clusor actief gaat checken als de resource is nog available. En dat is essentieel omdat het betekent dat als je resource gaat weg en je een resource monitort de clusor kan vertellen Hey, de resource is weg. Let's starten het weer. En dat is een van de het belangrijkste deel van een hoge available solution. Dus nu doe ik voor en het vraagt me voor de instantie attributes. De instantie attributes is eigenlijk de property van de resource zelf. Voor een IP adres het zet me alle de mandatory instantie attributes die is een IP adres. Dus ik doe edit en ik geef het een waal zoals 192.168.1.101 of wat. Ik doe oké. En als je vraagt of we meer instantie attributes klik add weer. Doe de drop-down list en je zal zien de andere instantie attributes die de resource agenten provideert. Doe de instantie attributes die je denk dat je moet. Zoals je kunt zien, alleen de IP adres is hier nodig. Dus omdat het alleen de IP adres nodig is. Ik ga niet doen iets anders. Ik ga aan appellen dat creëert de resource in de clusor. Laten we zien van de management perspective. O, daar.  Mijn resource is niet reis. Oeps. Did I feel my demo? No. I made critical error number one while setting up this cluster. So let's move over to the next part which will be basically in my presentation which is about critical errors that you should try to avoid at all times. We have had that common problems and errors. So most of the items that I'm going to talk about now are about some generic cluster properties. And when things go wrong while setting up the cluster it's often related to one of these. Now I can tell you I've set up somewhere between 10 and 15 different clusters I think. I have made all of those critical errors myself and I can assure you that the cluster is not going to work if you try to make them as well. Now the first of them is a no quorum policy. That's a property that you can configure for the cluster. A generic property that you can set from the graphical user interface that we have just seen. And this property decides what the cluster is going to do if it doesn't have quorum. That means that if you have a four node cluster and you lose half of the nodes quorum typically is majority in the cluster so if you lose two nodes in a four node cluster you will lose quorum. The default setting for no quorum policy is stop which means that everything stopped which isn't very convenient. So there are some other options as well that you can choose from. What I like a lot is ignore. I don't care if I lose quorum because while setting up the cluster I take care that one single node in my four node cluster can handle all of the resources in the cluster. So if I just have one remaining node in the cluster I want my resources to run all of them on the one single node. I don't care about quorum. I don't like quorum. Other options you can freeze the current situation so nothing will be stopped resource-wise but nothing will be moved in the cluster either of you can do a suicide which is useful in some specific cases. Even more important no stonif. I really hate this option because they have changed it in heartbeat somewhere between version 2.0.7 and 2.0.8.  The old setting was for no stonif. The old setting for stonif enabled was that even if you don't have stonif well the cluster will run your resources anyway. The new and current setting is if you don't have stonif the cluster doesn't start any resources. My example of the IP address we have seen that I configured my IP address correctly. The only reason why it's not running is because I didn't configure stonif. Now what exactly is your stonif solution? Your stonif solution is typically a hardware device that is capable of shutting down the other node. Like a REC PDU for example. In a REC PDU you can talk to the REC PDU by telnet and tell the REC PDU hey shut off port number 4 or like a DRAC or an ILO interface board in your server or another solution which I like a lot is an SBD which stands for Split Brain Detector which is a dedicated petition that you create on your SAN. All the nodes talk to the dedicated SBD petition and if one of the nodes seems to be down the cluster writes a poison pill for that node to the SBD petition. And if the node in question sees the poison pill well it will eat it and it will stop. It will go into a kernel panic. Nice mechanism, also particularly nice because it's easy and cheap to set up. You don't need any specific hardware if you want to try the cluster for yourself. Common error number 3 is resource monitoring. You always want resource monitoring on your resources because without resources the cluster will all without monitoring I mean the cluster will always be happy about the resource and it will always show your resource as available which might not be the case because you didn't use any resource monitoring. Starting resources is not a common error. Now if you configure the cluster the cluster wants to take care of starting and stopping resources in your environment. Now why is that a problem? Well on many Linux distributions if you install for example Apache Apache will be added to your run levels automatically. So normally the distribution assumes that if you install a service that Linux needs to start the service. 