GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einfache Möglichkeiten, eine Diensterkennung unter Linux durchzuführen

Die Diensterkennung kann ohne die Anerkennung eines bestehenden Computernetzwerks keine richtige Definition erlangen. Ein Computernetzwerk legt die erforderlichen Kommunikationsprotokolle für Netzwerkgeräte fest, um die verfügbaren Ressourcen über seine Netzwerkknoten gemeinsam zu nutzen. Diese gemeinsame Nutzung von Ressourcen umfasst sowohl Netzwerkgeräte als auch Dienste, die in diesem Netzwerk vordefiniert sind.

Die Problemumgehung für die automatische Erkennung oder Erkennung dieser Netzwerkgeräte und -dienste in einem Computernetzwerk ist eine praktikable Definition der Diensterkennung. Damit die Diensterkennung in einem konfigurierten Computernetzwerk abgeschlossen werden kann, ist die Unterstützung durch ein Netzwerkprotokoll namens Service Discovery Protocol (SDP) erforderlich. Mit diesen Protokollen müssen sich Netzwerkbenutzer und -administratoren nicht auf ihre Fähigkeiten zur Netzwerkkonfiguration verlassen, um die Dinge zum Laufen zu bringen.

Da die Diensterkennung mit Softwareagenten in einem Computernetzwerk kommuniziert, müssen ihre Kommunikationsprotokolle einer gemeinsamen Netzwerksprache entsprechen, um ein kontinuierliches Eingreifen des Benutzers zu verhindern, wann immer die Ausführung eines kritischen Schritts erforderlich ist.

Konzeption der Diensterkennung in einer Produktionsumgebung

Traditionell verfolgte die Anwendungsentwicklung einen monolithischen Ansatz. Dieser Ansatz wurde später umgestaltet, indem eine einzelne Anwendung als kleine synchronisierte Teile existierte, die auf ein gemeinsames Ziel hinarbeiteten. Dieses Konzept definiert die Nützlichkeit von Microservices, bei denen getrennte Komponenten auf ein einziges Anwendungsziel hinarbeiten. SaaS- oder Unternehmensanwendungen sind eine Präferenz für diesen Ansatz zur Anwendungsentwicklung.

Eine App, die durch kleine Komponenten definiert ist, erleichtert es, die Fehler zu beseitigen und eine nicht voll funktionsfähige App-Komponente zu identifizieren und zu ersetzen. Da diese Komponenten zerstörbar sind, verbindet die Bereitstellung solcher Komponenten in einer Produktionsumgebung sie mit einem Netzwerkdienst, der sich mit den Standorten der Komponenten und anderen damit verbundenen Diensten identifiziert.

Diese automatische Konfiguration von Dienstinstanzen zu Produktions-App-Komponenten bricht die Definition der Diensterkennung auf.

Beliebte Open-Source-Service-Discovery-Tools für Linux

Die Entwicklung der Microservice-Architektur und ihr Beitrag zur Entwicklung moderner Apps hat die Service-Erkennung zu einem Muss gemacht. Wenn eine neue App-Komponente bereitgestellt wird, eliminiert die Diensterkennung jegliche Latenz zwischen der App und anderen Dienstendpunkten. Wenn Sie die Erleichterung einiger Service-Discovery-Funktionen durch Microservices in Betracht ziehen, sollten Sie sich mit diesen Open-Source-Tools vertraut machen.

Konsul

Consul erfüllt nicht nur das Ziel der Diensterkennung, sondern ist auch ein effektives Tool zur Überwachung und Konfiguration der Produktionseinstellungen eines Netzwerks. Es erstellt einen Peer-to-Peer-Datenspeicher und dynamische Cluster über die Bibliothek von Serf. Aus diesem Grund ist dieses Diensterkennungstool weit verbreitet.

Consul wird als Schlüsselwertspeicher zum Konfigurieren und Verwalten einer Produktionsumgebung dargestellt. Serf existiert als Klatschprotokoll, das Dinge wie die Fehlererkennung in den erstellten Clustern effektiv verwaltet. Ein Konsensprotokoll verwaltet die Systemkonsistenz in dieser Produktionsumgebung über Raft.

