Jahr: 2016

Apache Load Balancing

Ziel ist die Installation einer redundanten Lastverteilung auf zwei Servern. Hierzu verwenden wir Apache Server und Keepalived.

Installation Apache

sudo apt-get install apache2

Apache Module aktivieren

Für die Verwendung von Apache Server als Load Balancer sind folgende Module notwendig.

Rewrite => Url Rewrite
Deflate => HTTP Kompression
Headers => Managing HTTP headers
Status => Status Informationen
Proxy => Proxy Module
Proxy_http => Proxy Module für HTTP and HTTPS Protokoll
Proxy_balancer => Clustering und load-balancing

sudo a2enmod rewrite deflate headers status
sudo a2enmod proxy proxy_http proxy_balancer
sudo service apache2 restart

sudo vim /etc/apache2/sites-available/proxy_balancer.conf

<VirtualHost *:80>
 ProxyRequests Off
 ProxyPreserveHost On
 ServerName localhost
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
 
 <Proxy balancer://cluster>
  # Define back-end servers:
  BalancerMember http://10.20.20.11:8001/ route=node1 retry=5 timeout=10
  BalancerMember http://10.20.20.12:8001/ route=node2 retry=5 timeout=10
  ProxySet stickysession=ROUTEID
  ProxySet lbmethod=byrequests
 </Proxy>
 
 <Location /balancer-manager>
  SetHandler balancer-manager
  Order deny,allow
  Deny from all
  Allow from 10.20.20.0/24
 </Location>
 
 ProxyPass /balancer-manager !
 ProxyPass / balancer://cluster
 ProxyPassReverse / balancer://cluster
 
</VirtualHost>

sudo a2ensite proxy_balancer
sudo service apache2 restart

Keepalived

Mit Hilfe von Keepalived wird ein Virtueller Linux Server erstellt, der aus einem Master- und Backup- Server besteht. Hierfür wird eine Virtuelle IP Adresse erstellt, die zwischen beiden Systemen hin und her wechseln kann. Primär liegt die Virtuelle IP Adresse auf dem Master-Server. Ist der Master nicht verfügbar, so wechselt die IP zum Backup. Ein Heartbeat geprüft die Verfügbarkeit der Server und führt bei einem Ausfall den Wechsel der IP zwischen den Servern durch.

Installation Keepalived

sudo apt-get install keepalived

sudo vim /etc/keepalived/keepalived.conf

vrrp_script chk_apache {
    script "/usr/bin/killall -0 httpd" # check the apache2 process
    interval 3 # every 3 seconds
}
 
vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80" # connects and exits
        interval 5 # every 5 seconds
}
 
vrrp_instance VI_1 {
    state MASTER    interface eth0
    virtual_router_id 51
    priority 150    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pw123!  # place secure password here
    }
    virtual_ipaddress {
        10.20.20.25
    }
    track_script {
        chk_apache
        chk_http_port
    }
}

sudo service keepalived restart

Keepalived Backup (Server #2)

Die Einstellungen auf dem Backup-Server sind analog zum Master-Server vor zu nehmen. Abweichungen in der Konfiguration sind „state BACKUP“ und „priority 100“.

sudo vim /etc/keepalived/keepalived.conf

vrrp_script chk_apache {
    script "killall -0 httpd" # check the apache2 process
    interval 3 # every 3 seconds
}
 
vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80" # connects and exits
        interval 5 # every 5 seconds
}
 
vrrp_instance VI_1 {
    state BACKUP    interface eth0
    virtual_router_id 51
    priority 100    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pw123!  # place secure password here
    }
    virtual_ipaddress {
        10.20.20.25
    }
    track_script {
        chk_apache
        chk_http_port
    }
}

Kernel Einstellungen (Sysctl)

Damit die Virtuelle IP im Server verwendet werden kann, muß eine Einstellung für den Kernel geändert werden

sudo vim /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

Nach dem Speichern muß ein Neustart von dem Server durchgeführt werden.

Ob die Einstellung richtig vorgenommen wurde kann man prüfen mit.

