All posts tagged Windows Server 2008

Hallo zusammen,

in dem heutigen Blogeintrag möchte ich euch zeige wie Ihr unter Ubuntu 16.04 einen einfachen Loadbalancer mit HA-Proxy installieren könnt. Für das Howto habe ich drei Ubuntu 16.04 Server installiert. Zwei Server dienen mir als Webserver und einer als Loadbalancer.

 

 

 

 

 

 

 

Um einen nginx Webserver installieren zu können, benötigt es noch ein paar vorbereitungen.

Nach der Grundinstallation der beiden Webserver, müssen diese auf den neusten Stand gebracht werden.
Nach dem Login, wechselt man zum root Benutzer mit:

sudo -i oder sudo su -
apt update -y && apt upgrade -y

Nach dem das System up to date ist, konfiguriert man den beiden Server einee statischen IP-Adresse.
Hier habe ich mich an den Screenshot gehalten, der Webserver 1 bekommt die IP-Adresse 192.168.xxx.101 und der Webserver 2 die IP-Adresse 192.168.xxx.102.

vim /etc/network/interfaces

auto enp0s3
iface enp0s3 inet static
  address 192.168.xxx.xxx
  netmask 255.255.255.0
  gateway 192.168.xxx.xxx
  dns-search htdom.local
  dns-nameservers 192.168.xxx.xxx

reboot
## nginx Webserver installieren und überprüfen
##
apt-get install nginx apache2-utils ssh
dpkg --get-selections nginx apache2-utils
dpkg -l | grep nginx

Zur besseren Übersicht habe ich die /var/www/html/index.nginx-debian.html angepasst, damit man diese in den Screenshots besser erkennt.

 

 

 

 

 

Nach dem die Webserver fertig installiert sind und man auf diese sauber zugreifen kann, werden wir den Loadbalancer vorbereiten.

Auch der Loadbalancer muss auf den neusten Stand gebracht werden.
Nach dem Login, wechselt man zum root Benutzer mit:

sudo -i oder sudo su -
apt update -y && apt upgrade -y

Nach dem das System up to date ist, konfiguriert man auch dem Loadbalancer eine statischen IP-Adresse. Hier habe ich die IP-Adresse 192.168.xxx.51 benutzt.

vim /etc/network/interfaces

auto enp0s3
iface enp0s3 inet static
  address 192.168.xxx.xxx
  netmask 255.255.255.0
  gateway 192.168.xxx.xxx
  dns-search htdom.local
  dns-nameservers 192.168.xxx.xxx

reboot
## HA-Proxy installieren und überprüfen
##
apt install haproxy -y
dpkg --get-selections haproxy
dpkg -l | grep haproxy
## HA-Proxy Konfigurationsdateien sichern
##
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.old
cp /etc/default/haproxy /etc/default/haproxy.old
## /etc/default/haproxy ##
##
vim /etc/default/haproxy

## Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
## Basis Konfiguration des HAProxy Dienst
##
vim /etc/haproxy/haproxy.cfg

## Basic Settings
##
global
  daemon

defaults
  mode http #tcp

frontend http-incoming
  bind 192.168.178.51:80
  default_backend webservers

backend webservers
  balance roundrobin #leastconn and #source
  server web01 192.168.178.101:80
  server web02 192.168.178.102:80

systemctl restart haproxy.service
systemctl status haproxy.service

Hier ruft man im Webbrowser nun die IP-Adresse (192.168.xxx.51) des Loadbalancer auf, wenn man die Webseite mit F5 refreshed, dann sieht man das Roundrobin verhalten. Wenn man in der /etc/haproxy/haproxy.cfg Konfigurationsdatei den mode auf tcp stellt, dann wird erst dann ein Roundroubin durchgeführt, wenn einer der Webserver down ist.

Dies kann man testen in dem man auf den Webservern den nginx Dienst stoppt. (systemctl stop nginx.service oder service nginx stop)

 

 

 

 

 