Hauptkonsul-Funktionen

  • Vorausgesetzt, es gibt eine App-Schnittstelle wie MySQL, DNS oder HTTP; Dienste können sich einfach und automatisch selbst registrieren. Es ist auch einfach, andere externe Dienste zu erkennen und zu kapseln, die für die korrekte Funktionalität der eingerichteten Netzwerkumgebung benötigt werden.
  • Dieses Tool bietet umfangreiche Unterstützung für die DNS-Konfiguration. Es macht den DNS-Integrationsprozess nahtlos.
  • Unter der Voraussetzung, dass ein Setup-Cluster Gesundheitsprobleme aufweist, führt Consul effektiv eine Gesundheitsprüfung für diesen Cluster durch und registriert die Diagnoseergebnisse in einem Protokoll, das an den entsprechenden Netzwerkbetreiber gesendet wird.
  • Die Schlüssel/Wert-Speicherfunktion von Consul ist effektiv beim Kennzeichnen von Funktionen und beim Erstellen dynamischer Konfigurationen.
  • Dieses Tool arbeitet mit HTTP-APIs, um Schlüssel/Wert-Daten zu speichern und abzurufen, die in einem verteilten Schlüssel/Wert-Speicher definiert und beschränkt sind.

Consul-Cluster einrichten

Dieser Leitfaden enthält eine praktische Idee zum Erzielen einer Diensterkennung durch einen Consul-Cluster unter Verwendung mehrerer Knoten.

Voraussetzungen
  • Dieses Setup ist produktiver, wenn Sie Zugriff auf drei Linux-Server haben.
  • Auf allen Ihren drei Servern sollten bestimmte Ports geöffnet sein. Sie sind 8300 für TCP, 8301 für TCP &UDP, 8302 für TCP &UDP, 8400 für TCP, 8500 für TCP und 8600 für TCP &UDP. Abhängig von den von Ihnen verwendeten Servern, z. B. AWS, GCP oder Azure, sollten Ihre Firewall- und Sicherheitsgruppen-Tags richtig konfiguriert sein, damit die erwähnten Ports problemlos kommunizieren können.
Einrichtung des Consul-Clusters

Da wir drei Server verwenden, werden wir einen Consul-Cluster mit drei Knoten implementieren. Wir können diesen Knoten die Namen consul-1, consul-2 und consul-3 geben. Die folgenden Schritte führen uns zu einem voll funktionsfähigen Consul-Cluster.

Installation und Konfiguration von Consul auf den drei definierten Knoten

Die Schritte eins bis drei gelten für alle definierten Consul-Knoten.

Schritt 1 :Navigieren Sie auf jedem Server-Terminal zum bin-Verzeichnis und verwenden Sie den entsprechenden Befehl für Ihre Linux-Distribution, um die Linux Consul-Binärdatei herunterzuladen. Dieser letztere Link hebt Installationsprozeduren für andere Linux-Paketmanager hervor.

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install consul

Schritt 2: Die folgenden Verzeichnisse sollten erstellt werden. Achten Sie auf die Verzeichnispfade.

sudo mkdir -p /etc/consul.d/scripts 
sudo mkdir /var/consul

Schritt 3: Wählen Sie aus den drei Servern einen aus und führen Sie den folgenden Befehl auf seinem Terminal aus, um Ihr Consul-Secret zu erstellen. Das generierte Geheimnis sollte in einer Textdatei gespeichert werden.

consul keygen

Schritt 4: Alle Ihre drei Server sollten die folgende Konfigurationsdatei haben. Erstellen Sie es wie unten gezeigt.

sudo vi /etc/consul.d/config.json

Füllen Sie die oben erstellte Datei config.json mit den folgenden Daten. In dieser Datei sollte der Wert „encrypt“ durch den Consul-Secret-Wert ersetzt werden, den Sie in Schritt 3 generiert haben. Außerdem sollte der Wert „start_join“ die entsprechenden IP-Adressen der drei Server enthalten, die Sie verwenden möchten.

