Seite wählen

NETWAYS Blog

Vagrant Multi Instance Setup für Icinga 2 Cluster

Nachdem sich Vagrant bestens für Entwicklungs- und Testumgebungen eignet, ist es auch als Basis für Demo VMs ein sehr praktisches Tool (neben dem obligatorischen Provisioning durch z.B. Puppet). Neben den bestehenden Icinga 2 und Icinga Web 2 Vagrant Boxen stellt sich aber mitunter die Anforderung, mehrere Vagrant Boxen in einem Projekt zu bedienen – beispielsweise zwei Icinga 2 Instanzen, die mittels Icinga 2 Cluster Feature miteinander kommunizieren.
Kurz umrissen die Anforderungen

  • 2 Instanzen mit Hostnamen icinga2a, icinga2b
  • Clusterkommunikation in privatem Netzwerk 192.168.33.0
  • HTTP Portforwarding auf localhost Port 8080 bzw 8081
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  servers = { 'icinga2a' => '192.168.33.10',
              'icinga2b' => '192.168.33.20'
            }
  http_port = { 'icinga2a' => 8080,
                'icinga2b' => 8081
              }
  servers.each do |server_name, server_ip|
    config.vm.define server_name do |app_config|
      app_config.vm.box = "centos-6.5-i386-vbox"
      app_config.vm.box_url = "http://boxes.icinga.org/centos-65-i386-vbox.box"
      app_config.vm.hostname = "#{server_name.to_s}"
      app_config.vm.network :forwarded_port, guest: 80, host: http_port[server_name], auto_correct: true
      app_config.vm.network :private_network, ip: "#{server_ip}"
      app_config.vm.provider "virtualbox" do |vb|
        vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant/config", "1"]
      end
      app_config.vm.provision :puppet do |puppet|
        puppet.module_path = ".vagrant-puppet/modules"
        puppet.manifests_path = ".vagrant-puppet/manifests"
        #puppet.options = "--verbose --debug"
      end
      app_config.vm.provision :shell, :path => ".vagrant-puppet/manifests/finalize.sh"
    end
  end
end

Die Verteilung der Icinga 2 Clusterkonfiguration sowie generell die Installation von Icinga 2 und Icinga Web 2 findet dann im Puppet Provisioner statt. Details zur Icinga 2 Clusterkonfiguration gibts in der Icinga Dokumentation sowie bei uns  im Webinar Archiv. Wir installieren auch gerne eine Testumgebung und helfen bei der Migration von Icinga 1.x auf Icinga 2.
Wie baut man die zugehörigen Puppetmodule? Dazu gibts Beispiele im Icinga Git sowie wir auch Puppet Schulungen für Wissbegierige im Portfolio haben.
Ein kurzes Beispiel anhand einer vorbereiteten Konfiguration:

file { '/etc/icinga2/cluster':
  owner   => icinga,
  group   => icinga,
  ensure  => 'directory',
  require => Package['icinga2']
}
file { "/etc/icinga2/cluster/$hostname.conf":
  owner   => icinga,
  group   => icinga,
  source  => "puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/cluster/$hostname.conf",
  require => File['/etc/icinga2/cluster']
}

Cebit Blog
Dieses Vagrant Setup habe ich für das Icinga 2 Webinar gestern verwendet, welches dann auch auf der CeBit nächste Woche vor Ort bei uns am Stand in Halle 6, Stand E16, (310) besichtigt werden kann – vorbeikommen lohnt sich auf jeden Fall!
Und wer sich nun fragt, wieso Entwickler nicht nur magischen Code fabrizieren, sondern auch mit genialen Tools arbeiten dürfen, dem sei ans Herz gelegt – komm zu uns! Wir suchen immer motivierte, entdeckungsfreudige Kollegen 🙂

Ruby On Rails lernen mit vagrant und puppet

Seit zwei Wochen bin jetzt dabei aus Hobby-Gründen Ruby on Rails zu lernen. Zum einen war ich Ruby-Neuling (außer den Bruchstücken die ich bisher in puppet benötigte) zum anderen kannte ich Rails auch nur vom hörensagen.

Ruby lernen:

Also brauchte ich als erstes mal Lernmaterialien, dafür habe ich zum einen das Railsbuch gefunden, das zwar Versionsmäßig etwas angegraut ist allerdings für mich gute Dienste leistet, zum anderen die Ruby-auf-Schienen Seite mit deren Hilfe ich mich in die Ruby-Grundlagen eingearbeitet habe.

Ruby ausprobieren:

Als nächstes braucht man eine Entwicklungsumgebung. Hierfür kann man entweder alle Entwicklungspakete wie ruby, rails, die ganzen gems, nodejs usw. auf seinem HostPC installieren, oder aber man nimmt vagrant her und hat eine transportable, abgegrenzte und reproduzierbare Umgebung.
Um das aufsetzen einer solchen Box auf das Mindestmaß an Arbeit zu beschränken gibt es das Rails-Dev-Box Projekt.
Vorausgesetzt man hat schon vagrant, virtualbox und git installiert sind die nächsten Schritte bis zur fertigen Box schnell erledigt.

# clonen des Rails-dev-Box Projekts
git clone https://github.com/rails/rails-dev-box.git
# wechsel in das Verzeichnis
cd rails-dev-box
# starte die Vagrant-Box, sollte die 32bit Ubuntu box noch nicht
# heruntergeladen worden sein, passiert das jetzt automatisch
vagrant up
# Wenn man im rails-dev-box Verzeichnis ist kann man sich problemlos per ssh verbinden.
vagrant ssh

Hat man schon ein rails Projekt begonnen, kann man es einfach nach rails-dev-box/rails kopieren und in der box die gems nachinstallieren.

vagrant ssh
# Das rails-dev-box Verzeichnis wird automatisch in /vagrant gemountet
cd /vagrant/rails
# alle gems werden nachinstalliert mit
bundle

Möchte man ein Neues Prokekt beginnen geht das auch

vagrant ssh
# Das rails-dev-box Verzeichnis wird automatisch in /vagrant gemountet
cd /vagrant/rails
# Hier erstellt man sein neues Projekt names "rails" mit
rails new rails

Jetzt hat man einen guten Einstieg ins Ruby-on-Rails lernen.
Zwei Empfehlungen aus dem rails-dev-box Projekt möchte euch nicht vorenthalten.
Man möchte am liebsten auf seinem Host entwickeln und nur in der Box testen. Auf dem Host hat man nämlich in der Regel die entsprechend angepasste IDE, ssh-keys usw. installiert.
Zum zweiten möchte man auch und besonders im Lernprozess git benutzen. Dann kann man nämlich, wenn man nach jedem lern-Schritt einen Commit macht, am ende den kompletten Lernprozess nochmal im Git nachvollziehen und hat evtl. sogar ein Nachschlage-/Spickwerk

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

Weekly Snap: TKmon for Servers, Puppet & Pacemaker Courses

weekly snap22 – 26 July was packed with training courses on Puppet and Pacemaker, tips for SAHI and Vagrant vboxsf, and a new monitoring software for servers to boot.
Martin presented TKmon, a simplified version of Icinga for Thomas Krenn Servers that automatically notifies Thomas Krenn for support on hardware problems.
Eva counted 92 days to the OSMC with Simon Meggle’s presentation on “End-2-End Monitoring of Web Applications with SAHI”.
She went on to introduce our Puppet training courses – the first officially certified classes in Germany for beginners, advanced users and even developers wishing to extend the configuration management software.
Continuing with courses, Lennart gave us a peek into his teaching plan on building clusters with Pacemaker as Eric shared his quick tip for delivering Javascript files and images using Vagrant vboxsf.
Lastly, Bernd lamented superficial Facebook birthday wishes while Stephanie reported on this year’s B2Run and our 17-man team of joggers.

Virtuelle Entwicklungsumgebungen mit Vagrant

Mit Vagrant beschreibt und erstellt man virtuelle Entwicklungsumgebungen, was Entwicklern das Leben deutlich vereinfacht. Es läuft unter Linux, Windows und Mac OS X. Wenige Handgriffe reichen, um eine virtuelle Maschine in Betrieb zu nehmen und einzurichten.
Die Umgebung wird über ein Vagrantfile konfiguriert, welches u.a. port forwarding, mounts, Netzwerkkonfiguration und automatische Installation von Software steuert. Letzteres ist über Shellskripte, Ansible, Chef oder Puppet möglich.
Vagrant kann out of the box mit VirtualBox verwendet werden. VMWare ist auch möglich, aber kostenpflichtig. Weitere provider wie lxc findet man auf github.
Warum Vagrant?
Hauptgrund ist die klar definierte Umgebung. Jeder arbeitet mit den exakt gleichen Bibliotheken und identischen Versionen von Software. Infrastrukturkomponenten müssen nicht lokal installiert werden und die Umgebung ist reproduzierbar.
Zum Weiterlesen empfehle ich die Anleitung für Einsteiger.

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.