Shared root

Grundsysteminstallation

Anpassung der Installation von SLES 11

Hardware

  1. Memory >= 1024 MB
  2. CPU >= 1 (optional kann auch mehr als eine CPU hinzugefügt werden → Hardware Ressourcen)
  3. Harddisk >= 20 GB via SCSI Controller
  4. CD / DVD Drive
  5. Network Adapter >= 1


Partitionierung

PartitionsnummerDateisystemMountpoint / Volume LabelGröße
1Ext3/boot200 MB
2Ext3/root14,8 GB
3SwapSwap RAM*2 GB


Software

Hinzufügen

  1. C/C++ Compiler and Tools
  2. (KDE Desktop)


Entfernen

  1. (X Windows System)
  2. Novell AppArmor
  3. GNOME Desktop


Anpassungen

  1. Keyboard Layout: German
  2. Language → Primary Language: English (US)
  3. AutoYast deaktivieren


OCFS2 Tools-Installation

  1. Image einhängen
    1. Im vSphere Client das HA-Tools Image einhängen
  2. Image zum Testen mounten
    1. Beispiel um das Image in den Ordner /mnt/ha einzuhängen mount /dev/cdrom /mnt/ha
  3. Repository hinzufügen
    1. Yast → Software → Software Repositories
    2. Nun kann mit ALT + A ein neues Repository hinzugefügt werden
    3. Nun CD mit der Leertaste auswählen → ALT + x
    4. Sollten mehrere Laufwerke vorhanden sein, so muss nun der SCSI-Controller gewählt werden, an dem das Image eingehängt ist. Mit ALT + O fortfahren
    5. Mit ALT + Y die Lizenz akzeptieren und mit ALT + N fortfahren
    6. Abschließend ALT + O um das Repository-Menü zu verlassen
  4. Software „OCFS2“ mit Yast (Yast sw_single) suchen und folgende Pakete mit # auswählen und installieren:
    1. ocfs2-tools
    2. ocfs2-tools-o2cb
    3. ocfs2console
      1. yast -i ocfs2-tools ocfs2-tools-o2cb ocfs2console
  5. Ggf. muss während der Tools-Installation die System Disk nochmals im vSphere Client eingehängt werden


Firewall

  1. Firewall deaktivieren oder TCP-Port 7777 für den OCFS2 Cluster-Heartbeat öffnen


Ordnerstruktur anlegen

Folgende Ordner müssen angelegt (mkdir /<ordnernamen>) werden:

  1. /etc/cluster
  2. /etc/ocfs2
  3. /mnt/newroot
  4. Komandozeile: mkdir /etc/cluster /etc/ocfs2 /mnt/newroot


Cluster Konfiguration

Für das Cluster wird die Datei cluster.conf mit folgendem Inhalt benötigt:

  1. Cluster Namen
  2. Node Name und ID
  3. Mount Point
  4. IP Adresse
  5. Subnetmaske
  6. MAC Adresse
  7. Root Passwort


Beispiel für ein 2-Node Cluster

Beispiel einer /etc/cluster/cluster.conf:

<?xml version="1.0"?>
<cluster config_version="1" name="ocfs2" type="gfs">
	<clusternodes>
		<clusternode name="atix1" nodeid="1">
			<com_info>
				<rootvolume name="/dev/sdXX" fstype="ocfs2"/>
				<eth name="eth0" ip="10.6.7.201" mask="255.255.255.0" gateway="10.6.7.1" mac="00:14:38:4D:42:B1"/>
			</com_info>
		</clusternode>
		<clusternode name="atix2" nodeid="2">
			<com_info>
				<rootvolume name="/dev/sdXX" fstype="ocfs2"/>
				<eth name="eth0" ip="10.6.7.211" mask="255.255.255.0" gateway="10.6.7.1" mac="00:14:38:4D:42:B2"/>
			</com_info>
		</clusternode>
	</clusternodes>
</cluster>


Virtuelle Disk anlegen

  1. ssh-Verbindung auf den ESX aufbauen
  2. in /vmfs/volumes/<STOREAGE> wechseln
  3. Nun den Befehl vmkfstools -d eagerzeroedthick -a lsilogic -c 30G stefcluster.vmdk ausführen um eine 30GB große Disk zu erzeugen
    1. Creating disk 'stefcluster.vmdk' and zeroing it out…
    2. Create: 45% done.
  4. Hiernach die Festplatte via dem vSphere Client der Maschine, mit neuem SCSI-Controller, hinzufügen und die Festplatte auf Vierual setzen
stefnode1:~ # fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x7b963683.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.