{ 
    "bootstrap_expect": 3, 
    "client_addr": "0.0.0.0", 
    "datacenter": "Us-Central", 
    "data_dir": "/var/consul", 
    "domain": "consul", 
    "enable_script_checks": true, 
    "dns_config": { 
        "enable_truncate": true, 
        "only_passing": true 
    }, 
    "enable_syslog": true, 
    "encrypt": "generated_Consul_key_value", 
    "leave_on_terminate": true, 
    "log_level": "INFO", 
    "rejoin_after_leave": true, 
    "server": true, 
    "start_join": [
        "server-1_IP", 
        "server-2_IP", 
        "server-3_IP" 
    ], 
    "ui": true 
}
Erstellen des Consul-Dienstes

Alle unsere drei Knoten oder Server sollten die folgenden Schritte durchlaufen.

Schritt 1: Erstellen einer Systemd-Datei

sudo vi /etc/systemd/system/consul.service

Nachdem die Datei erstellt wurde, füllen Sie sie mit den folgenden Daten.

[Unit] 
Description=Consul Startup process 
After=network.target 

[Service] 
Type=simple 
ExecStart=/bin/bash -c '/usr/local/bin/consul agent -config-dir 
/etc/consul.d/' 
TimeoutStartSec=0 

[Install] 
WantedBy=default.target

Schritt 2: Führen Sie ein Neuladen der System-Daemons durch

sudo systemctl daemon-reload
Bootstrapping und Starten des Clusters

Um den Consul-Dienst auf dem ersten Server oder consul-1 zu starten, führen Sie den folgenden Befehl auf seinem Terminal aus.

sudo systemctl start consul

Um den Consul-Dienst auf den anderen beiden Servern, consul-2 und consul-3, zu starten, sollten Sie denselben Befehl auf ihren jeweiligen Betriebssystemterminals ausführen.

sudo systemctl start consul

Auf jedem der drei Server können Sie ihren jeweiligen Cluster-Status notieren, indem Sie den folgenden Befehl auf jedem ihrer Terminals ausführen.

 /usr/local/bin/consul members

Um zu wissen, ob Ihre Consul-Cluster-Einrichtung erfolgreich war, sollte die Ausgabe, die Sie erhalten, wenn Sie den obigen Befehl ausführen, einige Ähnlichkeiten mit der folgenden aufweisen.

[fosslinux@consul-1 ~]$ /usr/local/bin/consul members
Node       Address       Status     Type     Build     Protocol     DC 
Segment 
consul-1 10.128.0.7:8301 alive     server   1.2.0        2     us-central 
<all> 
consul-2 10.128.0.8:8301 alive     server   1.2.0        2     us-central 
<all> 
consul-3 10.128.0.9:8301 alive     server   1.2.0        2     us-central 
<all>
Zugriff auf die Consul-Benutzeroberfläche

Wenn Ihre installierte Consul-Version 1.20 oder höher ist, wird sie mit einer eingebauten Consul-UI-Komponente geliefert. Diese Consul-Benutzeroberfläche ist webbasiert, und um über Ihren Browser darauf zugreifen zu können, müssen Sie die folgende URL-Syntaxregel einhalten.

http://<your-consul-server-IP-address>:8500/ui

Eine Beispielimplementierung der obigen URL-Syntaxregel sieht in etwa so aus:

http://46.129.162.98:8500/ui

Praxis des Konsuls

Der Nachteil der Verwendung von Consul liegt im Umgang mit der inhärenten Komplexität der damit konfigurierten verteilten Systeme. Dieses Problem ist allgemein und hängt von der Architektur dieser Systeme ab. Es hat nichts mit dem Leistungsaspekt des Konsuls zu tun.

Ein weiterer Vorteil der Arbeit mit Consul besteht darin, dass es über alle erforderlichen Bibliotheken verfügt, sodass Benutzer keine Bibliotheken von Drittanbietern definieren und verwenden müssen. Wir können die Konzeption von Consul mit OSS Sidecar von Netflix vergleichen. Hier bleiben Nicht-Zookeeper-Kunden auffindbar, da sie sich im System registrieren können.

