Kategorien
Docker Elasticsearch

Elasticsearch 5 Cluster mit Docker Beispiel

Mit der docker-compose.yml kann man sich schnell eine Container-basierte Umgebung mit Docker bauen. Anpassbar sind die Memory-Werte für die Java-VM (512MB) und für das Docker Image (1GB).

Um einen Cluster mit 2 Nodes zu betreiben, kann man die elasticsearch2 auskommentieren.

version: '2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
#  elasticsearch2:
#    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1
#    environment:
#      - cluster.name=docker-cluster
#      - bootstrap.memory_lock=true
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
#    ulimits:
#      memlock:
#        soft: -1
#        hard: -1
#    mem_limit: 1g
#    volumes:
#      - esdata2:/usr/share/elasticsearch/data
#    networks:
#      - esnet

volumes:
  esdata1:
    driver: local
#  esdata2:
#    driver: local

networks:
  esnet:
Kategorien
Elasticsearch Server Administration

Elasticsearch Server außerhalb von localhost verfübar machen

Um eine Elasticsearch Instanz nach außen über HTTP verfübar zu machen, muss man folgendes tun:

1. Den Server nach außen verfübar machen, bei Amazon AWS z.B. durch das konfigurieren einer Security Group

2. Die elasticsearch.yml ändern ( /etc/elasticsearch/elasticsearch.yml):

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 172.44.11.222

3. Den Elasticsearch Service neustarten:

sudo service elasticsearch restart

4. Danach kann man den Status abfragen von außen um zu schauen, ob alles funktioniert hat:

curl -XGET '172.44.11.222:9200/_cluster/health?pretty'

Response:

{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
Kategorien
Server Administration Webdeveloper Tools

Linux vergleichen von Dateien innerhalb eines Ordners auf Dateiänderungen

Mit dem diff   Befehl unter Linux kann man sehr einfach herausfinden, welche Unterschiede es in zwei scheinbar identsichen Ordnern gibt.

Ein Anwendungsbeispiel wäre z.B. 2 Projekte miteinander zu vergleichen und die Unterschiede im Code herauszufinden.

#Ausgabe auf der Console stdout
diff -qr \
--exclude="css" \
--exclude="tmp" \
/myMaster/folder /mySlave/folder


#Pipen der Ausgabe in eine Datei oder less:
diff -ur \
--exclude="css" \
--exclude="tmp" \
/myMaster/folder /mySlave/folder | /tmp/diff.txt
Kategorien
Ansible Server Administration

PHP7 mit Ansible installieren

Mit Ansible kann man sehr einfach alle PHP7 von Ondrej’s Respository installieren mittels der Befehle:

- name: Remove old PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php-7.0' state=absent

- name: Add PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php'

- name: Install packages
  apt: pkg={{ item }} state=latest update_cache=yes
  with_items:
   - mysql-client
   - nginx
   - php7.0-cli
   - php7.0-fpm
   - php7.0-dev
   - php7.0-curl
   - php7.0-gd
   - php7.0-mbstring
   - php7.0-mcrypt
   - php7.0-mysql
   - php7.0-soap
   - php7.0-sqlite3
   - php7.0-xml
   - php7.0-zip
   - php7.0-bcmath
   - php7.0-ssh2
   - php-rrd
   - git
   - zlibc
  tags:
   - php
Kategorien
PHP Server Administration

Analyse von sehr großen gzip/bzip2 gepackten Log-Dateien per Stream

Man kann per Stream in PHP beim verarbeiten der Daten sehr große Log-Dateien, die mehrere GB groß sind, sehr leicht analysieren mit Hilfe von Stream Compression Filter.

Damit kann die Datei ohne sie komplett in den Speicher laden zu müssen entpackt und analysiert werden beim Einlesen der Datei.

Dadurch kann man während des einlesens der Log-Datei schon nach beliebigen Stellen im Code suchen:

$file = 'X:/file.log.bz2';
$searchString = '2017-01-01';

if(file_exists($file)){
   $handle = fopen($file, 'r');
   stream_filter_append($handle, 'bzip2.decompress');
   while(!feof($handle)){
      $line = fgets($handle);
      if(strpos($line, $searchString) !== false){
         echo $line;
      }
   }
   fclose($handle);
}
Kategorien
MySQL Server Administration

MySQL Monitoriong der ProcessList / Queries mit einem Konsolen Befehl

Ein hilreicher Befehl für die problem-Analyse von MySQL Servern ist sich die ProcessList anzuschauen, um zu sehen, welche Quueries aktuell ausgeführt werden. Wenn man dies kombiniert mit dem watch Befehl und diesen 1 mal pro Sekunde neuladen lässt und auf die Queries reduziert, hat man eine guter Übersicht, was auf dem MySQL Server los ist und welche Queries problematisch seien könnten:

watch -n 1 "mysql -u root --password='XXX' -h localhost -s -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE Command=\"Query\";'"

Wichtig ist, den Befehl als root laufen zu lassen, um auch alle Queries zu sehen.

Mit Hilfe des Parameter -n kann man die Aktualisierungrate in Sekunden angeben.

Das MySQL root-Passwort ist zu ergänzen.

 

Ausgabe:

5361925476      user     localhost       NULL    Query   0       executing       SELECT * FROM xxx WHERE yyy

5361925477      user     localhost       NULL    Query   0       executing       UPDATE zzz WHERE zzz
Kategorien
Server Administration

Untersuchung des Traffics zwischen lokaler Rechner und Server am Beispiel von XDebug

Wenn man untersuchen will, was an der Kommunikation vom lokalen Rechner und Server bei XDebug nicht funktioniert, kann man sich den Traffic anschauen auf dem Port 9000, der am Server ankommt:

watch -n 1 "netstat | grep 9000"

//Ausgabe
Every 1.0s: netstat | grep 9000                                                                                          Tue Feb  7 16:01:50 2017

tcp        0      0 name:58572        host.server:9000 ESTABLISHED

und am lokalen PC kann man den Traffic beobachtet:

C:\>netstat  1 | find /i "9000"

//Ausgabe
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT

Wenn Xdebug bis zum lokalen System kommt, erhält man eine Ausgabe wie oben sichtbar (Windows).

Kategorien
PHP Server Administration

PHP auf Linux Konsole on-the-fly ausführen

Wenn man einen kurzen PHP Befehl ausführen will auf der Konsole, kann man mit dem –run Parameter Code schnell und unkompliziert ausführen

php -r "echo 'hello world';"

//Ausgabe
hello world
Kategorien
Server Administration

Linux löschen aller Datein mit Namen Regex

Um alle Dateien zu löschen, die einem bestimmten Regex entsprechen, kann man find benutzen:

find . -type f -iname "*error.log\.?"
//findet:
xxerror.log.1
yyyError.log.2
fatalError.log.1

Löschen kann man die gefundenen Dateien mittels des Linux Befehls:

find . -type f -iname "*error.log\.?" -exec rm {} \;
Kategorien
PHP Server Administration

Stress Testing Tools

Zum Stress- bzw. Last-Testen von PHP Applikationen kann man das Tool Apache bench  oder Seige benutzen.

Damit lässt sich das Verhalten einer Applkation unter hoher Last testen.