The number of cylinders for this disk is set to 3916.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3916, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): +300M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (40-3916, default 40):
Using default value 40
Last cylinder, +cylinders or +size{K,M,G} (40-3916, default 3916):
Using default value 3916

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p

Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7b963683

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          39      313236   83  Linux
/dev/sdb2              40        3916    31142002+  83  Linux

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


Neue PArtitionen formatieren

stefnode1:~ # cat /proc/partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1     305203 sda1
   8        2   15406335 sda2
   8        3    5253255 sda3
   8       16   31457280 sdb
   8       17     313236 sdb1
   8       18   31142002 sdb2
stefnode1:~ # mkfs.ext3 -Lboot /dev/sdb1
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=boot
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
78312 inodes, 313236 blocks
15661 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
39 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


stefnode1:~ # mkfs.ocfs2 -Lroot /dev/sdb2
mkfs.ocfs2: Block count bad - /dev/sdb2
stefnode1:~ # mkfs.ocfs2 -Lroot /dev/sdb2
mkfs.ocfs2 1.4.3
Cluster stack: classic o2cb
Label: root
Features: sparse backup-super unwritten inline-data strict-journal-super metaecc                        xattr indexed-dirs
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 31889408000 (7785500 clusters) (7785500 blocks)
Cluster groups: 242 (tail covers 11804 clusters, rest cover 32256 clusters)
Extent allocator size: 4194304 (1 groups)
Journal size: 199307264
Node slots: 8
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 3 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful


Befehl

echo "ocfs2-kmp-default" >> /etc/comoonics/bootimage/rpms.initrd.d/sles11/ocfs2.list


Filesystem kopieren

root

# Cluster starten
/etc/init.d/o2cb online ocfs2

# Cluster root Partition mounten (X sinnvoll ersetzen)
mount /dev/sdb2 /mnt/newroot

# Kopieren
cp -ax / /mnt/newroot/


Testen ob Ordner vorhanden

/mnt/newroot/proc
/mnt/newroot/sys


Sind diese nicht vorhanden, müssen sie angelegt werden:

mkdir /mnt/newroot/proc
mkdir /mnt/newroot/sys


Verzeichnis hostabhängigkeit

#Hostabhängig
chroot /mnt/newroot com-mkcdsl –a /var

#Shared
chroot /mnt/newroot com-mkcdsl –s /var/lib

#Hostabhängig
chroot /mnt/newroot com-mkcdsl –a /etc/HOSTNAME


Code

cd /mnt/newroot/etc
rm –r mtab
ln –s /proc/mounts mtab
cd –

#Datei löschen
rm –f /mnt/newroot/etc/init.d/boot.rootfsck

#eth0 umbenennen
mv /mnt/newroot/etc/sysconfig/network/ifcfg-eth* /mnt/newroot/etc/sysconfig/network/ifcfg-eth0

# Dateiinhalt ersetzen
/mnt/newroot/etc/sysconfig/network/ifcfg-eth0
NM_CONTROLLED=no
DEVICE="eth0"
STARTMODE="nfsroot"
TYPE="Ethernet"

#Autostart verhindern
chroot /mnt/newroot/ chkconfig ocfs2 off
chroot /mnt/newroot/ chkconfig o2cb off

#Novell-ZMD SuseRegister deaktivieren
chroot /mnt/newroot/ chkconfig novell-zmd off
chroot /mnt/newroot/ chkconfig suseRegister off

# /mnt/newroot/etc/fstab bearbeiten
VON:
/dev/sda2	/			ext3	acl,user_xattr	1 1
/dev/sda1	/boot			ext3	acl,user_xattr	1 2
/dev/sda3	swap			swap	defaults	0 0
proc		/proc			proc	defaults	0 0
sysfs		/sys			sysfs	noauto		0 0
debugfs		/sys/kernel/debug	debugfs	noauto		0 0
devpts		/dev/pts		devpts	mode=0620,gid=5	0 0

IN:
/dev/sda2	/			ocfs2	defaults	0 0
/dev/sda1	/boot			ext3	noauto		1 2
proc		/proc			proc	defaults	0 0
sysfs		/sys			sysfs	noauto		0 0
debugfs		/sys/kernel/debug	debugfs	noauto		0 0
devpts		/dev/pts		devpts	mode=0620,gid=5	0 0


Boot Device

#Mounten
mount /dev/sdb1 /mnt/newroot/boot/