Die Bekanntheit des Consul Service Discovery Tools hat namhafte Unternehmen wie SendGrid, Percolate, DigitalOcean, Outbrain und EverythingMe angezogen.

usw.

Das Etcd-Diensterkennungstool bietet Schlüssel/Wert-Speicherfunktionen, die ähnlich in Consul und Zookeeper abgebildet sind. Es war früher eine wichtige CoreOS-Komponente, bevor das Betriebssystem veraltet war. Die Programmiersprache Go war der Schlüssel zu ihrer Entwicklung. Es verwendet auch Raft als Mittel zur Handhabung von Konsensprotokollen.

Es ist schnell und zuverlässig bei der Bereitstellung von JSON-basierten und HTTP-basierten APIs. Diese funktionale Bereitstellung wird durch Abfrage- und Push-Benachrichtigungen weiter ergänzt. In einer praktischen Umgebung hostet der definierte oder erstellte Cluster fünf oder sieben Knoten. Zusätzlich zur Diensterkennung profitieren auch die Mikrodienstarchitekturen, die Etcd in ihren Containern implementieren, von der Registrierung dieser Dienste.

Unter Dienstregistrierung übernimmt Etcd das Schreiben des benötigten Schlüssel-Wert-Paares. Unter Service Discovery übernimmt Etcd das Lesen des erstellten Schlüssel-Wert-Paares.

Damit andere erstellte Anwendungen mit Etcd kommunizieren können, müssen sie sich an ein confd-Projektprotokoll halten. Dieses Protokoll erstellt statische Konfigurationsdateien aus den gespeicherten Informationen von Etcd. In dieser Einstellung liegt es in der Verantwortung des Clients, alle funktionsfähigen Verbindungsausfälle zu verwalten und eine erneute Verbindung über andere funktionsfähige Dienstinstanzen herzustellen.

Zu den hochkarätigen Unternehmen, die Etcd in ihrem Lebenslauf haben, gehören CloudGear, Headspace, Red Hat, Kubernetes, Apptus, Zenreach, Cloud Foundry und Google. Der wachsende Community-Support von Etcd verbessert die Erfahrung der Entwickler auf der Plattform dieses Service-Discovery-Tools.

Etcd einrichten

Die Fähigkeit von Etcd, Konfigurationen zu speichern und abzurufen, ist nicht seine einzige Hauptfunktion als Open-Source-Schlüsselwertspeicher. Die erstellten Etcd-Cluster haben aufgrund ihrer hohen Verfügbarkeit nur minimale Probleme mit Knotenausfällen. Seine gespeicherten Werte werden von Clients über REST/gRPC abgerufen.

Voraussetzungen

Die folgenden Anforderungen werden Ihre Erfahrung beim Einrichten des Etcd-Clusters fruchtbarer machen.

  • Haben Zugriff auf drei funktionsfähige Linux-Server
  • Ihre drei Serveroptionen sollten mit gültigen Hostnamen konfiguriert sein.
  • Für effektive Peer-to-Peer-Kommunikation und Client-Anfragen sollten die Ports 2380 und 2379 auf Ihren Servern von den Firewall-Regeln des Systems aktiviert werden.
Einrichten des Etcd-Clusters auf Ihrem Linux-Rechner

Das Etcd-Cluster-Setup sollte Ihnen keine Kopfschmerzen bereiten, da es relativ einfach ist, insbesondere mit dem statischen Bootstrap-Ansatz. Damit Sie mit diesem Ansatz erfolgreich booten können, sollten Sie sich die IPs Ihres Knotens merken. Diese Einrichtungsanleitung behandelt alle Schritte, die Sie möglicherweise zum erfolgreichen Erstellen von Linux-Server-Clustern benötigen, da es sich um eine Einrichtung mit mehreren Knoten handelt.