sudo sysctl net.ipv4.ip_nonlocal_bind

Funktionstest

Durch An- und Ab-schalten von Keepalived und/oder Apache auf Master und Backup kann man nun die Funktion testen.

sudo service apache stop
sudo service keepalived stop

Die Virtuelle IP kann man sich anzeigen mit dem Kommando ip.

sudo ip addr

Links:
Apache Server Status
Apache Load Balancer Manager

Dateiübertragung zum WebDav mit Client Zertifikat und Authentifizierung

Um eine Datei auf einen WebDav zu übertragen kann man das Toole „curl“ verwenden.

Zuerst wird „curl“ auf Ubuntu installiert.

sudo apt install curl

Jetzt kann man dem Upload auf WebDav durchführen.

curl -T <filename> -u <username>:<password> <url>

Braucht man für die Verbindung zu dem WebDav Server ein Client Zertifikat, dann muss man Curl das Zertifikat mitteilen.

Liegt das Zertifikat im PKCS12 Format (Dateiendung .p12 oder .pfx) vor, muss es zuerst mit OpenSSL umgewandelt werden.

openssl pkcs12 -in cert.p12 -out cert.pem -clcerts  
Enter Import Password: ********
## enter the password used to protect the private key)  
MAC verified OK  
Enter PEM pass phrase: **********
## enter your pass phrase to protect the private key in the new cert.pem file
Verifying - Enter PEM pass phrase: **********

Das PEM Passwort für das Zertifikat sollte mindestens 6 Zeichen lang sein.

Die Prüfung der Zertifikatskette kann man mit dem –insecure Parameter abschalten.

/usr/bin/curl \
 --insecure --cert <certificate>:<password> \
 -u <username>:<password> \
 -T <filename> <url>

Beispiel:

/usr/bin/curl \
 --insecure --cert 'cert.pem:zpw123' \
 -u user:password \
 -T filename.txt http://server/

In dem Beispiel verwenden wird als Zertifikat Passwort zpw123. Nicht zu verwechseln mit dem Passwort für den WebDav Server.

Ubuntu IPv6 abschalten (Temporär)

Will man in Ubuntu das Protokoll IPv6 nur für eine kurze Zeit aus schalten, so ist das zur Laufzeit möglich.

Zeigt den aktuellen Status den Wert „0“ so ist IPv6 an.

cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6

Zum Abschalten kann man den Wert auf „1“ ändern.

sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

Geschwindigkeit von PHP mit MySQL Sockets optimieren

In Ubuntu 16.04 ist die Version MySQL 5.7 und PHP7 enthalten. Vielen Anwendungen verwenden für die Kommunikation von PHP zu MySQL das Netzwerk über die Adresse 127.0.0.1 (localhost). Läuft der MySQL Server auf dem gleichen System wie die PHP Anwendung, dann gibt es auch die Möglichkeit der Kommunktion über eine Unix Socket Verbindung.

Die MySQL Socket befindet sich unter /var/run/mysqld/mysqld.sock. Prüfen kann es mit diesem Kommando.

netstat -nl |grep mysql

MySQL 5.7 ermöglicht die Authentifizierung per Netzwerk oder Socket (Plugin).

Um einen Benutzer (user) mit einem Kennword (password) den Zugriff per Netzwerk (localhost) zu erlauben, ist das Kommando notwendig.

CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Der Zugriff per MySQL Socket ist ohne Kennwort möglich. Der Apache Server läuft in Ubuntu unter dem Benutzer ‚www-data‘.

CREATE USER 'www-data'@'localhost' IDENTIFIED WITH auth_socket;

Jetzt müssen wir dem Benutzer noch die notwendigen Rechte geben. Hier ein Beispiel für alle Rechte (ALL) auf allen Datenbanken (%) und Tabellen (*) zu gewähren.

GRANT SELECT ON `mysql`.* TO 'www-data'@'localhost';
GRANT ALL PRIVILEGES ON `%`.* TO 'www-data'@'localhost';

