wordpress hosting - vpn - cloud - statistiekservice - email

Categorie op Linux systeemmanagement

LVM – Logical Volume Management

Logical Volume Management

Algemeen

Met Logical Volume Management (lvm) kan flexiber omgegaan worden met de vraag naar opslagruimte. Je zit niet meer vast aan eenmaal bedachte grootes van partities maar er kan geschoven worden met de beschikbare ruimte. Er zijn grofweg drie lagen te onderscheiden:

  1. De fysieke harddisk
  2. Een of meerdere volume groepen (vg’s)
  3. Een of meerdere logical volumes (lv’s)

Kort samengevat: Op een fysieke harddisk worden een of meerdere vg’s aangemaakt. In een vg worden de lv’s aangemaakt. De opslagruimte die een vg biedt kan uitgebreid worden door bijv. een extra disk aan toe te voegen. De totaal beschikbare ruimte in een vg kan flexibel aan de lv’s worden verdeeld.

In praktijk kan op een 100GB harddisk in eerste instantie 50GB gebruikt worden en wordt 50GB vrij gelaten om later toe te wijzen. Mocht in praktijk blijken dat bijvoorbeeld het mountpoint /opt meer ruimte nodig heeft dan voorzien terwijl de ruimte aan /home niet of nauwelijks gebruikt wordt dan kan de toegewezen ruimte aan /home worden verkleind met lvreduce en met lvextend kan de vrijgekomen ruimte aan /opt worden toegevoegd. Dit dynamisch omgaan met beschikbare diskruimte is dan ook aan te raden.

lvcreate : Aanmaken van een nieuw logical volume

Om een logical volume (lv) aan te maken moet eerst het lv zelf aangemaakt worden in een bestaande volume group (vg). Daarna moet het aangemaakte lv worden voorzien van een filesyteem en kan hierna worden gemount.

In dit voorbeeld wordt een logical volume lv_imap aangemaakt van 500MB in de volume group vg_data en het nieuwe lv wordt voorzien van de ext4 filesysteem:

   lvcreate -n lv_imap --size 500M vg_data
   mkfs.ext4 /dev/vg_data/lv_imap

Nu kan als er een mountpoint is aangemaakt met mount /dev/vg_data/lv_imap /mnt/imap of iets dergelijks de nieuwe lv worden gemount. Er zou ook een soortgelijke regel in /etc/fstab opgenomen kunnen worden. Echter is het beter om de UUID te gebruiken in plaats van de devicenaam. Het UUID is onveranderlijk en kan worden opgevraagd met:

  blkid /dev/vg_data/lv_imap
  /dev/vg_data/lv_imap: UUID="3c6980c7-b12d-43e6-b536-00d32194c4da" TYPE="ext4"

Dit UUID kan dan worden gebruikt in de fstab:

  UUID=3c6980c7-b12d-43e6-b536-00d32194c4da   /mnt/imap   ext4  defaults  1 2

Let op In /etc/ftab wordt het gevonden UUID gebruikt z_o_n_d_e_r de aanhalingstekens. Dit is zelfs een (instinker) vraagje op diverse linux examens! Dit is verwarrend omdat blkid een keurige bruikbare regel lijkt op te leveren maar met aanhalingstekens die dus niet in de fstab gebruikt kan worden.

lvextend : Vergroten van een bestaand logical volume

Als er nog ruimte is in de volume groep kan dat op de volgende manier: Eerst wordt het volume en daarna wordt het filesysteem op het volume vergroot. In dit voorbeeld wordt het logical volume lv_var vergroot met 1GB:

  lvextend -L +1G dev/vg_mx1/lv_var
  resize2fs /dev/vg_mx1/lv_var

Als de server onder VMWare draait en binnen VMware al wel de disk is uitgebreid dient de scsi bus gescand te worden zodat het OS de wijziging ziet:

