FreeBSD

FreeBSD ist ein freies, unixartiges Betriebssystem aus der BSD-Familie

azedo am Grazer Linux Tag 2012

Im Rahmen des BSD Boot Camp 2012 sind wir wieder am Grazer Linux Tag 2012.

Samstag, 28. April 2012 ab 10:00 Uhr an der FH Joanneum, Alte Poststraße 149

Mehr zum Programm findet man unter

http://www.bsdbootcamp.org/
http://www.linuxtage.at/

 

BSDDay 2011 in Bratislava

Am Samstag, 5. November 2011, fand der BSDDay 2011 an der Technischen Universität in Bratislava statt. Es fanden sich wieder einige BSD Entwickler und User aus Europa zu Vorträgen, Diskussionen und spannenden Gesprächen zusammen.

http://www.bsdday.eu/2011

Der BSDDay 2012 soll in Wien stattfinden. Die Planung hat bereits begonnen und azedo IT Consulting & Services wird sich daran tatkräftig beteiligen.

SixXS IPv6 Verbindung mit FreeBSD

Mit Hilfe des SixXS Tunnel Broker und FreeBSD ist es ein Leichtes eine IPv6 Verbindung über eine bestehenden IPv4 Internetzugang zu bewerkstelligen.

Als erster Schritt ist die Registrierung bei SixXS erforderlich, diese erfolgt direkt über die Website https://www.sixxs.net/

Das System von SixXS basiert auf Credits. Das bedeutet, dass für die Einrichtung eines IPv6 Tunnels eine bestimmte Anzahl von Credits eingetauscht werden. Credits verdient man sich, wenn man seinen Tunnel stabil und durchgehend aufbaut. Man erhält aber auch bereits für die Registrierung bei SixXS 25 Credits, so das man die erforderliche Anzahl von 15 Credits für die Anforderung eines neuen IPv6 Tunnels bereits zur Verfügung hat.

Nach einer gewissen Bearbeitungszeit erhält man alle notwendigen Daten für die Einrichtung der Tunnelsoftware AICCU, wie Benutzername, Kennwort und Tunnel ID.

Installation der Software:

cd /usr/ports/net/sixxs-aiccu; make install clean

Konfiguration von /usr/local/etc/aiccu.conf

# Login information (defaults: none)
username ABC1-SIXXS
password yOuRsEcReT

# Protocol and server to use for setting up the tunnel (defaults: none)
#protocol <tic|tsp|l2tp>
protocol tic
server tic.sixxs.net

# Interface names to use (default: aiccu)
# ipv6_interface is the name of the interface that will be used as a tunnel interface.
# On *BSD the ipv6_interface should be set to gifX (eg gif0) for proto-41 tunnels
# or tunX (eg tun0) for AYIYA tunnels.
ipv6_interface tun0

# The tunnel_id to use (default: none)
# (only required when there are multiple tunnels in the list)
tunnel_id T12345

Die restlichen Parameter können mehr oder weniger unverändert übernommen werden. Falls Sie ppp oder OpenVPN nutzen oder eine andere Software die das Tunneldevice benötigt, muss ggf. ein anderes Device anstatt tun0 verwendet werden.

Nun zur Systemkonfiguration /etc/rc.conf

ipv6_enable=“YES“
sixxs_aiccu_enable=“YES“

Test der Verbindung nach Reboot des Systems:

ping6 www.freebsd.org
PING6(56=40+8+8 bytes) 2001:15c0:65ff:5f1::2 –> 2001:4f8:fff6::22
16 bytes from 2001:4f8:fff6::22, icmp_seq=0 hlim=54 time=201.936 ms
16 bytes from 2001:4f8:fff6::22, icmp_seq=1 hlim=54 time=201.709 ms
16 bytes from 2001:4f8:fff6::22, icmp_seq=2 hlim=54 time=202.404 ms

 

 

BSD Hypervisor BHyVe

Niemand geringerer als NetApp selbst steckt hinter dem FreeBSD Projekt BHyVe.

Dabei steht BHyVe für „BSD Hypervisor“. Ziel ist es einen Type 2 Hypervisor (aka hostes hypervisor) mit FreeBSD als Host OS zu schaffen.

Der Quellcode wird von NetApp unter der BSD Lizenz veröffentlicht und basiert derzeit auf FreeBSD 8.1. Das Hostsystem soll unter FreeBSD/amd64 mit einem unmodifizierten GENERIC Kernel laufen. Am Guest (FreeBSD/amd64 7.2 und 8.2) sind kleinere Kernelmodifikationen erforderlich.