#Kopieren
cp –a /boot/* /mnt/newroot/boot

#Grub bearbeiten
grub
device (hd1) /dev/sdb
root (hd1,0)
setup (hd1)
guit

# Initrd erstellen
chroot /mnt/newroot /opt/atix/comoonics-bootimage/mkinitrd /boot/initrd-$(uname -r) $(uname -r)

# Initrd Dateinamen von hier...
cd /mnt/newroot/boot

# ...hier anpassen
cd /mnt/newroot/boot/grub/menu.lst


Node ID override

Sollte ein Node oder ein Cluster nach einem Hardwareausfall gestartet werden müssen und die MAC-Adresse nicht bekannt sein. So kann während des Node-Starts dieser Befehl eingetragen werden, um den Node manuell mit der ID zu starten.

setparameter nodeid <nodeid>


Weitere Lösung

Im Grub-Promt folgendes anhängen:

#Wichtig: Hier kein Leerzeichen!
nodeid=<nodeid>


Initrd im Betrieb neubauen

mount /dev/sda1 /boot
/opt/atix/comoonics-bootimage/mkinitrd /boot/initrd-$(uname -r) $(uname -r)
umount /boot


Node umbenennen

Beispiel: zweiten Node umbenennen

# HOSTNAME bearbeiten
vi /.cluster/cdsl/2/etc/HOSTNAME

# Cluster.conf bearbeiten -> Node Name ändern
vi /etc/cluster/cluster.conf

# hosts Datei bearbeiten
# IP FQDN und Rechnernamen eintragen
vi /etc/hosts

# /boot - Partition mounten
mount /dev/sda1 /boot

# Initrd neu erzeugen
/opt/atix/comoonics-bootimage/mkinitrd /boot/initrd-$(uname -r) $(uname -r)

#/boot unmounten
umount /boot


Initrd-Generator

#!/bin/bash
 
mount /dev/sda1 /boot
/opt/atix/comoonics-bootimage/mkinitrd /boot/initrd-$(uname -r) $(uname -r)
umount /boot


Bonding

/etc/modprobe.conf

options bond0 miimon=30 mode=1
alias bond0 bonding


/etc/sysconfig/network/ifcfg-bond0

NM_CONTROLLED="no"
DEVICE="eth0"
STARTMODE="nfsroot"
TYPE="Ethernet"


/etc/sysconfig/network/ifcfg-eth0

NM_CONTROLLED="no"
DEVICE="eth0"
STARTMODE="nfsroot"
TYPE="Ethernet"
USERCTL="no"
ONBOOT="yes"
MASTER="bond0"
SLAVE="yes"
BOOTPROTO="none"


/etc/sysconfig/network/ifcfg-eth1

NM_CONTROLLED="no"
DEVICE="eth1"
STARTMODE="nfsroot"
TYPE="Ethernet"
USERCTL="no"
ONBOOT="yes"
MASTER="bond0"
SLAVE="yes"
BOOTPROTO="none"


/etc/cluster/cluster.conf

<eth name="eth0" mac="00:11:22:AB:CD:EE" master="bond0" slave="yes"/>
<eth name="eth1" mac="00:11:22:AB:CD:EF" master="bond0" slave="yes"/>
<eth name="bond0" ip="192.168.123.45" mask="255.255.255.0" gateway=""/>


Beispiel cluster.conf

<?xml version="1.0"?>
<cluster config_version="1" name="ocfs2" type="gfs">
        <clusternodes>
                <clusternode name="stefnode1" nodeid="1">
                        <com_info>
                                <rootvolume name="/dev/sda2" fstype="ocfs2"/>
                                <eth name="eth0" mac="00:50:56:85:36:A0" master="bond0" slave="yes"/>
                                <eth name="eth1" mac="00:50:56:85:6A:55" master="bond0" slave="yes"/>
                                <eth name="bond0" ip="10.0.0.202" mask="255.255.255.0" gateway="10.0.0.1"/>
                        </com_info>
                </clusternode>
                <clusternode name="stefnode2" nodeid="2">
                        <com_info>
                                <rootvolume name="/dev/sda2" fstype="ocfs2"/>
                                <eth name="eth0" mac="00:50:56:85:36:9B" master="bond0" slave="yes"/>
                                <eth name="eth1" mac="00:50:56:85:6A:56" master="bond0" slave="yes"/>
                                <eth name="bond" ip="10.0.0.203" mask="255.255.255.0" gateway="10.0.0.1"/>
                        </com_info>
                </clusternode>
        </clusternodes>
</cluster>


Backup

Full Backup

  1. Neue Festplatte einhängen
  2. mit mkdir /mnt/newroot einen neuen Einhängepunkt erzeugen
  3. mit fdisk /dev/sdb partitionieren
  4. mit mkfs.ocfs2 -Lbackup /dev/sdb1 formatieren
  5. mit mount /dev/sdc2 /mnt/newroot mounten
  6. mit cp –ax / /mnt/newroot gesamtes root-Verzeichnis auf die neue Festplatte kopieren
  7. mit cp –ax /.cdsl.local /mnt/newroot das cdsl.local Verzeichnis kopieren
  8. nun mit umount /mnt/newroot die Festplatte wieder trennen


Incremental Backup

Beim „incremental Backup“ werden nur veränderte oder neu erzeugte Verzeichnisse und Dateien gesichert. Zuerst muss ein „Full Backup“ -wie vorhergehend beschrieben- erzeugt werden. Im Anschluss wird die „ansteigende Sicherung“ durchgeführt, die einen „Snapshot“ des Systems erzeugt.

  1. mit tar -cz -g /mnt/newroot/snapshot_file -f /mnt/newroot/full_backup.tar.gz home das Archiv und die snapshot-file(-g Parameter) anlegen.
    1. Hierbei muss darauf geachtet werden das man sich im root-Verzeichnis befindet
  2. Nun können mit dem Befehl tar -cz -g /mnt/newroot/snapshot_file -f /mnt/newroot/backup_monday.tar.gz home alle Änderungen gespeichert werden
    1. Hierbei muss darauf geachtet werden das man sich im root-Verzeichnis befindet


Differential Backup

Mit dem „find“ Befehl kann ein „differential Backup“ erstellt werden. Dabei wird wie beim „incremental Backup“ zuerst wieder ein „Full Backup“ erzeugt. Im Anschluss wird dann das „differential Backup“ erstellt, das alle Files sichert, die einen neueren Zeitstempel wie das „Full Backup“ haben.

  1. mit dem Befehl tar –czf /mnt/newroot/full_backup.tar.gz home ein Full-Backup anlegen
  2. mit dem Befehl find /home –type f –newer /mnt/newroot/full_backup.tar.gz –print0 | tar ––null –cvf /mnt/newroot/backup_monday.tar.gz –T – können alle Änderungen gespeichert werden


Apache HA

Benötigte Packete

  1. pacemaker
  2. libpacemaker3
  3. corosync
  4. heartbeat *
  5. cluster-glue
  6. libglue2

* = Kann übersprungen werden, wenn OpenAIS oder Corosync genutzt wird


Installation

zypper ar http://clusterlabs.org/rpm/opensuse-11.3/clusterlabs.repo
zypper refresh
yast -i pacemaker libpacemaker3 corosync heartbeat cluster-glue libglue2


Konfiguration

CoroSync

  1. authkey-file erstellen
    1. Datei /etc/corosync/authkey erstellen
      1. touch /etc/corosync/authkey
    2. Nun den Key mit corosync-keygen generieren
  2. Konfigurationsdatei bearbeiten
    1. Beispiel-Datei kopieren
      1. cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
    2. Bearbeiten
      1. vi /etc/corosync/corosync.conf
      2. Erläuterung der Konfigurationsdatei: https://alteeve.com/w/Two-Node_Fedora_14_corosync.conf (englisch)
Beispiel ''/etc/corosync/corosync.conf Konfigurations-Datei
totem {

	version: 2

	# How long before declaring a token lost (ms)
	token:          5000

	# How many token retransmits before forming a new configuration
	token_retransmits_before_loss_const: 20

	# How long to wait for join messages in the membership protocol (ms)
	join:           1000

	# How long to wait for consensus to be achieved before starting a new round of membership configuration ms)
	consensus:      7500

	# Turn off the virtual synchrony filter
	vsftype:        none

	# Number of messages that may be sent by one processor on receipt of the token
	max_messages:   20

	# Disable encryption
	secauth:	off

	# How many threads to use for encryption/decryption
	threads:   	0
	
	# Limit generated nodeids to 31-bits (positive signed integers)
	clear_node_high_bit: yes
	
	# Optionally assign a fixed node id (integer)
	# nodeid:         1234

	interface {
		ringnumber: 0

		# The following three values need to be set based on your environment
		bindnetaddr: 10.0.0.0
		mcastaddr: 226.94.1.1
		mcastport: 5405
	}
}

logging {
	fileline: off
	to_syslog: yes
	to_stderr: no
	syslog_facility: daemon
	debug: on
	timestamp: on
}

amf {
	mode: disabled
}


Pacemaker aktivieren

  1. Die Datei /etc/corosync/service.d/pcmk anlegen und Folgendes einfügen, damit CoroSync den pacemaker lädt
    1. vi /etc/corosync/service.d/pcmk
service {
	# Load the Pacemaker Cluster Resource Manager
	name: pacemaker
	ver:  1
}


Cluster starten

/etc/init.d/corosync start
/etc/init.d/pacemaker start

keepalived


linux/shared_root.txt · Zuletzt geändert: 2015/07/06 22:32 (Externe Bearbeitung)