Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[Redhat-cluster-suite] Custom applicatie gebruiken

Pagina: 1
Acties:

  • Rainmaker
  • Registratie: augustus 2000
  • Laatst online: 13-05 20:44
Hallo iedereen.

Ik ben voor de hobby bezig een cluster te maken van VirtualBox. Ik wil dus VM's kunnen failoveren, niet een cluster van 2 VM's maken.

Ik heb hiervoor een test-desktopje, waar ik even snel een single-node cluster van heb gemaakt. Echter; ik kom er niet uit met rgmanager.

Ik wil iets hebben wat ervoor zorgt dat rgmanager VirtualBox (of eigenlijk VBoxHeadless) als resource gaat zien.

Dit document geeft een redelijk uitgebreide beschrijving van, naar eigen zeggen, alle opties in cluster.conf.

Helaas is er over de <service> en <resource> tag niets anders dan:
code:
1
Tag: <rm> The RM block holds resources, failover domains and any number of 'group' (\= resourcegroup) blocks

te vinden...

Volgens deze site is het wel mogelijk om eigen scripts te schrijven en die door rgmanager te laten gebruiken, maar ik kan nergens vinden hoe dan.

Zoals het hoort, staat er op deze server natuurlijk geen system-config-cluster, luci of ricci (sterker nog, het is een Debian server met redhat-cluster-suite ge'apt-get).

Weet iemand iets van documentatie te vinden hoe ik "eigen" scripts in cluster.conf kan defineren?

Dit is de cluster.conf die ik tot dusver heb verzonnen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0"?>
<cluster name="vboxcluster" config_version="5">
<cman expected_votes="1">
</cman>
<fence_daemon post_fail_delay="1" post_join_delay="3" clean_start="0"/>
<fencedevices>
        <fencedevice name="human" agent="fence_manual"/>
</fencedevices>

<clusternodes>
        <clusternode name="oread" nodeid="1">
                 <fence>
                        <method name="fence1">
                                <device name="human"/>
                        </method>
                </fence>
        </clusternode>
</clusternodes>

<rm>
        <failoverdomains>
                <failoverdomain name="vboxdom">
                        <failoverdomainnode name="oread" priority="1"/>
                </failoverdomain>
        </failoverdomains>
        <resources>
                <fs device="/dev/sda2" mountpoint="/boot" name="bootmount"/>
        </resources>
        <service autostart="1" recovery="restart" domain="vboxdom" name="node1">
                <fs ref="bootmount" />
        </service>
</rm>

</cluster>

De <fs> tag is eigenlijk een placeholder voor wat er echt moet gaan komen. Het "cluster" werkt wel zoals het hoort; als ik /boot unmount, staat deze in een paar seconde weer gemount.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@oread:~# clustat -l
Cluster Status for vboxcluster @ Thu Oct  7 22:13:47 2010
Member Status: Quorate

 Member Name                                           ID   Status
 ------ ----                                           ---- ------
 oread                                                     1 Online, Local, rgmanager

Service Information
------- -----------

Service Name      : service:node1
  Current State   : started (112)
  Owner           : oread
  Last Owner      : none
  Last Transition : Thu Oct  7 03:19:16 2010

PS. ik ben op de hoogte van de alternatieven om VM's over te kunnen failen op cluster basis, bijvoorbeeld ganeti, ESX etc. Maar ik wil dit in de toekomst ook voor andere applicaties kunnen gebruiken... Virtualbox is even een "test case".

Rainmaker wijzigde deze reactie 08-10-2010 10:44 (23%)

We are pentium of borg. Division is futile. You will be approximated.


  • silentsnake
  • Registratie: september 2003
  • Laatst online: 17-05 08:37
Je mist het één en ander in je resource management config :) Hierbij een voorbeeldje hoe ik thuis m'n 3 node RHEL cluster op ESX draai (ja lekker nuttig, ik weet het, maar gewoon in het kader omdat het kan)