Damit etcd als Dienst ausgeführt werden kann, müssen wir auch systemd-Dateien konfigurieren. Das Folgende ist nur ein Beispiel für die erwähnte Beziehung zwischen Hostname und IP-Adresse, die wir in dieser Einrichtungsanleitung verwenden werden.

etcd-1 : 10.128.0.7

etcd-2 : 10.128.0.8

etcd-3 : 10.128.0.9

Wenn Sie über die erforderlichen Administratorrechte verfügen, können Sie die Hostnamen Ihrer Server ändern, um Ihre anpassbaren Einstellungen widerzuspiegeln.

Zeit, mit der etcd-Cluster-Einrichtung fortzufahren.

Die drei Knoten

Die folgenden aufeinanderfolgenden Schritte gelten für alle drei Serverknoten.

Schritt 1: Navigieren Sie auf jedem Server-Terminal mit dem folgenden Befehl zum src-Verzeichnis:

cd /usr/local/src

Schritt 2: Während Sie auf Github-Versionen verweisen, sollten Sie in der Lage sein, die neueste etcd-Version abzurufen. Stellen Sie sicher, dass Sie die neueste stabile Version herunterladen.

sudo wget "https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz"

Schritt 3: In diesem Schritt entpacken wir die heruntergeladene etcd-Binärdatei.

sudo tar -xvf etcd-v3.3.9-linux-amd64.tar.gz

Schritt 4: Der Untar-Prozess sollte etcd- und etcdctl-Dateien ergeben. Diese Extraktionen sind ausführbare etcd-Dateien. Verwenden Sie den folgenden Befehl, um sie in das lokale bin-Verzeichnis zu verschieben.

sudo mv etcd-v3.3.9-linux-amd64/etcd* /usr/local/bin/

Schritt 5: Da wir möchten, dass ein etcd-Benutzer den etcd-Dienst ausführt, müssen Sie einen etcd-Benutzer, eine Gruppe und Ordner erstellen.

sudo mkdir -p /etc/etcd /var/lib/etcd
groupadd -f -g 1501 etcd
useradd -c "etcd user" -d /var/lib/etcd -s /bin/false -g etcd -u 1501 etcd
chown -R etcd:etcd /var/lib/etcd

Schritt 6: Stellen Sie sicher, dass Sie über Root-Benutzerrechte verfügen, während Sie die folgenden Aktionen ausführen.

ETCD_HOST_IP=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
ETCD_NAME=$(hostname -s)

Die obige Befehlsfolge setzt zwei Umgebungsvariablen. Die erste Umgebungsvariable ruft die IP-Adresse des Servers ab und die zweite verknüpft diese IP-Adresse mit einem Hostnamen.

Etcd benötigt jetzt eine systemd-Dienstdatei.

cat << EOF > /lib/systemd/system/etcd.service

Nachdem Sie diese Servicedatei erstellt haben, füllen Sie sie so aus, dass sie der folgenden ähnelt.

[Unit]
Description=etcd service
Documentation=https://github.com/etcd-io/etcd 
 
[Service]
User=etcd
Type=notify
ExecStart=/usr/local/bin/etcd \\
 --name ${ETCD_NAME} \\
 --data-dir /var/lib/etcd \\
 --initial-advertise-peer-urls http://${ETCD_HOST_IP}:2380 \\
 --listen-peer-urls http://${ETCD_HOST_IP}:2380 \\
 --listen-client-urls http://${ETCD_HOST_IP}:2379,http://127.0.0.1:2379 \\
 --advertise-client-urls http://${ETCD_HOST_IP}:2379 \\
 --initial-cluster-token etcd-cluster-1 \\
 --initial-cluster etcd-1=http://10.142.0.7:2380,etcd-2=http://10.142.0.8:2380,etcd-3=http://10.142.0.9:2380 \\
 --initial-cluster-state new \\
 --heartbeat-interval 1000 \\
 --election-timeout 5000
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target
EOF