for dev in /sys/block/*/device/rescan; do   echo 1 > $dev; done

Als dit gebeurd is kan met fdisk -l gekeken worden of deze extra ruimte ook getoond wordt. Normaliter is dit het geval.
Afhankelijk van hoe LVM geconfigureerd is zijn er twee scenario’s mogelijk. Als de LVM’s als partities zijn aangemaakt moet eerst een nieuwe partitie worden aangemaakt met label 8e (Linux LVM) en kan deze nieuwe partitie met pvcreate en vgextend worden aangemaakt. Zodra dit gebeurd is kan met lvextend de extra ruimte worden toegewezen. In dit voorbeeld wordt van /dev/sdc gebruik gemaakt om de volumegroup data met alle nieuwe beschikbare ruimte te vergroten:

pvcreate /dev/sdc2
pvextend vg_data /dev/sdc2
lvextend -l +100%FREE /dev/vg_data/data

Bij het vergroten van het filesysteem met resize2fs komt de melding Filesystem at /dev/mapper/vg_mx1-lv_var is mounted on /var; on-line resizing required indien het filesysteem, in dit voorbeeld, als /vargemount is. Bij ext4 filesystems kan het vergroten zonder problemen on-the-fly gebeuren.

resize2fs /dev/vg_data/data

volumegroup renamen

Umount het mountpoint van het onderliggende logical volume
Maak het onderliggende logical volume of volumes inactief: lvchange -an
Hernoem de volumegroup met vgrename
Maak het onderliggende logical volume of volumes weer actief met: lvchange -ay

SELinux tips

andere locatie voor webpagina's

Als SELINUX in enforced mode draait dan kunnen homepage's van gebruikers op een andere locatie dan de standaardlocatie een error 403 Forbinnden opleveren. In dat geval moet die directory, in dit voorbeeld ~/public_html de juiste context meekrijgen. Dat kan worden gedaan door:

 chcon -R -t httpd_user_content_t public_html/

Met ls -Z -d ~/public_html kan de context worden bekeken:

Voor de wijziging:

 drwxrwxr-x auser auser user_u:object_r:user_home_t public_html

en na de wijziging:

  1. rw-rw-r

Mocht er hierna nog foutmeldingen komen dan kan het nodig zijn om

setsebool -P httpd_enable_homedirs true 

te geven.

 

website's voor Apache in een andere directory

Maak een directory aan voor de websites, bijvoorbeel /virtual_hosts met mkdir /virtual_hosts. Als SELINUX draait zullen websites die daar draaien niet opgeroepen kunnen worden en zal Apache een Access Denied melding geven. Dat kan op de volgende manier worden opgelost:

semanage fcontext -a -t httpd_sys_content_t '/virtual_hosts(/.*)?'
restonecon -RFvv /virtual_hosts

Controleer met ls -Zd /virtual_hosts of de content nu goed staat.

samba

Om samba met SELINUX enabled te draaien als domain controller wordt het volgende commando gegeven:

 setsebool -P samba_domain_controller on

Om homedir's in samba te kunnen sharen:

 setsebool -P samba_enable_home_dirs on

Als een nieuwe directory wordt gemaakt als top-level voor een nieuwe share:

 chcon -t samba_share_t /path/to/directory

Use the

samba_export_all_ro

of

samba_export_all_rw

Boolean to share system directories. To share such directories and only allow read-only permissions:

 setsebool -P samba_export_all_ro on

To share such directories and allow read and write permissions:

 setsebool -P samba_export_all_rw on

toegang tot een bepaalde poort

 semanage port -a -t http_port_t -p tcp 8181

Signen van een RPM package

Signen van RPM’s met GPG key

In Satellite kunnen eigen software channels worden aangemaakt. Hiermee kunnen aangepaste of eigen RPM’s via Satellite beschikbaar gesteld worden aan de clients. Een voorwaarde is wel dat de RPM packages zijn gesigned met een GPG key en dat de public GPG key voor de clients beschikbaar is en is importeerd. Hieronder wordt beschreven hoe dit kan worden uitgevoerd.

De werkzaamheden omvatten voor een deel een aantal eenmalig uit te voeren werkzaamheden en een aantal wat steeds voor elk RPM package terugkeert. Bij het aanmaken van een channel zal naast de ID ook om de GPG fingerprint worden gevraagd. Deze kan worden opgevraagd door: gpg --fingerprint.

Eenmalige werkzaamheden

Aanmaken GPG keypair
  • Maak een nieuwe GPG key aan met: gpg --gen-key om een GPG keypair aan te maken. Kies voor type 1, een DSA and Elgamal type key. Als keysize kan voor 2048 of 1024 gekozen worden. Een key van 2048 bits is uiteraard aanbevelingswaardig.
  • Na generatie moet de public key worden geexporteerd, dat kan met: gpg --export -a {naam vande key} > {naam waarmee de key is aangemaakt}.

Stel dat de key is aangemaakt met de naam Linuxteam en de public key wordt als LINUXTEAM-GPG-KEY opgeslagen:

gpg --export -a "LinuxTeam" > LINUXTEAM-GPG-KEY

Aanpassen van ~/.rpmmacros

Opmerking: Het beschrijven van het zelf maken van RPM packages valt buiten de scope van dit onderwerp.

Om tijdens het maken of het signen van bestaande RPM packages moet de ~/.rpmmacros file worden aangepast. In onderstaand voorbeeld wordt er vanuit gegaan dat als user root RPM packages gemaakt worden en de GPG key is aangemaakt met de naam LinuxTeam:

    %_gpg_name LinuxTeam
Importeren public key

De aangemaakte GPG key moet nog worden geimporteerd. Als we de bovengenoemde voorbeelden volgen dan wordt dit gedaan met:

rpm --import LINUXTEAM-GPG-KEY

Hiermee is de basis gelegd om bestaande of te bouwen RPM packages te signen met een GPG key.

GPG key beschikbaar in Satellite

Om van de GPG key gebruik te kunnen maken in RedHat Satellite moet de exporteerde public key beschikbaar worden gesteld. Dit is ook nodig als eigen software Channels worden aangemaakt. In bovenstaand voorbeeld is de public key ge-exporteerd als LINUXTEAM-GPG-KEY, als dit voorbeeld gevolgd wordt kan met cp LINUXTEAM-GPG-KEY /var/www/html/pub de public key beschikbaar worden gesteld.

Bij het aanmaken van een software Channel in Satellite wordt dan de volgende URL ingevuld onder Security: GPG

https://satellite.example.com/pub/LINUXTEAM-GPG-KEY

Terugkerende werkzaamheden

Signen van bestaande RPM packages

Een reeds bestaand RPM package, wat nog niet gesigned is door een andere GPG key, kan worden gesigned door:

rpm --resign {rpm package name}

Bouwen van RPM packages met GPG key

Als met rpmbuild zelf een RPM package gemaakt wordt kent rpmbuild een optie om het gegenereerde RPM package direct te signen. Als de bovenstaande eenmalige werkzaamheden zijn uitgevoerd dan kan dit door:

rpmbuild -v -ba --sign --clean SPECS/nrpe.spec

Opmerking: Als rpmbuild als root aangeroepen wordt dan wordt bovenstaande opdracht in /usr/src/redhat gegeven.

Controle van een GPG signed RPM package

Controleer een RPM package met: rpm -K -v {rpm package naam} Dit geeft soortgelijke uitvoer als van het RPM package nagios-plugins-1.4.14-1 de GPG signature wordt opgevraagd. In dit voorbeeld is het RPM package correct gesigned.

rpm -K -v nagios-plugins-1.4.14-1.x86_64.rpm
nagios-plugins-1.4.14-1.x86_64.rpm:
    Header V3 DSA signature: OK, key ID ae175d8e
    Header SHA1 digest: OK (9c915a0e8aa474bcfa6d0b3280753b1e83df295f)
    MD5 digest: OK (6f9c3b94b9a0fc8b51984c8acb8d4334)
    V3 DSA signature: OK, key ID ae175d8e

De laatste regel geeft aan: Key ID ae175d8e. Dit ID is te controleren door ,code>gpg –list-keys te geven en dit ID moet dan terugkomen bij de public key waarmee het RPM package gesigned is.

High Availabilty met heartbeat

High Availability met heartbeat

Algemeen

Om een hogere beschikbaarheid te bieden van bijv. een web of databaseserver kan gekozen worden om heartbeat te gebruiken. Het idee erachter is simpel en het eenvoudigst uit te leggen aan de hand van een voorbeeld. We gaan uit van een clustertje van 2 servers die MySQL draaien met de bedoeling als 1 van de 2 servers uitvalt, de andere het automatisch overneemt. In deze documentatie die uit de praktij komt is uitgegaan van een eenvoudige opzet met 2 servers die via een aparte netwerkinterface het heartbeatsignaal versturen. Dit kan ook serieel gebeuren maar dat komt in de praktijk minder voor.

De bron/sourcebestanden en de documentatie zijn te vinden op http://www.linux-ha.org/wiki/Main_Page

Installatie van heartbeat

Voor de meeste distributies is er wel een package beschikaar van heartbeat 3.x. In dit praktijkgeval werd gekozen om de van de source/broncode RPM packages te maken voor de twee RedHat Enterprise Linux 5 servers. Dit is, als voldaan is aan de verschillende dependencies, eenvoudig omdat er .spec files worden meegeleverd.

Er zijn drie source/broncode archives nodig: resource-agents, cluser-glue en heartbeat. Deze zijn te vinden op http://www.linux-ha.org/wiki/Downloads

Voorbeeldconfiguratie

Gegevens MySQL server 1:

  • hostnaam : dbserver01.mijndomein.nl
  • ipadres : 192.168.1.5 / 255.255.255.0
  • heartbeat ip : 10.10.37.1

Gegevens MySQL server 2

  • hostnaam : dbserver02.mijndomein.nl
  • ipadres : 192.168.1.6 / 255.255.255.0
  • heartbeat ip : 10.10.37.2

Als virtueel IP adres wordt 192.168.1.10 gebruikt.

Configuratie hearbeat

De configuratie van hearbeat bestaat uit het configuren van /etc/ha.d/ha.cf, /etc/ha.d/haresources en /etc/ha.d/authkeys.

/etc/ha.d/authkeys

In dit bestand komt een sleutel te staan die gedeeld wordt over de nodes binnen het cluster en heeft het volgende formaat:

      auth num
      num algorithm secret

Waarbij num een opvolgend nummer is, te beginnen bij 1. Het algoritme is meestal sha1 en secret is de daadwerkelijk sleutel. Deze sleutel kan worden aangemaakt met het onderstaande shell script:

   ( echo -ne "auth 1\n1 sha1 "; \
   dd if=/dev/urandom bs=512 count=1 | openssl md5 ) > /etc/ha.d/authkeys
   chmod 0600 /etc/ha.d/authkeys

Hiermee wordt tevens aan een andere vereiste voldaan, het authkeys bestand mag alleen voor root leesbaar zijn en hieronder staat een voorbeeld de inhoud van de authkeys:

   auth 1
   1 sha1 29d72a23963e8350a65b78e8052678ef

/etc/ha.d/ha.cf

logfacility   local0
autojoin      none
keepalive     2
deadtime      15
ucast eth3 10.10.37.1
auto_failback on
node          dbserver01.mijndomein.nl
node          dbserver02.mijndomein.nl
logfacility

Geeft aan hoe middels de syslog daemon gelogd wordt.

autojoin

Er wordt door autojoin none voorkomen dat er automatisch naar nieuwe nodes voor het cluster wordt gezocht bij het opstarten van heartbeat. Dit versnelt het opstarten in met name kleinere clusteromgevingen.

keepalive

De tijd in seconden dat een heartbeat signaal wordt verzonden.

deadtime

De tijd in seconden voordat een node ‘dood’ verklaard wordt en het overfailen naar de andere node wordt gestart.

ucast

In deze omgeving is gekozen om middels ucast de aanwezigheid van de nodes te controleren. Een andere optie zou multicast (mcast) zijn. Indien,zoals in dit voorbeeld, er een apart VLAN voor heartbeat is opgezet kan ucast gebruikt worden.

auto_failback

Geeft aan met de optie on of off of heartbeat automatisch moet overfailen.

node

Definieert de nodes binnen het heartbeat cluster. Het is raadzaam de hostnamen op te nemen in /etc/hosts zodat deze ten alle tijde te resolven zijn en niet door eventuele nameserverproblemen het heartbeatproces verstoord.

/etc/ha.d/haresources

   dbserver01.mijndomein.nl 192.168.1.10 mysql

In deze file wordt aangegeven welke node de master is, wat het virtuele ipadres voor de buitenwereld is om een bepaalde service aan te bieden. In dit geval is dus de dbserver01 de primaire node met het virtuele ipadres 192.168.1.10 en wordt de service MySQL geclusterd. Dit staat los van hoe MySQL geinstalleerd is. Zodra er zich een overfail situatie voordoet wordt het virtuale ipdres op de primaire node down gebracht en wordt MySQL gestopt. De secundaire node zal dan na de periode die opgegeven is, het virtuele ipadres up brengen en MySQL starten. De data van MySQL werd in dit geval op een shared storage opgeslagen.

ha_propagate

Als de configuratie op de primaire node afgerond is kunnen de nodes de noodzakelijke configuratiebestanden via ha_propagate worden gepushed. Deze tool in te vinden in /usr/lib/heartbeat/ha_propagate of /usr/lib64/heartbeat/ha_propagate. Middels scp (ssh) worden de nodes die in de /etc/ha.d/ha.cf zijn opgenomen geconfigureerd. In dit voorbeeld bestaat het cluster uit slechts twee nodes en is ha_propagate misschien niet nodig maar als een cluster uit vele nodes bestaat is deze manier aan te raden.

Opmerking: Wel is het noodzakelijk om per node het ucast/mcast ipadres aan te passen en eventueel de gebruikte interface voor het heartbeat signaal.

Veel voorkomende fouten

Veel voorkomende fouten

Een verzameling van fouten die soms in het gebruik van RedHat Satellite naar voren komen en de mogelijke oplosisngen ervan. Deze verzameling is opgebouwd n.a.v. ervaringen in diverse omgevingen. In de meeste gevallen werden reeds in RHN geregistreerde servers omgehangen naar een lokale Satellite server en nieuwe servers middels kickstart uitgerold.

Errors tijdens gebruik van satellite-sync

Wanneer: Bij het uitvoeren van satellite-sync -c {channelnaam} worden foutmeldingen gegeven. Satellite is geinstalleerd met de embedded Oracle database.

Oplossing: Controleer of de Oracle database nog voldoende ruimte heeft.

  • Log in als root op de lokale Satellite server
  • Ga de Oracle user te gaan: su - oracle
  • Voer db-control report uit. De uitvoer lijkt op onderstaand voorbeeld:
Tablespace                  Size    Used   Avail   Use%
DATA_TBS                    8.3G    6.7G    1.5G    81%
SYSAUX                      500M  148.9M    351M    30%
SYSTEM                      1.1G  253.1M  946.8M    21%
UNDO_TBS                    1.4G  157.4M    1.3G    10%
USERS                       128M     64K  127.9M     0%
  • Vergroot de Tablespaces waar meer dan 70% in gebruik is m.b.v. db-control extend, voorbeeld: db-control extend DATA_TBS

Parameters worden niet gebruikt in Script

Wanneer: Tijdens de installatie worden de parameternaam niet vervangen door het waarde die in Variables wordt opgegeven

Oplossing: Zet het vinkje bij Template aan onder Script.

Registratie van bestaande server in lokale Satellite server faalt

Wanneer: Bij het runnen van rhnreg_ks komt er een melding dat het systeem al geregistreerd is

Oplossing 1: Verwijder het systeem uit RHN en voer rhn_register uit.

Oplossing 2: Zorg dat in /usr/share/rhn het CA SSL certificaat staat van de lokale Satellite server en gebruik rhnreg_ks zoals in onderstaand voorbeeld:

rhnreg_ks --serverUrl=https://mijsatellite.example.com/XMLRPC --username=admin --password=secret --force --sslCACert=/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT

yum.Errors.RepoError: Cannot retrieve repository metadata (repomd.xml) for repository…

Wanneer: Een systeem is succesvol in een lokale Satellite server geregistreerd maar bij het gebruik van yum komen fouten over niet een niet gevonden repository. Meestal m.b.t. de rhn-tools repository.

Oplossing: Indien vanuit de Satellite server een activation key wordt gebruikt:

  • Verwijder de activation key.
  • Verwijder het systeem uit Satellite
  • Registreer het systeem opnieuw met rhn_register
  • Voor yum clean all uit alvorens bijv. een yum check-update te geven.