Dekoratives Bildchen

Nexus 1000v und VMware Update 2702864

Heute hatte ich in meiner VMware Testumgebung ein Problem das nicht wirklich so einfach zu finden war.
Nach einem allgemeinen Upgrade von VMware die letzten Tage viel heute auf, das einige VMs keine IP Adresse über DHCP bekommen haben.

Als Ursache fand ich heraus, das die VEM Module beider Server nicht mehr bei den VSMs angemeldet waren.
Eine Überprüfung der Nexus 1000V Konfig und ein testweises Upgrade von 5.2(1)SV3(1.3) auf 5.2(1)SV3(1.4) halfen hier nichts.

Ein restart der VEM Module auf den Server lieferte folgende Ausgabe:
/etc/vmware # vem status

VEM modules are loaded

Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 3072 5 128 1500 vmnic1
DVS Name Num Ports Used Ports Configured Ports MTU Uplinks
Nexus1000v 1024 25 1024 1500 vmnic0

VEM Agent (vemdpa) is not running

/etc/vmware # vem restart
stopDpa
startDpa
CPU resource file is already there - old reservation 50
MEM resource file is already there - old reservation 262144
/etc/vmware #

Der vemdpa Prozess lief aber nicht und es wurde auch keine vemdpa.log Datei unter /var/log erstellt.

Die Ursache für den Fehler fand ich dann in dem ich den vemdpa Dienst per Hand gestartet habe:
/opt/cisco/v173/nexus/vem-v173/sbin # ./vemdpa
./vemdpa: symbol lookup error: /usr/lib/vmware/lib/libvdsPublic.so: undefined symbol: Str_Strcpy

Diese Inkompatiblität habe ich dann auch in der Kompatiblitäts-Dokumentation für die Nexus 1000v Version gefunden:
http://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus1000/sw/5_2_1_s_v_3_1_4/compatibility/information/b_Cisco_N1KV_VMware_521SV314_Compatibility_Info.html#concept_D100A28322374EC7B4967983772746CB

Den Fehler habe ich durch ein Downgrade von drei Paketen behoben.
Von VMware das letzte Patch Bundle ESXi550-201404001.zip heruntergeladen und dann esx-base,misc-drivers und tools-light downgegraded:
/tmp # esxcli software vib install -v /tmp/VMware_bootbank_esx-base_5.5.0-2.58.2638301.vib

Installation Result
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true
VIBs Installed: VMware_bootbank_esx-base_5.5.0-2.58.2638301
VIBs Removed: VMware_bootbank_esx-base_5.5.0-2.62.2702864
VIBs Skipped:
/tmp # rm VMware_bootbank_esx-base_5.5.0-2.58.2638301.vib
/tmp # esxcli software vib install -v /tmp/VMware_bootbank_misc-drivers_5.5.0-2.54.2403361.vib

Installation Result
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true
VIBs Installed: VMware_bootbank_misc-drivers_5.5.0-2.54.2403361
VIBs Removed: VMware_bootbank_misc-drivers_5.5.0-2.62.2702864
VIBs Skipped:
/tmp # rm VMware_bootbank_misc-drivers_5.5.0-2.54.2403361.vib
/tmp # esxcli software vib install -v /tmp/VMware_locker_tools-light_5.5.0-2.54.2403361.vib

Installation Result
Message: Operation finished successfully.
Reboot Required: false
VIBs Installed: VMware_locker_tools-light_5.5.0-2.54.2403361
VIBs Removed: VMware_locker_tools-light_5.5.0-2.62.2702864
VIBs Skipped:
/tmp #

Nach einem Reboot fanden VEMs und VSM wieder zusammen und ich habe mir die Neuinstallation der Testumgebung erspart.

Merke: Immer die Kompatiblitäts-Dokumentationen alles Fremdsoftware vor einem Update lesen und direkt nach dem Upgrade alle Funktionen testen

Samba Performance Optimierung

Wieder mal ein Artikel der aus dem Projekt Homeserver 2.0 hervorgegangen ist.

Ich nutze hauptsächlich SMB Freigaben und beim Zugriff von ner VM aus, sollte der Durchsatz so hoch wie möglich sein. Mit den Werten aus der Default Samba Konfiguration war ich nicht so zufrieden, aber nach ein bisschen optimieren sieht das bis auf die 4k Werte schon passabel aus.
crystaldiskmark-mdraid
Dahinter liegt nur ein Software Raid5 aus 4 Platten.

Dann mal zur Samba Konfiguration:

[global]
workgroup = WORKGROUP
server string = Server
max protocol = SMB2
security = user
hosts allow = 192.168.0.
load printers = no
log file = /var/log/samba/log.%m
log level = 0
max log size = 50
dns proxy = no
create mask = 664
directory mask = 775
write cache size = 52428800
large readwrite = yes
min receivefile size = 131072
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536

[test]
comment = Test Freigabe
path = /test
valid users = @users
public = no
writable = yes
browseable = yes
printable = no
vfs objects = recycle
aio read size = 1572864
aio write size = 1572864
aio write behind = /*recycle*/

Zuerst mal zu den Einträgen in der Global Sektion:
max protocol = SMB2
Aktiviert das SMB2 Protokoll. Hierfür wird auf diem Client ein Betriebssystem >=Vista vorausgesetzt

write cache size = 52428800
Aktiviert für jede op locked Datei einen in memory Cache von 50 MB

large readwrite = yes
Aktiviert die 64k read und write Möglichkeiten die ab Server 2k eingeführt wurden. Ist eigentlich per default aktiviert.

min receivefile size = 131072
Erlaubt Samba für Dateien >128k direkt in den Filesystem Puffer zu schreiben.

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
Einige TCP Parameter angepasst.