Der Teil „–listen-client-urls“ dieser Datei sollte durch die drei verwendeten Server-IPs ersetzt werden. Abhängig von den Setup-Servern unterscheiden sich die Werte „–name“, „–listen-peer-urls“, „–initial-advertise-peer-urls“ und „–listen-client-urls“. Bei den Variablen ETCD_HOST_IP und ETCD_NAME werden ihre Eingabewerte automatisiert und vom System ersetzt.

Bootstrapping von etcd-Clustern

Die obigen Konfigurationen aus den Schritten 1 bis 6 sollten für alle Ihre drei Server gelten. Danach besteht der nächste Schritt darin, den gerade erstellten etcd-Dienst zu starten und zu aktivieren. Dieser Aufwand sollte für alle drei Knoten gelten. Server 1 übernimmt die Funktionalität eines Bootstrap-Knotens. Sobald der etcd-Dienst eingerichtet ist und ausgeführt wird, wählt er automatisch einen Knoten als Leader aus. Sie müssen sich also keine Gedanken darüber machen, an dieser Leader-Knoten-Konfiguration beteiligt zu sein.

systemctl daemon-reload
systemctl enable etcd
systemctl start etcd.service
systemctl status -l etcd.service
Überprüfung des Etcd-Clusterstatus

Das Dienstprogramm etcdctl, das wir zuvor nach dem Herunterladen der etcd-Binärdatei extrahiert haben, ist für die Initiierung der Interaktion mit dem etcd-Cluster verantwortlich. Alle Ihre drei Knoten sollten dieses Dienstprogramm im Verzeichnis /usr/local/bin haben.

Die folgenden Systemprüfungen gelten für alle Clusterknoten und sind nicht auf einen bestimmten beschränkt. Die erste Prüfung besteht darin, den Integritätsstatus Ihres Clusters zu ermitteln.

etcdctl cluster-health

Sie können auch den Mitgliedschaftsstatus eines Cluster-Knotens überprüfen und verifizieren, um festzustellen, ob er den Führungsstatus hat.

etcdctl  member list

Standardmäßig greifen Sie explizit über etcdctl auf Funktionen von etcd v2 zu. Es ist seine Standardzuordnung. Wenn Sie auf etcd v3 und seine Funktionalitäten zugreifen möchten, ist die Verwendung der Variable „ETCDCTL_API=3“ eine praktikable Option. Um diese Variable zu implementieren, konfigurieren Sie sie als Umgebungsvariable. Alternativ können Sie die Variable jedes Mal weitergeben, wenn Sie den Befehl etcdctl verwenden.

Versuchen Sie, die folgenden Schlüsselwertpaare zu erstellen und zu überprüfen.

ETCDCTL_API=3 etcdctl put name5 apple
ETCDCTL_API=3 etcdctl put name6 banana
ETCDCTL_API=3 etcdctl put name7 orange
ETCDCTL_API=3 etcdctl put name8 mango

Um auf den Wert name7 zuzugreifen, führen Sie den folgenden Befehl aus.

ETCDCTL_API=3 etcdctl get name7

Durch die Verwendung von Bereichen und Präfixen ist es möglich, alle Schlüssel wie unten dargestellt aufzulisten:

ETCDCTL_API=3 etcdctl get name5 name8 # lists range name5 to name8
ETCDCTL_API=3 etcdctl get --prefix name # lists all keys with name prefix

Apache Zookeeper

Dieser Service kann als zentralisiert, verteilt und konsistent beschrieben werden. Für die Erstellung ist die Programmiersprache Java verantwortlich. Apache Zookeeper kann Cluster-Änderungen über das Zab-Protokoll effektiv verwalten. Seine frühere Rolle bestand darin, Software-Cluster-Komponenten in der Apache Hadoop-Welt zu warten.

Hier erfolgt die Datenspeicherung entweder in einem Baum, in einem Dateisystem oder in einem hierarchischen Namensraum. Wenn ein Client mit diesem Netzwerk verbunden ist, bleiben Knoten bestehen. Wenn andererseits die Netzwerktrennung auftritt oder ein Problem mit dem konfigurierten Netzwerk auftritt, verschwinden die Knoten. Wenn ein Problem mit Netzwerkfehlern oder Lastausgleich auftritt, liegt es an den Clients, diese zu beheben. Wenn Apache Zookeeper einen neuen Dienst registriert, erhalten die Clients Benachrichtigungen zu diesen Diensten.