## Basis Konfiguration des HAProxy mit Statistics Report
##
vim /etc/haproxy/haproxy.cfg

## Global Settings
##
global
  daemon
  stats socket /run/haproxy/admin.sock mode 660 level admin 
  stats timeout 30s
  user haproxy
  group haproxy

## Default Settings
##
defaults
  log global 
  mode http #tcp
  option httplog

  timeout connect 5000
  timeout client 50000
  timeout server 50000

  retries 3

  errorfile 400 /etc/haproxy/errors/400.http
  errorfile 403 /etc/haproxy/errors/403.http
  errorfile 408 /etc/haproxy/errors/408.http
  errorfile 500 /etc/haproxy/errors/500.http
  errorfile 502 /etc/haproxy/errors/502.http
  errorfile 503 /etc/haproxy/errors/503.http
  errorfile 504 /etc/haproxy/errors/504.http

## Listen Settings
##
listen stats 
  bind 192.168.178.51:12345
  mode http

  maxconn 10

  stats enable
  stats hide-version
  stats refresh 30s
  stats show-node
  stats realm Loadbalanced\ Servers
  stats uri /stats
  stats auth admin:password

## Frontend Settings
##
frontend http-incoming
  bind 192.168.178.51:80
  default_backend webservers

## Backend Settings
##
backend webservers
  balance roundrobin #leastconn and #source
  option httpchk GET /webserver_check
  server web01 192.168.178.101:80 check inter 500 fall 3 rise 2
  server web02 192.168.178.102:80 check inter 500 fall 3 rise 2
## Konfiguration überprüfen
##
haproxy -f /etc/haproxy/haproxy.cfg -c

 

 

 

 

 

## Um die Option httpchk aktiv schalten zu können muss auf allen Webservern
## die webserver_check in das Root Verzeichnis abgelegt werden.
## Nach dieser Datei hällt dann der Loadbalancer ausschau.

touch /var/www/html/webserver_check

 

 

 

 

## HAProxy Statistics Report
##
http://192.168.178.51:12345/stats

Username: admin
Passwort: password

So das war es auch schon wieder von mir, viel Spaß beim konfigurieren.

Gruß Helmut

 

Hallo zusammen,

um ein wenig von dem Grundlagentraining weg zu kommen, zeige ich euch heute, wie Ihr XML-Dateien mit Powershell nutzen könnt.
Hier habe ich euch ein kleines Howto geschrieben wie man XML-Dateien mit Microsoft Excel und Notepad vorbereitet. Zusätzlich könnt ihr hier die XML-Templates herunterladen.

XML-Dateien für Powershell vorbereiten
XML-Dateien Templates Download

Wie fragt man nun die Struktur einer XML-Datei ab? Hier ein kleines Schaubild.

XML_Visualisierung

 

 

 

 

 

Fangen wir an, eine XML-Struktur mit Powershell abzufragen. 🙂

Um mit XML-Dateien in Powershell arbeiten zu können, muss man das vorangestellte PowerShell-XML-Objektadapter [xml]$VariablenName definieren.
Die Variable wird als .NET-Klasse – System.Xml.XmlDocument deklariert. Zu finden mit:

$xmlfile | Get-Member
##XML-Datei wird in folgende Variable geladen
[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml ##serverliste3_template.xml aus dem Download
 
##Informationen aus der XML-Datei auslesen
 $xmlfile.firma
 $xmlfile.firma.land
 $xmlfile.firma.land.standorte
 $xmlfile.firma.land.standorte.standort
 $xmlfile.firma.land.standorte.standort.server
 $xmlfile.firma.land.standorte.standort.server.hostname
 $xmlfile.firma.land.standorte.standort.server.FQDN

serverliste1  serverliste2

 

 

 

 

##Die Land/Standorte/Server mit der Abfrage eingrenzen

$xmlfile.firma.land
$xmlfile.firma.land[0]
$xmlfile.firma.land[1]

serverliste3

 

 

 

 

 

$xmlfile.firma.land[0].standorte.standort
$xmlfile.firma.land[0].standorte.standort[0]
$xmlfile.firma.land[0].standorte.standort[1]
$xmlfile.firma.land[0].standorte.standort[0].server.FQDN
$xmlfile.firma.land[0].standorte.standort[1].server.FQDN
$xmlfile.firma.land[0].standorte.standort.server[0].FQDN
$xmlfile.firma.land[0].standorte.standort.server[1].FQDN

serverliste4

 

 

 

 

 

$xmlfile.firma.land.standorte[1].standort.server.FQDN
$xmlfile.firma.land.standorte.standort[2].server.FQDN
$xmlfile.firma.land.standorte.standort[3].server.FQDN
$xmlfile.firma.land.standorte.standort.server[1].FQDN
$xmlfile.firma.land.standorte.standort.server[2].FQDN

serverliste5

 

 

 

 

 

Um jetzt die Informationen von so einer XML-Datei nutzen zu können, habe ich hier mal zwei Abfragen gebaut, um meine Server anpingen zu können.

[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml
Clear-Host

$PingMachines = $xmlfile.firma.land.standorte.standort.server.FQDN

ForEach($MachineName In $PingMachines)
	{$PingStatus = Gwmi Win32_PingStatus -Filter "Address = '$MachineName'" | 
Select-Object StatusCode 
if ($PingStatus.StatusCode -eq 0)
	{Write-Host $MachineName -Fore "Green"}
else
	{Write-Host $MachineName -Fore "Red"}}

Ping2

 

 

 

 

 

$path = D:\PowershellScripte\Powershell_XML
[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml
Clear-Host

$PingMachines = $xmlfile.firma.land.standorte.standort.server | Foreach-Object {$_.'FQDN'} | Foreach-Object {

if (Test-Connection $_ -quiet -count 1){
	" " + $_  | out-file "$path\Ping_Success.txt" -append
} else {
	" " + $_ | out-file "$path\Ping_NotSuccess.txt" -append
}
 }

Ping1

 

 

 

 

 

Temporäre Änderung einer XML Struktur

[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml

$xmlfile.firma.land.standorte[0].standort.server[0] | 
ForEach-Object {if ($_.FQDN -like "ADS01.de.htdom.local")
	{$_.FQDN = "ADS01.htdom.local"
  }
 if ($_.Domain -like "de.htdom.local")
	{$_.Domain = "htdom.local"
  }
 }

 $xmlfile.firma.land.standorte[0].standort.server

XML_aendern

 

 

 

 

 

Server Liste erstellen lassen – sortiert nach IP Adressen

[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml

$xmlfile.firma.land.standorte.standort.server | Where-Object {$_."IP-Address" -gt "192.168.178.1"} | Sort-Object IP-Address | Format-Table FQDN,IPAddress,SubnetMask,Gateway,DNSServer1,DNSServer2,WINSServer -AutoSize

Servername + Domainname zusammenstellen lassen

[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml

$xmlfile.firma.land.standorte.standort.server | ForEach-Object{$_.Hostname + "." + $_.Domain} | Sort-Object $_.Hostname

Servereinträge in einer XML-Datei clonen

Clone1

[xml]$xmlfile = Get-Content .[Pfad zur XML-Datei]\serverliste3.xml

$newsrv = $xmlfile.firma.land.standorte.standort[0].server.Clone()
$newsrv.Hostname = "ADS03"
$newsrv.FQDN = "ADS03.htdom.local"
$newsrv.IPAddress = "192.168.178.102"
$newsrv.DNSServer2 = "192.168.178.102"
$newsrv.Memory = "3072 MB"
$newsrv.CPartition = "50 GB"
$newsrv.DPartition = "100 GB"
$newsrv.OS = "Windows Server 2012 R2 x64"
$newsrv.ServicePack = "-"

$newsrv2 = $xmlfile.firma.land.standorte.standort[0].server.Clone()
$newsrv2.Hostname = "ADS04"
$newsrv2.FQDN = "ADS04.htdom.local"
$newsrv2.IPAddress = "192.168.178.103"
$newsrv2.DNSServer2 = "192.168.178.103"
$newsrv2.Memory = "3072 MB"
$newsrv2.CPartition = "50 GB"
$newsrv2.DPartition = "100 GB"
$newsrv2.OS = "Windows Server 2012 R2 x64"
$newsrv2.ServicePack = "-"

$xmlfile.firma.land.standorte.standort[0].AppendChild($newsrv)
$xmlfile.firma.land.standorte.standort[0].AppendChild($newsrv2)
$xmlfile.save("D:\PowershellScripte\Powershell_XML\test.xml")

Clone2

 

 

 

 

 

So das was erst mal wieder von mir.

Viele Spaß beim ausprobieren.
Gruß Helmut

Hier in diesen Howto möchte ich euch zeigen, wie man die Active Directory-Zertifikatdienste Installiert und grundlegend konfiguriert. Das ganze wurde in einer Virtuellen Umgebung mit Oracle – VirtualBox nachgestellt. Diese Zertifikatstelle benötige ich für Exchange 2010 und Sharepoint 2010.

image

In den Serverrollen aktiviere ich die Active Directory-Zertifikatdienste und klicke auf Weiter

image

Aktiviere die Zertifizierungsstelle und die Zertifizierungsstelle-Webregistrierung, danach poppt der Rollen Assistent hoch dass noch der IIS zusätzlich Installiert werden muss.

image

Hier findet Ihr wieder das Howto zum folgenden Beitrag –>  Active-Directory-Zertifikatdienste (PKI) Installieren & konfigurieren

 

Viele Grüße
Helmut

Quellen:
Rachfahl IT Solution –> Link
Windows Server 2008 R2 Buch von Ulrich B. Boddenberg –> Link

Oftmals passiert es, das man als Support Techniker oder Administrator, anrufe von Benutzern bekommt. Die so lauten wie “Netzwerk ist zu langsam”, “die Netz.-Anwendung regiert so schlecht”, “das Speichern auf das Home Laufwerk dauert so lange”. Alles bekannte Aussagen. 🙂

Nun ist aber das Netzwerk in den seltensten Fällen der Flaschenhals von solchen Problemen. Sondern eher die Konfiguration der einzelnen Komponenten, wie z.B. Switschport, Netzwerkkarte, falsches Netzwerkkabel, oftmals sehe ich noch in Firmen das RJ45 LAN Kabel der Kategorie 3 eingesetzt werden, die Netzwerkkarte ist aber fest auf 100 MB/Fullduplex eingestellt.

Kann man schön bei Wikipedia nachlesen –> http://de.wikipedia.org/wiki/Twisted-Pair-Kabel#Kategorie_3

In der heutigen Zeit sollte man mindestens KAT5e – KAT7 Verkabelung einsetzen, um hier die Fehlerquellen zu minimieren.

Viele unterschätzen, das eigentlich die Serverfestplatten für den langsamen Zugriff zuständig sind als vielmehr das Netzwerk.

Hier ein kleines Beispiel:

Ich kopiere von meinen Windows 7 Computer, Daten von ca. 800 MB auf vier verschiedene Netzwerkkomponenten.

1. Windows 7 auf eine QNAP NAS Storage mit 2 Festplatten 7200rpm im RAID 0 Verbund

image

Hier bekomme ich bei einem Gigabit Netzwerk gerade einmal 21,2 MB/s zustande (Sehr Mager)

2. Windows 7 auf einen Windows Server 2003 R2 Server mit einem RAID 5 Verbund

image

Hier bekomme ich schon ca. 64MB/s zustande (könnte besser sein)

3. Windows 7 auf eine ISCSI Storage Einheit mit einen RAID 6 Verbund und 15000rpm Festplatten

image

Derzeit bekomme ich eine Geschwindigkeit von ca. 90 MB/s zustande (obwohl auch schon weit über 100 und mehr MB/s geschafft wurden, kommt immer darauf an wie viele Personen zur gleichen Zeit darauf zugreifen)

4. Windows 7 und einen Windows Server 2008 R2 Server mit einen RAID 5 Verbund und 10000rpm Festplatten

image

Auch hier sinkt die Übertragungsraten wieder deutlich ab.

Was auch immer noch von vielen Benutzern unterschätzt wird, ist zum einen die Anzahl der Dateien die kopiert werden, zum zweiten die größer der einzelnen Dateien und zum dritten werden die Dateien kopiert oder werden die Dateien verschoben.
Alles das erhöht oder verschlechtert die Zugriffszeiten auf Netzwerkshares.

Trotzdem stelle ich euch ein kleines Tool vor mit dem die Netzwerkverbindungen zwischen Client und Server analysieren werden kann.

Hier gibt es ein Java basiertes Tool namens “JPerf” –> http://code.google.com/p/xjperf/downloads/detail?name=jperf-2.0.2.zip&can=2&q=

Natürlich sollte auf beiden Client und Server auch die aktuelle Java Runtime Enviroment installiert werden. Findet Ihr hier –> http://www.java.com/de/download/

Diese Software muss nicht Installiert werden und kann einfach auf Server und Client gestartet werden.

Zum ersten kopiere ich die Extrahierte Version von JPerf auf den Server und starte die “jperf.bat
image

Nach kurzer Zeit erscheint das IPerf Programm in einen neuen Fenster.

image

Dort stelle ich noch folgenden Dinge ein wie im Bild gezeigt und starten den Server.

Jetzt lauscht der Server auf den Port 5001 bis der Client gestartet wird.

image

Bei dem Client mache ich jetzt das selbige, sollte beim starten einen Fehlermeldung erscheinen (dann könnte es sich wahrscheinlich um ein x64 System handeln und man muss den Pfad zur javaw.exe in der “jperf.bat” anpassen.)

image

image

Auswertung sieht wie folgt aus

image

Ursachenforschung

Welche Geschwindigkeiten sind im Netzwerk normal? Mit Fast Ethernet sollte JPerf zwischen 90 und 100 MBit/s erreichen können. Bei Gigabit Ethernet sollte aktuelle Hardware problemlos 900 MBit/s und mehr übertragen können. WLAN nach IEEE 802.11g überträgt netto ca. 25 MBit/s. Bei 802.11n sind durchaus 130 MBit/s möglich.

Liegen die Messwerte deutlich unter diesen Zahlen? Dann lohnt sich eine Gründliche Netzwerkanalyse.

Fehlerhafte Netzwerkkabel, LAN-Dosen und Patchfelder können zu Paketverlusten führen. TCP erkennt diese Verluste und überträgt die Daten bei Bedarf erneut (TCP Retransmission). Dadurch funktioniert die Datenübertragung zwar problemlos, wird aber deutlich langsamer.

Einige Netzwerkkarten bieten die Möglichkeit Kabeltests durchzuführen und zeigen Übertragungsfehler an. Auch viele Switches erlauben einen Blick auf die Error Counter der Switchports.

Für Gigabit Ethernet werden LAN-Kabel nach Kategorie KAT5e oder besser benötigt. Es müssen alle 8 Adern des Kabels beschaltet sein. Mit vier Adern kommt nur ein Link mit 100 MBit/s zustande.

Viel Spaß beim Ausprobieren.

Viele Grüße
Helmut

Hier möchte ich euch zeigen wie Ihr einen ICINGA 1.0.2 Server in einer Microsoft Hyper-V Virtuellen Maschine installieren könnt.
Zusätzlich zeige ich euch wie Ihr eine Grundkonfiguration von ICINGA vornehmen könnt und wie Ihr das neue ICINGA Web-Interface 1.0.1 installiert.

image

image

image

image

Hier der passende Link –> ICINGA 1.0.2 in einer Microsoft Hyper-V Maschine installieren

Mehr Anleitungen findet Ihr unter Server Howto’ s

Viele Grüße
Helmut