Let op dat in de <service> tag het belangrijk is om de volgorde en de idents goed te zetten, dat geeft namelijk de volgorde aan van hoe een service moet starten. In mijn geval moet dus eerst het GFS volume mounten, het IP address moet geassigned worden aan m'n interface en daarna pas start m'n service.

Nog een tip, je moet ten alle tijden een init script gebruiken die een start, stop en status functie ondersteunt - dit is wat de cluster suite gebruikt om services te stoppen, starten en kijken of ze nog draaien.

En voor als je je afvraagd waarom ik geen quorum device gebruik - dit werkt niet lekker op ESX om wat voor reden dan ook. De nodes schrijven niet snel genoeg naar het quorum device en worden er steeds uitgeknikkert. Kan natuurlijk ook nog aan m'n hardware liggen - ik heb immers maar een PCtje en geen gecertificeerde hardware.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?xml version="1.0"?>
<cluster name="wcluster" alias="wcluster" config_version="2010082909">
   <cman expected_votes="1" two_node="0">
      <multicast address="229.0.0.30" interface="eth1"/>
   </cman>
   <fence_daemon clean_start="0" post_fail_delay="8" post_join_delay="30"/>
   <clusternodes>
      <clusternode name="node1-hb" nodeid="1" votes="1">
         <fence>
            <method name="1">
               <device name="fence_node1"/>
            </method>
         </fence>
      </clusternode>
      <clusternode name="node2-hb" nodeid="2" votes="1">
         <fence>
            <method name="2">
               <device name="fence_node2"/>
            </method>
         </fence>
      </clusternode>
      <clusternode name="node3-hb" nodeid="3" votes="1">
         <fence>
            <method name="2">
               <device name="fence_node3"/>
            </method>
         </fence>
      </clusternode>
   </clusternodes>
   <fencedevices>
      <fencedevice name="fence_node1" agent="fence_vmware_ng" ipaddr="vsphere" login="rhel_fence" passwd="xxxx" port="node1"/>
      <fencedevice name="fence_node2" agent="fence_vmware_ng" ipaddr="vsphere" login="rhel_fence" passwd="xxxx" port="node2"/>
      <fencedevice name="fence_node3" agent="fence_vmware_ng" ipaddr="vsphere" login="rhel_fence" passwd="xxxx" port="node3"/>
   </fencedevices>
   <rm>
      <failoverdomains>
         <failoverdomain name="prefer_node1" ordered="1" restricted="0">
            <failoverdomainnode name="node1-hb" priority="1"/>
            <failoverdomainnode name="node2-hb" priority="2"/>
            <failoverdomainnode name="node3-hb" priority="3"/>
         </failoverdomain>
         <failoverdomain name="prefer_node2" ordered="1" restricted="0">
            <failoverdomainnode name="node1-hb" priority="3"/>
            <failoverdomainnode name="node2-hb" priority="1"/>
            <failoverdomainnode name="node3-hb" priority="2"/>
         </failoverdomain>
         <failoverdomain name="prefer_node3" ordered="1" restricted="0">
            <failoverdomainnode name="node1-hb" priority="3"/>
            <failoverdomainnode name="node2-hb" priority="2"/>
            <failoverdomainnode name="node3-hb" priority="1"/>
         </failoverdomain>
      </failoverdomains>
      <resources>
          <clusterfs name="fs_apache" device="/dev/mapper/vgdata-apache" force_unmount="1" fsid="1" fstype="gfs" mountpoint="/var/www" options="noquota,noacl"/>
          <clusterfs name="fs_mysql" device="/dev/mapper/vgdata-mysql" force_unmount="1" fsid="2" fstype="gfs" mountpoint="/var/lib/mysql" options="noquota,noacl"/>
          <clusterfs name="fs_postfix" device="/dev/mapper/vgdata-postfix" force_unmount="1" fsid="3" fstype="gfs" mountpoint="/var/spool/mail" options="noquota,noacl"/>
          <clusterfs name="fs_svn" device="/dev/mapper/vgdata-svn" force_unmount="1" fsid="4" fstype="gfs" mountpoint="/mnt/svn" options="noquota,noacl"/>
          <clusterfs name="fs_tomcat" device="/dev/mapper/vgdata-tomcat" force_unmount="1" fsid="5" fstype="gfs" mountpoint="/var/lib/tomcat5" options="noquota,noacl"/>

          <ip address="192.168.178.150" monitor_link="1"/>
          <script name="script_apache" file="/etc/init.d/httpd"/>

          <ip address="192.168.178.151" monitor_link="1"/>
          <script name="script_mysql" file="/etc/init.d/mysqld"/>

          <ip address="192.168.178.152" monitor_link="1"/>
          <script name="script_postfix" file="/etc/init.d/postfix"/>
          <script name="script_spamd" file="/etc/init.d/spamassassin"/>
          <script name="script_clamav" file="/etc/init.d/clamd"/>
          <script name="script_clamsmtpd" file="/etc/init.d/clamsmtpd"/>

          <ip address="192.168.178.153" monitor_link="1"/>
          <script name="script_dovecot" file="/etc/init.d/dovecot"/>

          <ip address="192.168.178.154" monitor_link="1"/>
          <script name="script_svn" file="/etc/init.d/subversion"/>
          <script name="script_tomcat" file="/etc/init.d/tomcat5"/>

          <ip address="192.168.178.155" monitor_link="1"/>
          <script name="script_pound" file="/etc/init.d/pound"/>
      </resources>

      <service name="apache" autostart="1" domain="prefer_node1" exclusive="0" recovery="restart">
         <ip ref="192.168.178.150"/>
         <clusterfs fstype="gfs" ref="fs_apache">
            <script ref="script_apache"/>
         </clusterfs>
      </service>
      <service name="mysql" autostart="1" domain="prefer_node2" exclusive="0" recovery="restart">
         <clusterfs fstype="gfs" ref="fs_mysql">
            <script ref="script_mysql"/>
         </clusterfs>
         <ip ref="192.168.178.151"/>
      </service>
      <service name="postfix" autostart="1" domain="prefer_node3" exclusive="0" recovery="restart">
         <clusterfs fstype="gfs" ref="fs_postfix">
            <script ref="script_postfix"/>
            <script ref="script_spamd"/>
            <script ref="script_clamav"/>
            <script ref="script_clamsmtpd"/>
         </clusterfs>
         <ip ref="192.168.178.152"/>
      </service>
      <service name="dovecot" autostart="1" domain="prefer_node3" exclusive="0" recovery="restart">
         <clusterfs fstype="gfs" ref="fs_postfix">
            <script ref="script_dovecot"/>
         </clusterfs>
         <ip ref="192.168.178.153"/>
      </service>
      <service name="svn" autostart="1" domain="prefer_node1" exclusive="0" recovery="restart">
         <clusterfs fstype="gfs" ref="fs_svn">
            <script ref="script_svn"/>
         </clusterfs>
         <ip ref="192.168.178.154"/>
      </service>
      <service name="tomcat" autostart="1" domain="prefer_node1" exclusive="0" recovery="restart">
         <clusterfs fstype="gfs" ref="fs_tomcat">
            <script ref="script_tomcat"/>
         </clusterfs>
         <ip ref="192.168.178.154"/>
      </service>
      <service name="pound" autostart="1" domain="prefer_node2" exclusive="0" recovery="restart">
         <script ref="script_pound"/>
         <ip ref="192.168.178.155"/>
      </service>
   </rm>