Die Konsistenz des Zookeeper-Systems schützt es nicht vor möglichen Systemausfällen. Einige Plattformen haben möglicherweise Probleme bei der Registrierung der erforderlichen Dienste oder treten sogar bei der Implementierung der Lese- und Schreibdienstfunktionen auf Fehler auf. Auf der anderen Seite ist Apache Zookeeper weiterhin eine robuste und etablierte Anwendung mit umfassender Bibliotheksunterstützung, die seiner lebendigen Benutzergemeinschaft und wachsenden Kunden zugute kommt.

Zu den hochkarätigen Unternehmen, die mit Apache Zookeeper in Verbindung stehen, gehören die Apache Software Foundation, Luxoft, Solr, Reddit, Rackspace, Spero Solutions, F5 Networks, Cloudera, eBay und Yahoo!

Apache Zookeeper einrichten

Apache Zookeeper eignet sich aufgrund seiner funktionalen Anpassung als verteiltes Koordinationstool perfekt für die Handhabung verschiedener verteilter Workloads.

Voraussetzungen
  • Sie benötigen drei virtuelle Maschinen (VMs). Die Anzahl der zu verwendenden VMs kann über 3 liegen, aber diese Anzahl muss für Hochverfügbarkeitscluster ungerade sein.
  • Die Ports 2181, 2888 und 3888 müssen über die IP-Tabellen des Serversystems aktiviert werden, damit die eingehenden Verbindungen der VMs über diese Ports erfolgen. Diese Ports sind für die Kommunikation von Apache Zookeeper verantwortlich.

Personen, die unter Cloud-Anbietern wie AWS arbeiten, sollten Endpunkte oder Sicherheitsgruppen haben, die für Apache Zookeeper aktiviert sind, um mit diesen Ports zu arbeiten.

Die Installation und Konfiguration von Apache Zookeeper

Alle Ihre drei VMs sollten von den folgenden Schritten profitieren:

Schritt 1: Server-Update

 sudo yum -y update

Schritt 2: Java-Installation. Überspringen Sie diesen Schritt, wenn Java bereits installiert ist.

 sudo yum  -y install java-1.7.0-openjdk

Schritt 3: Verwenden Sie den Befehl „wget“, um Zookeeper herunterzuladen.

wget http://mirror.fibergrid.in/apache/zookeeper/zookeeper-3.5.2-alpha/zookeeper-3.5.2-alpha.tar.gz

Schritt 4: Entpacken Sie die Apache Zookeeper-Anwendung in das /opt-Verzeichnis.

 sudo tar -xf zookeeper-3.5.2-alpha.tar.gz -C /opt/

Schritt 5: Navigieren Sie zum Apache Zookeeper App-Verzeichnis und benennen Sie es um in

cd /opt
sudo mv zookeeper-* zookeeper

Schritt 6: Im Verzeichnis /opt/zookeeper/conf müssen wir mit einer Datei namens zoo.cfg arbeiten. Erstellen Sie diese Datei und füllen Sie sie mit den folgenden Konfigurationsdaten.

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=<ZooKeeper_IP/hostname>:2888:3888
server.2=<ZooKeeper_iP/hostname>:2888:3888
server.3=<ZooKeeper_iP/hostname>:2888:3888

Ihre drei Zookeeper-Server werden durch Server 1, Server 2 und Server 3 dargestellt. Die Variable „ZooKeeper_IP“ sollte entweder durch Ihre drei Server-IP-Adressen oder die auflösbaren Hostnamen dieser identifizierbaren IP-Adressen ersetzt werden.

Schritt 7:  Die von uns erstellte und gefüllte Datei zoo.cfg verweist auf ein Datenverzeichnis namens lib, das auch ein weiteres Verzeichnis namens zookeeper enthält. Wir müssen dieses Verzeichnis erstellen, da es noch nicht existiert.

 sudo mkdir /var/lib/zookeeper