Eine höhere Sicherheit gibt es, wenn der Benutzer (www-data) nur Zugriff auf die Datenbank (database) mit bestimmten Kommandos (SELECT, INSERT, usw.) erhält.

GRANT SELECT, INSERT, UPDATE, DELETE PRIVILEGES ON 'database'.* TO 'www-data'@'localhost';

Jetzt müssen die Benutzerrechte neu gelesen werden.

FLUSH PRIVILEGES;

Zum entfernen der Rechte kann man diese Kommando verwenden.

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'www-data'@'localhost';

Um die Einstellungen zu Prüfen kann man diese Befehle verwenden.

SHOW GRANTS FOR 'www-data'@'localhost';
SELECT Host,USER,Plugin,Authentication_string FROM `mysql`.`user`;

Die Socket Verbindung kann man mit dem MySQL Client prüfen.

sudo -u www-data mysql -u www-data

Ubuntu Pakete entfernen welche für die Entfernung markiert sind

Das Tool dpkg gibt den Status „rc“ aus. Was bedeutet der Status und welche Maßnahmen sind zu ergreifen?

– r: das Paket zum Entfernen markiert
– c: die Konfigurationsdateien sind derzeit im System vorhanden

Die Idee ist, markierte Pakete auszuwählen und dann Apt „purge“-Befehl für die ausgewählten Pakete auszuführen:

dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs sudo apt-get -y purge

HP Tools unter VMware ESXi

Um ein HP Smart Array unter VMware ESXi zu verwalten, braucht man die HP Tools.

Nach dem Download von VMware überträgt man die VIB Datei auf den ESXi Host. Die Installation erfolgt mit dem ESXCLI Tool.

esxcli software vib install -v /tmp/scsi-hpsa-5.0.0.x86_64.vib

Die erfolgteiche Installation kann man auch prüfen.

esxcli software vib list |grep Hewlett

Jetzt kann man die HPacuCli mit dem ganzen Verzeichnis starten.

/opt/hp/hpacucli/bin/hpacucli

Die Anzeige der Einstellungen erhält man hier mit.

hpacucli> ctrl all show config

Den Status einer Festplatte kann man hiermit anzeigen.

hpacucli> ctrl slot=0 pd 1I:1:3 show status

Jede Festplatte hat eine Status LED welche man nutzen kann, um eine defekte Festplatte zu finden.

hpacucli> ctrl slot=0 pd 1I:1:3 modify led=on

http://www.datadisk.co.uk/html_docs/redhat/hpacucli.htm

VMware ESXi Disk verkleinern

Wird wollen eine Disk von einer Virtual Maschine (VM) von einem VMware ESXi Server verkleinern.

Zuerst müssen wir die Sektoren mit Nullen füllen.

Unter Windows gibt es das Tool SDelete.

sdelete.exe -z c:

Unter Linux können wir mit DD oder CAT arbeiten.

dd bs=1M count=8192 if=/dev/zero of=zero.fill;sync;rm -f zero.fill

cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill

Jetzt fahren wir die VM runter und verbinden uns mit dem VMware Host per SSH.

Jetzt können wir den Speicherplatz eine Thin Provisioning Disk wieder verkleinern.

vmkfstools -K /vmfs/volumes/Datastore2/vm1/vm1.vmdk

Sollten wir kein Thin Provisioning verwenden oder die Disk weiter verkeinern wollen, so ist eine Änderung in den Einstellungen notwendig.

Wir öffnen die Einstellungen von der Disk.

vi /vmfs/volumes/Datastore/vm1/vm1.vmdk

Wir suchen den Eintrag mit der Zahl 83886080.

RW 83886080 VMFS "vm1-flat.vmdk"

Die Zahl 83886080 ist die Größe von 40 GB und errechnet sich wie folgt.

40 GB => 40 * 1024 * 1024 * 1024 / 512 = 83886080

Wollen wird die Disk auf 20 GB verringern, so ergibt sich folgede Rechnung.

20 GB => 20 * 1024 * 1024 * 1024 / 512 = 41943040