</cluster>

En als het goed is dan ziet het er uiteindelijk zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Cluster Status for wcluster @ Sat Oct  9 10:44:59 2010
Member Status: Quorate

 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1-hb                                                            1 Online, Local, rgmanager
 node2-hb                                                            2 Online, rgmanager
 node3-hb                                                            3 Online, rgmanager

 Service Name                                                     Owner (Last)                                                     State         
 ------- ----                                                     ----- ------                                                     -----         
 service:apache                                                   node1-hb                                                         started       
 service:dovecot                                                  node3-hb                                                         started       
 service:mysql                                                    node2-hb                                                         started       
 service:postfix                                                  node3-hb                                                         started       
 service:pound                                                    node2-hb                                                         started       
 service:svn                                                      node1-hb                                                         started       
 service:tomcat                                                   node1-hb                                                         started

Laat me weten als je nog problemen heb, ik heb redelijk veel ervaring met de RHEL cluster suite ondertussen.

  • Rainmaker
  • Registratie: augustus 2000
  • Laatst online: 13-05 20:44
quote:
silentsnake schreef op zaterdag 09 oktober 2010 @ 10:46:
<script name="script_postfix" file="/etc/init.d/postfix"/>
<script name="script_spamd" file="/etc/init.d/spamassassin"/>
Die zocht ik :)