Schritt 8: Erstellen Sie in dem oben erstellten Verzeichnis eine myid-Datei.

 sudo touch /var/lib/zookeeper/myid

Schritt 9: Diese myid-Datei enthält eindeutige Nummern zur Identifizierung jedes Apache Zookeeper-Servers.

Für Zookeeper-Server 1

 sudo sh -c "echo '5' > /var/lib/zookeeper/myid"

Für Zookeeper-Server 2

 sudo sh -c "echo '6' > /var/lib/zookeeper/myid"

Für Zookeeper-Server 3

 sudo sh -c "echo '7' > /var/lib/zookeeper/myid"
Apache Zookeeper-Dienstkonfigurationen

Um Zookeeper zu starten und zu stoppen, müssen wir Skripte verwenden. Wenn Sie diese Skripts jedoch als Dienst ausführen, können Sie sie besser verwalten. Wir müssen die Datei zkServer.sh öffnen.

 sudo vi /opt/zookeeper/bin/zkServer.sh

Die geöffnete Datei unter „#!/usr/bin/env“ füllt sie mit den folgenden Daten.

# description: Zookeeper Start Stop Restart
# processname: zookeeper
# chkconfig: 244 30 80

Verfolgen Sie in derselben zkServer.sh-Datei die Live-Datei „#use POSTIX interface, symlink…“. Ersetzen und ersetzen Sie die Variablen, die dieser Zeile folgen, durch diese Werte.

ZOOSH=`readlink $0`
ZOOBIN=`dirname $ZOOSH`
ZOOBINDIR=`cd $ZOOBIN; pwd`
ZOO_LOG_DIR=`echo $ZOOBIN`

Der Zookeeper-Dienst benötigt jetzt einen Symlink.

sudo ln -s /opt/zookeeper/bin/zkServer.sh /etc/init.d/zookeeper

Das Startmenü sollte Zookeeper enthalten.

sudo chkconfig zookeeper on

Alle Ihre drei Server sollten mit dem folgenden Befehl neu gestartet werden. Führen Sie es auf ihren jeweiligen Terminals aus.

 sudo  init 6

Sobald die Server neu gestartet wurden, können Sie sie mühelos mit den folgenden Befehlsfolgen verwalten.

sudo service zookeeper status
sudo service zookeeper stop
sudo service zookeeper start
sudo service zookeeper restart

Wenn der Befehl zum Überprüfen des Zookeeper-Status ausgeführt wird, sollte die Terminalausgabe etwa wie folgt aussehen.

/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

Einer der drei Server erhält den Leader-Modus, die anderen beiden behalten den Follower-Modus.

Schlussbemerkung

Service Discovery dient zwei wichtigen Zielen:Hochverfügbarkeit und Fehlererkennung. Mit mehr Funktionalitäten in der Warteschlange kann eine Infrastrukturimplementierung nicht vollständig sein, ohne Service-Discovery-Tools wie Consul, Etcd und Apache Zookeeper zu erkennen und zu konfigurieren. Diese Tools sind Open Source und grundsätzlich effektiv in ihren Servicebereitstellungsfunktionen. Daher werden Sie beim Versuch, einen einfachen Diensterkennungsmechanismus auf Ihren Linux-Systemen zu testen oder zu implementieren, nicht auf Hindernisse stoßen.


Linux
  1. Linux-Betriebssystemdienst „iptables“

  2. Linux-Betriebssystemdienst „Netzwerk“

  3. Linux-Betriebssystemdienst „portmap“

  4. Linux-Betriebssystemdienst „auditd“

  5. Linux-Betriebssystemdienst „nfs“

So starten Sie Netzwerkdienste unter Linux neu

3 Möglichkeiten, eine Netzwerkschnittstelle in Linux zu konfigurieren

Einfache Möglichkeiten zum Generieren eines zufälligen Passworts in der Linux-Shell

Linux-Betriebssystemdienst „anacron“

Linux-Betriebssystemdienst „hplip“

Linux-Betriebssystemdienst „smartd“