aio read size = 1572864
aio write size = 1572864

Aktiviert asynchronous IO für Dateien grösser als 1,5 MB

aio write behind = /*recycle*/
Für meinen Papierkorb write behind aktivieren.

Linux Stromverbrauch optimieren

Und wieder mal ein Post der im Zuge des Homeserver 2.0 Projekts entstanden ist.
Die Stromverbrauchsmessung nach dem Zusammmenbau des Servers waren bei weitem nicht dort wo ich eigentlich hinwollte, also habe ich mich mal schlau gemacht und folgendes ist dabei rausgekommen:

Festplatten nach einer gewissen Zeit in den Ruhezustand setzen:

for i in /dev/sd?;
do
  hdparm -S 240 $i;
done

Hiermit wird die Inaktivitätszeit nach der sich die Platten runterfahren für alle Platten auf 20 Minuten gesetzt.

Sata Aggressive Link Power Management ALPM

Dieses Feature muss im Bios auch aktiviert sein, also habe ich zuerst im Bios die entsprechende Funktion aktiviert.

Danach kann man mit folgenden Befehlen das auch unter Linux einstellen:

for i in /sys/class/scsi_host/host*/link_power_management_policy
do
  echo min_power > $i
done

for i in /sys/bus/pci/devices/*/power/control
do
 echo auto >; $i
done

Power Saving für den i915 Grafiktreiber konfigurieren

Beim i915 Kernelmodul muss man die tiefen C-States erst über einen Parameter freischalten. Beim meinem System habe ich eine 60-powersafe.conf im /etc/modprobe.d Verzeichnis erstellt, man kann das aber auch direkt in die /etc/modprobe.conf eintragen:

options i915 i915_enable_rc6=7

Da das Modul schon beim Booten geladen wird, noch mit ‘mkinitrd’ den initrd neu erstellt und das wars.

Power Saving für den onboard Sound einstellen

Ich hätte den auch deaktivieren können vielleicht spart das noch mehr, das muss ich noch testen. Wie beim Grafiktreiber landete der Eintrag in der 60-powersave.conf:

options snd_hda_intel power_save=1

 

Mit diesen Optionen kam ich von 72 Watt im idle auf 44 Watt im idle runter.

Falls ihr noch andere Tipps habt, dann nehm ich die gerne in die Liste auf.

Performance Tuning für Linux Software Raid

Für meinen Homeserver habe ich mich ein bisschen mit den möglichen und sinnvollen Tuning Optionen für Software Raid unter Linux beschäftigt. Dabei ist bei mir folgendes Skript rausgekommen, dass ich nach dem Boot ausführe:

# Get Arrays and physical Disks for active Raid5 Volumes

ARRAYS=""
DISKS=""

for field in `cat /proc/mdstat | grep "active raid5"`
do
  if [[ "x${field:0:2}x" == "xmdx" ]]
  then
    ARRAYS="$ARRAYS $field"
  elif [[ "x${field:0:2}x" == "xsdx" ]]
  then
    DISKS="$DISKS ${field:0:3}"
  fi
done

# Changes on physical Devices
for disk in $DISKS
do
  #Set read-ahead to 16MB
  blockdev --setra 16384 /dev/$disk
  #Device Queue Tuning
  echo 1024 > /sys/block/$disk/queue/read_ahead_kb
  echo 256 > /sys/block/$disk/queue/nr_requests
  #Disable NCQ
  echo 1 > /sys/block/$disk/device/queue_depth
done

# Changes on Raid Arrays
for array in $ARRAYS
do
  #Set read-ahead to 64MB
  blockdev --setra 64536 /dev/$array
  #Increase stripe-cache size
  echo 16384 > /sys/block/$array/md/stripe_cache_size
done

Die einzelnen Zahlenwerte habe ich für mein Setup getestet und können variieren.

TCP Ports über SSH Tunneln

Ausgangssituation:

tcp-tunnel-overview

Es gibt einen Server der nur über SSH erreichbar ist, der aber zusätzliche Dienste anbietet die man gerne nutzen würde. Zusätzliche Portweiterleitungen sind nicht gewünscht. Server ist hier ein Linux System. Bei den Clients wird Linux mit OpenSSH und Windows mit Putty betrachtet.

Wir möchten auf den git Server und zusätzlich den Webserver zugreifen.

Für den Git Server kann lokal der gleiche Port genutzt werden, der Webserver Port muss aber geändert werden, da der Port 80 auf dem Client schon genutzt wird.

Einstellungen am Server:

Konfiguration der sshd_config liegt meistens unter /etc/ssh:

....
Port 22
....
AllowTCPForwarding yes
...

Port 22 kann auch auskommentiert sein, weil es der Standardport ist. Zusätzliche Ports für den SSH Server können hier mit weiteren “Port <Nummer>” zeilen hinzukonfiguriert werden.

 

Linux Client:

Mit ein paar Parametern beim SSH Aufruf ist es hier schon getan:

ich@client$ ssh -L 10080:localhost:80 -L 9418:localhost:9418 benutzer@server
benutzer@server$ 

Sobald die SSH Sitzung steht kann man über localhost:10080 auf den Webserver des Servers zugreifen. Zugriff zum Git Server besteht indem man im Git Client localhost als Server einträgt.

Windows Client:

Hier zeige ich das anhand von Putty als Client. Ohne Screenshots komme ich hier aber nicht aus.

Putty öffnen und Benutzername und Server auswählen:

putty-server.

Unter Connection->SSH->Tunnels die entsprechenden Tunnel einrichten:

putty-tunnel

Danach auf Open und die SSH Sitzung starten.

Jetzt sollte man wie unter Linux zu den beiden getunnelten Diensten verbinden können.