Dat het zo simpel is :)

Bedankt, en ook bedankt voor de tips en de headup over de volgorde.

Nu nog even een init scriptje schrijven. Zal dan voor mij wel per node moeten, anders herstart ie alle VM's bij het crashen van 1...

Over het quorum device; waarom zou je dat willen met 3 nodes? Split brain gaat toch niet gebeuren.

*edit:

Toch nog even een vraag; ik heb nu een quick 'n dirty scriptje wat netjes checked of een VM up is, en het eventueel kan starten / herstarten / stoppen.

Ik zou graag 1 scriptje willen gebruiken, waarbij ik de VM naam meegeef als argument.

Iets als:
code:
1
<script ref="script_vm" args="vmname1"/>

Enig idee of ik argumenten binnen de <service> kan meegeven? (bij resources kan het waarschijnlijk gewoon door ze binnen de file attribute mee te nemen).

Rainmaker wijzigde deze reactie 09-10-2010 17:39 (29%)

We are pentium of borg. Division is futile. You will be approximated.


  • silentsnake
  • Registratie: september 2003
  • Laatst online: 17-05 08:37
quote:
Rainmaker schreef op zaterdag 09 oktober 2010 @ 16:37:
[...]


Die zocht ik :)

Dat het zo simpel is :)

Bedankt, en ook bedankt voor de tips en de headup over de volgorde.

Nu nog even een init scriptje schrijven. Zal dan voor mij wel per node moeten, anders herstart ie alle VM's bij het crashen van 1...

Over het quorum device; waarom zou je dat willen met 3 nodes? Split brain gaat toch niet gebeuren.
"Omdat het kan" ;) Je hebt verder gelijk, er is in mijn geval geen toegevoegde waarde voor een quorum device. Overgens wordt een quorum device ook wel eens bij grotere clusters gebruikt om op die manier de doorslag te geven of het cluster quorate is of niet. Denk aan bijvoorbeeld custom monitoring scripts om de standaard votes van je nodes te overrulen. Dat kan je dan mooi aan je quorum device hangen.
quote:
Toch nog even een vraag; ik heb nu een quick 'n dirty scriptje wat netjes checked of een VM up is, en het eventueel kan starten / herstarten / stoppen.

Ik zou graag 1 scriptje willen gebruiken, waarbij ik de VM naam meegeef als argument.

Iets als:
code:
1
<script ref="script_vm" args="vmname1"/>

Enig idee of ik argumenten binnen de <service> kan meegeven? (bij resources kan het waarschijnlijk gewoon door ze binnen de file attribute mee te nemen).
Da's een goeie, dat zou ik niet weten. Ik zou zeggen probeer het eens en kijk wat er gebeurt.

Als alternatief kan je altijd nog een apart init script maken voor verschillende VMs, maar ja dat is een beetje flauw natuurlijk :P

  • Rainmaker
  • Registratie: augustus 2000
  • Laatst online: 13-05 20:44
quote:
silentsnake schreef op zaterdag 09 oktober 2010 @ 18:28:
[...]


"Omdat het kan" ;) Je hebt verder gelijk, er is in mijn geval geen toegevoegde waarde voor een quorum device. Overgens wordt een quorum device ook wel eens bij grotere clusters gebruikt om op die manier de doorslag te geven of het cluster quorate is of niet. Denk aan bijvoorbeeld custom monitoring scripts om de standaard votes van je nodes te overrulen. Dat kan je dan mooi aan je quorum device hangen.
Omdat het kan is juist 1 van de beste redenen :) Is ook de reden dat ik hier een 1 node cluster aan het bouwen ben :p