Zuvor müssen wir sicher gestellt haben, das alle Daten mit einem Partitionstool in die erste Hälte verschoben wurden. Sonst besteht die Möglichkeit, mit der Änderung die Daten im zweiten Teil der Disk zu verlieren.

Jetzt kann die Konvertierung beginnen.

vmkfstools -i "/vmfs/volumes/Datastore2/vm1/vm1.vmdk" "/vmfs/volumes/Datastore2/vm1/vm1-new.vmdk" -d thin -a lsilogic

SSD Lebenszeit verlängern

Um die Lebenzeit einer SSD zu verlängern, sollte man die Schreibzugriff auf die SSD reduzieren. Hierzu sind zwei Einstellung vor zu nehmen.

1. Die Speicherung von Zugriffzeiten sollte man mit noatime deaktivieren.
2. Das Verzeichnis /tmp/ kann man in den RAM speicher legen.

sudo vim /etc/fstab

/dev/sda1  / ext4   defaults,noatime   0  1
tmpfs  /tmp tmpfs   nosuid,noatime,noexec,mode=1777,size=1024M   0  0

Alternativ gibt es bei Systemd einen Mount, den wir aktivieren können.

sudo ln -s /usr/share/systemd/tmp.mount /etc/systemd/system/
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

Webserver mit Python

Will man auf einem Linux System nur einige Dateien per HTTP übertragen, brauche man nicht gleich Apache installieren.

Man braucht man nur Python, was bei den meisten Distributionen schon installiert ist.

Mit diesem Script können Sie auf Port 8080 alle Dateien als Webserver bereit stellen.

#!/usr/bin/python
import socket
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
 
class MyHandler(SimpleHTTPRequestHandler):
  def do_GET(self):
    if self.path == '/ip':
      self.send_response(200)
      self.send_header('Content-type', 'text/html')
      self.end_headers()
      self.wfile.write('Your IP address is %s \n' % self.client_address[0])
      return
    else:
      return SimpleHTTPRequestHandler.do_GET(self)
 
class HTTPServer(HTTPServer):
  address_family = socket.AF_INET
 
def main():
  server = HTTPServer(('', 8080), MyHandler)
  server.serve_forever()
 
if __name__ == '__main__':
  main()

Ubuntu LTS 14.04 auf 16.04.1 Update nicht möglich

Vielleicht haben Sie auch das Problem, dass ein Update von Ubuntu 14.04. auf 16.04.1 nicht möglich ist.

Zuerst brauchen wir die Update Tools.

sudo apt-get install update-manager-core

Jetzt sollte das Update von LTS 14.04 auf 16.04.1 möglich sein.

sudo do-release-upgrade

Checking for a new Ubuntu release
No new release found

Es wird keine neue Version gefunden, obwohl Ubuntu 16.04.1 veröffentlicht ist. Das Problem liegt in der Freigabe, welche noch nicht erteilt wurde. Dazu muss die Version in der Text Datei veröffentlicht werden.

Die Einstellung welche Version verwendet wird, sind in der Datei /etc/update-manager/release-upgrades gespeichert.

Die Quelle ist in der Datei /etc/update-manager/meta-release definiert. Die LTS Quelle lautet…

http://changelogs.ubuntu.com/meta-release-lts

Die Veröffentlichung wird erst eine Woche nach dem Relese Datum durchgeführt! Will man nicht warten, kann man auf Ubuntu 14.06 ein Update durchführen.

sudo do-release-upgrade --devel-release

Hier wird auf diese Freigabe zugegriffen.

http://changelogs.ubuntu.com/meta-release-lts-development

Will man von Ubuntu 14.04 auf Ubuntu 14.10 updaten, so muss man die Einstellungen von LTS auf Normal ändern.

sudo sed -i s/Prompt=lts/Prompt=normal/g /etc/update-manager/release-upgrades

Quellen: askubuntu.com #1 #2

Copyright © 2025 Weiter.info

Theme von Anders Norén↑ ↑