Erste Benchmarks zeigen sich vielversprechend. Künftig sollen auch Windows, Linux und andere *BSD Guests möglich sein.

Technische Details findet man in der Slide zur BSDCan 2011:

http://wiki.freebsd.org/201105DevSummit?action=AttachFile&do=get&target=BHyVe.pdf

MySQL Performance unter ZFS auf FreeBSD

FreeBSD hat sich zwischenzeitlich auch in einer reinen ZFS Installation im Produktiveinsatz bewährt. Zahlreiche Funktionen wie ZFS-Snapshots, zfs send/zfs receive u.v.a. erleichtern dem Administrator das tägliche Leben mit FreeBSD.

Zuletzt haben sich aber erhebliche Performanceprobleme in Kombination FreeBSD, ZFS und MySQL ergeben. Grundsätzlich haben wir mit gewissen Abstrichen gerechnet und diese erwartet, aber der Import einer ~6 MB MySQL Dump Datei (1 INSERT-Statement je Row) in 4 Minuten 42 Sekunden mit MySQL 5.5 unter FreeBSD ZFS anstatt in 4 Sekunden unter FreeBSD mit UFS2 waren uns dann doch zuviel.

Also Zeit sich einmal mit dem Thema ZFS Tuning auseinanderzusetzen. Wir wollen hier die wichtigsten ZFS Tuning Parameter zum Thema MySQL unter FreeBSD mit ZFS zusammenfassen:

 

/boot/loader.conf:

vfs.zfs.cache_flush_disable=1
vfs.zfs.txg.timeout=5

Der Parameter vfs.zfs.cache_flush_disable stellte sich als der wesentliche in Zusammenhang mit unserem größten Problem dar. MySQL führt bei jeder Transaktion ein Flush auf seine Datenbankdateien durch, dies führt unter ZFS dazu, dass ein Flush tatsächlich die Daten auf die Festplatte schreibt. Das bringt uns zwar erhebliche Datensicherheit, aber auch extreme Performanceverluste im Vergleich zu UFS, welches sich bei einem Flush anders verhält. Um ZFS hier überhaupt „konkurrenzfähig“ zu machen und nicht Äpfel mit Rosinen zu vergleichen, muss man den ZFS-Cache-Flush deaktivieren.

 

/etc/sysctl.conf:

vfs.zfs.prefetch_disable=1
kern.maxvnodes=250000

Der Parameter kern.maxvnodes muss an die eigenen Anforderungen angepasst werden. Die Zahl der aktuell benötigten VNodes kann mit sysctl vfs.numvnodes ermittelt werden. Wenn vfs.numvnodes sich in die Nähe von kern.maxvnodes bewegt, sinkt die Performance.

 

Beim Erstellen der Filesystem für MySQL zu beachten:

# Filesystem für MyISAM Datenbanken, Blocksize auf 8k, in unserem Fall /var/db/mysql
zfs create -o mountpoint=/var/db/mysql tank/mysql
zfs set recordsize=8k

# Filesystem für InnoDB Logs, Default Blocksize
zfs create -o mountpoint=/var/db/mysql/iblog tank/iblog

# Filesystem für InnoDB Tablespace, Blocksize auf 16k
zfs create -o mountpoint=/var/db/mysql/ibdata tank/ibdata
zfs set primarycache=metadata tank/ibdata
zfs set recordsize=16k

Die Änderung der Blocksize/Recordsize muss vor dem Erzeugen der Datenbankdateien erfolgen!

 

Anpassungen my.cnf:

innodb_data_home_dir = /var/db/mysql/ibdata
innodb_log_group_home_dir = /var/db/mysql/iblog
innodb_flush_method = O_DIRECT
skip-innodb_doublewrite

 

Vom Tuning des ARC wurde Abstand genommen und war in unserem Fall nicht erforderlich. Eventuell wird künftig eine SSD für den L2ARC eingesetzt.

Diese Konfiguration ist eine Zusammenfassung aus folgenden Quellen:

http://wiki.freebsd.org/ZFSTuningGuide
http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices
http://www.solarisinternals.com/wiki/index.php/ZFS_for_Databases
http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide
http://assets.en.oreilly.com/1/event/21/Optimizing%20MySQL%20Performance%20with%20ZFS%20Presentation.pdf