Op het werk heb ik inderdaad grotere clusters staan, maar daar gebruiken "we" het eigenlijk alleen voor GFS. En inderdaad, we gebruiken ook wel aardig wat scripts voor extra votes op het quorum.
quote:
[...]
Da's een goeie, dat zou ik niet weten. Ik zou zeggen probeer het eens en kijk wat er gebeurt.

Als alternatief kan je altijd nog een apart init script maken voor verschillende VMs, maar ja dat is een beetje flauw natuurlijk :P
Heb ik al gedaan, werkt niet :p

En inderdaad, voor iedere VM een eigen script is gewoon niet mooi (maar werkt wel natuurlijk).

Verrassend genoeg werkt dit ook niet:
code:
1
2
3
4
5
6
<resources>
                <script file="/usr/bin/vmcluster LDAPMaster1" name="script_vm"/>
        </resources>
        <service autostart="1" recovery="restart" domain="vboxdom" name="LDAPMaster1_service">
                <script ref="script_vm"/>
        </service>

Hij ziet "vmcluster LDAPMaster1" als 1 scriptnaam, ipv LDAPMaster1 als argument aan het script.
code:
1
2
3
4
5
6
Oct  9 18:54:52 oread rgmanager[24062]: Starting stopped service service:LDAPMaster1_service
Oct  9 18:54:52 oread rgmanager[24062]: start on script "script_vm" returned 5 (program not installed)
Oct  9 18:54:52 oread rgmanager[24062]: #68: Failed to start service:LDAPMaster1_service; return value: 1
Oct  9 18:54:52 oread rgmanager[24062]: Stopping service service:LDAPMaster1_service
Oct  9 18:54:52 oread rgmanager[24062]: stop on script "script_vm" returned 5 (program not installed)
Oct  9 18:54:52 oread rgmanager[24062]: Service service:LDAPMaster1_service is failed

Rainmaker wijzigde deze reactie 09-10-2010 18:57 (29%)

We are pentium of borg. Division is futile. You will be approximated.


  • Rainmaker
  • Registratie: augustus 2000
  • Laatst online: 13-05 20:44
Na flink wat zoeken kwam ik dit tegen:

http://www.opencf.org/cgi...ce-agent-api.txt?rev=1.10

In je script zou je dus moeten kunnen refereren aan $RESOURCE_INSTANCE, waar je natuurlijk dan de naam van de VM in kunt hebben door je resource bijvoorbeeld LDAPMaster1 te noemen.

Vind het nog steeds niet helemaal netjes, ik wil nu eigenlijk een eigen tag gaan defineren.

Dus in plaats van <script> gebruik je dan <vbox>.

Iemand hier ervaring mee?

*edit: Ow, ik zie net dat in /usr/share/cluster al redelijk wat inspiratie staat. Ik ga eens kijken of ik dit aan de praat kan krijgen :p

Rainmaker wijzigde deze reactie 15-10-2010 10:20 (12%)

We are pentium of borg. Division is futile. You will be approximated.


  • Rainmaker
  • Registratie: augustus 2000
  • Laatst online: 13-05 20:44
Hmm, een nieuwe tag aanmaken blijkt vrij makkelijk te zijn.

Ik heb mijn script, config e.d. op het VirtualBox forum geplaatst, voor geinteresseerde:

http://forums.virtualbox.org/viewtopic.php?f=7&t=35372

We are pentium of borg. Division is futile. You will be approximated.


  • silentsnake
  • Registratie: september 2003
  • Laatst online: 17-05 08:37
Da's een leuke inderdaad, kan ik zeker ook nog wel gebruik van maken! :)
Pagina: 1


OnePlus 7 Pro (8GB intern) Microsoft Xbox One S All-Digital Edition LG OLED C9 Google Pixel 3a XL FIFA 19 Samsung Galaxy S10 Sony PlayStation 5 Google

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True