Implementierung der Fastdfs+Nginx-Clusterkonstruktion

Implementierung der Fastdfs+Nginx-Clusterkonstruktion

1. Einführung in Fastdfs

1. Was ist Fastdfs?

  • Fastdfs ist ein leichtes, verteiltes Open-Source-Dateisystem.
  • Fastdfs löst hauptsächlich das Problem der Dateispeicherung mit großer Kapazität und des gleichzeitigen Zugriffs und erreicht einen Lastausgleich beim Dateizugriff.
  • Fastdfs implementiert Software-RAID, das günstige IDE-Festplatten zur Speicherung verwenden und die Online-Erweiterung von Speicherservern unterstützen kann. Es unterstützt das Speichern nur einer Kopie von Dateien mit demselben Inhalt und spart so Speicherplatz.
  • Auf Fastdfs kann nur über die Client-API zugegriffen werden und es unterstützt keine POSIX-Zugriffsmethoden.
  • Fastdfs eignet sich besonders für große und mittelgroße Websites zum Speichern von Ressourcendateien (wie Bilder, Dokumente, Audio, Video usw.).

2. Fastdfs-Framework-Diagramm

Der Autor (YuQing) gibt das Rahmendiagramm wie folgt an:

In:

Tracker-Server: Der Tracking-Server führt hauptsächlich Planungsarbeiten aus und spielt eine Rolle beim Lastausgleich beim Zugriff. Protokolliert den Status des Speicherservers und fungiert als Hub, der den Client und den Speicherserver verbindet.
Speicherserver : Speicherserver, Dateien und Metadaten werden auf dem Speicherserver gespeichert
Gruppe: Gruppe, auch Volumen genannt. Dateien auf Servern in der gleichen Gruppe haben exakt die gleiche Dateikennung: Sie besteht aus zwei Teilen: Gruppenname und Dateiname (inkl. Pfad)
Metadaten: dateibezogene Attribute im Schlüssel-Wert-Paar-Format, z. B. Breite=1024, Höhe=768

3. Datei-Upload-Prozess

(1) Der Client fragt den Tracker ohne weitere Parameter nach dem Speicherort, auf den hochgeladen werden soll.
(2) Der Tracker gibt einen verfügbaren Speicherplatz zurück.
(3) Der Client kommuniziert direkt mit dem Speicher, um den Dateiupload abzuschließen.

4. Datei herunterladen

(1) Der Client fordert den Tracker zum Speichern der heruntergeladenen Datei an. Die Parameter sind die Dateikennung (Gruppenname und Dateiname).
(2) Der Tracker gibt einen verfügbaren Speicherplatz zurück.
(3) Der Client kommuniziert direkt mit dem Speicher, um den Dateidownload abzuschließen.

5. Synchronisationsmechanismus

(1) Speicherserver in derselben Gruppe sind Peers, und das Hochladen, Löschen von Dateien und andere Vorgänge können auf jedem Speicherserver durchgeführt werden.
(2) Die Dateisynchronisierung wird nur zwischen Speicherservern derselben Gruppe durchgeführt, und zwar im Push-Verfahren, d. h. der Quellserver synchronisiert sich mit dem Zielserver.
(3) Es müssen nur die Quelldaten synchronisiert werden. Die Sicherungsdaten müssen nicht erneut synchronisiert werden, da sonst eine Schleife entsteht.
(4) Es gibt eine Ausnahme zu der zweiten Regel oben. Wenn ein neuer Speicherserver hinzugefügt wird, synchronisiert ein vorhandener Speicherserver alle vorhandenen Daten (einschließlich Quelldaten und Sicherungsdaten) mit dem neuen Server.

6. Tracker-Server-Verzeichnisstruktur

(1) Daten

storage_groups.dat: Speichergruppeninformationen

storage_servers.dat: Speicherserverliste

(2) Protokolle

trackerd.log: Tracker-Server-Protokolldatei

7. Verzeichnisstruktur des Speicherservers

1) Daten

.data_init_flag: aktuelle Initialisierungsinformationen des Speicherservers

storage_stat.dat: Aktuelle Speicherserverstatistiken

sync: speichert Dateien im Zusammenhang mit der Datensynchronisierung

binlog.index: aktuelle Indexnummer der Binlog-Datei

binlog.###: speichert Aufzeichnungen (Protokolle) von Aktualisierungsvorgängen

${ip_addr}_${port}.mark: speichert den Abschlussstatus der Synchronisierung

(2) Protokolle

              storaged.log: Protokolldatei des Speicherservers

Der obige theoretische Bezug:

ChinaUnix-Forum: http://bbs.chinaunix.net/forum-240-1.html

GitHub-Download-Adresse: https://github.com/happyfish100

2. Fastdfs installieren und testen

1. Herunterladen

Muss heruntergeladen werden: libfastcommon fastdfs (Versionen vor 2.0 müssen auf libevent angewiesen sein)

2. Installation

(1) Installieren Sie libfastcommon

$ tar xzvf libfastcommon-1.0.38.tar.gz
$ cd libfastcommon-1.0.38
$ ./make.sh
$ sudo ./make.sh installieren

(2) Installieren Sie fastdfs

$ tar xzvf fastdfs-5.11.tar.gz
$ cd fastdfs-5.11
$ ./make.sh
$ sudo ./make.sh installieren

3. Konfiguration

Topologiediagramm zum Clusteraufbau (aufgrund unzureichender Festplatte sind 192.168.31.4 und 192.168.31.14 derzeit nicht verfügbar und werden nach der Kapazitätserweiterung hinzugefügt)

(1) Tracker konfigurieren (192.168.31.95/192.168.31.99)

$cd /etc/fdfs/

Die Verzeichnisdateien lauten wie folgt:

Führen Sie es dann wie folgt aus:

$ sudo su
#cp tracker.conf.sample tracker.conf 

Konfigurieren Sie die Datei tracker.conf:

vim tracker.conf

Ändern: base_path=/home/fastdfs/tracker (Hinweis: Dieses Verzeichnis muss vor dem Start vorhanden sein, sonst wird ein Fehler gemeldet und der Pfad kann nicht gefunden werden, was bedeutet, dass ein neues Tracker-Verzeichnis manuell erstellt werden muss)

Start-up:

/etc/init.d/fdfs_trackerd starten 

(2) Speicher konfigurieren (192.168.31.2/192.168.31.12)

$ cd /etc/fdfs
$ sudo su
#cp speicher.conf.sample speicher.conf

Überarbeiten:

Gruppenname = Gruppe1 (192.168.31.2) oder Gruppe2 (192.168.31.12)

Basispfad = /home/fastdfs/storage

store_path0=/home/fastdfs/storage

Änderung: IP und Port des Tracker-Dienstes:

tracker_server=192.168.31.95:22122 (Hinweis: hier konfiguriert 31.2 tracker_server 31.95, 31.12 tracker_server konfiguriert 31.99)

Start-up:

/etc/init.d/fdfs_storaged starten 

Zeigen Sie die entsprechenden Konfigurationsinformationen von Fastdfs an

# fdfs_monitor /etc/fdfs/storage.conf

Ein Erfolg wird dann als erfolgreich angesehen, wenn folgende Informationen vorliegen:

Testen Sie den Upload und wählen Sie die Tracker-Maschine 192.168.31.99 als fdfs_client aus.

$ cd /etc/fdfs

$ sudo su

# cp client.conf.sample client.conf

# vim client.conf

Überarbeiten:

Basispfad = /home/fastdfs

tracker_server=192.168.31.99:22122

Testen Sie das Hochladen der Datei net.png:

fdfs_upload_datei /etc/fdfs/client.conf net.png

3. Nginx-Konfiguration

Muss installiert werden:

fastdfs-nginx-module-1.20 Etwas Ähnliches wie ein Plugin

nginx-1.14.2.tar.gz

Um nginx zu installieren, müssen Sie Folgendes installieren:

OpenSSL Zlib PCRE

astdfs-nginx-module in nginx einfügen (muss konfiguriert und make&&make install nginx ausführen)

./Konfigurieren --add-module=../../fastdfs-nginx-module/src/

Ein Fehler wird gemeldet: Die Datei fastdfs-nginx-module-1.20/src/config muss geändert werden

ngx_addon_name=ngx_http_fastdfs_module

wenn test -n "${ngx_module_link}"; dann
  ngx_module_type=HTTP
  ngx_module_name=$ngx_addon_name
  ngx_module_incs="/usr/local/include"
  ngx_module_libs="-lfastcommon -lfdfsclient"
  ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
  ngx_module_deps=
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
  .auto/modul
anders
  HTTP_MODULES = "$HTTP_MODULES ngx_http_fastdfs_module"
  NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
  CORE_INCS="$CORE_INCS /usr/local/include"
  CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

Geändert zu:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS = "$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

ngx_addon_name=ngx_http_fastdfs_module

wenn test -n "${ngx_module_link}"; dann
  ngx_module_type=HTTP
  ngx_module_name=$ngx_addon_name
  ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
  ngx_module_libs="-lfastcommon -lfdfsclient"
  ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
  ngx_module_deps=
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
  .auto/modul
anders
  HTTP_MODULES = "$HTTP_MODULES ngx_http_fastdfs_module"
  NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
  CORE_INCS = "$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
  CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

Dann neu konfigurieren und make && make install

Als nächstes cp mod_fastdfs.conf /etc/fdfs/ und ändern Sie die Datei mod_fastdfs.conf

$ cd fastdfs-nginx-module-1.20/src
$ cp mod_fastdfs.conf /etc/fdfs/

Ändern Sie mod_fastdfs.conf

tracker_server=192.168.31.99:22122
store_path0=/home/fastdfs/storage
Gruppenname=Gruppe1

[Gruppe1]
Gruppenname=Gruppe1
Speicherserver-Port = 23000
Anzahl der Store-Pfade = 1
store_path0=/home/fastdfs/storage


[Gruppe2]
Gruppenname=Gruppe2
Speicherserver-Port = 23000
Anzahl der Store-Pfade = 1
store_path0=/home/fastdfs/storage

fastdfs-5.11/conf/

$ cp http.conf /etc/fdfs/
$ cp mime.types /etc/fdfs/

Ändern: http.conf

http.anti_steal.token_check_fail=/home/fastdfs/fastdfs-5.11/conf/

Ändern Sie nginx.conf

cd /usr/local/nginx/sbin
vim ../conf/nginx.conf

Die Portnummer 8888 entspricht http.server_port=8888 in /etc/fdfs/storage.conf

Laden Sie ein Bild hoch

http://192.168.31.12:8888/group1/M00/00/00/wKgfDFzxVTyAM4suABWWvfB6x_k962.png

Dies ist das Ende dieses Artikels über die Implementierung des Fastdfs+Nginx-Clusteraufbaus. Weitere verwandte Inhalte zum Fastdfs+Nginx-Clusteraufbau finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nginx+FastDFS zum Erstellen eines Image-Servers

<<:  So konvertieren Sie MySQL horizontal in vertikal und vertikal in horizontal

>>:  MySQL nimmt die durch Kommas getrennten Werte aus einem Feld heraus, um ein neues Feld zu bilden

Artikel empfehlen

So erstellen Sie eine Datenbank in Navicat 8 für MySQL

Beim Entwickeln einer Website müssen Sie häufig e...

CnBlogs - Teilen im benutzerdefinierten Blogstil

Nachdem ich die halbe Nacht daran gearbeitet hatt...

Implementierungscode der CSS-Formularvalidierungsfunktion

Rendern Prinzip Im Formularelement gibt es ein Mu...

Detaillierte Erklärung des Prinzips und der Funktion des JavaScript-Closures

Inhaltsverzeichnis Einführung Verwendung von Vers...

Untersuchung des Wertes des Positionsattributs in CSS (Zusammenfassung)

Das CSS-Positionsattribut gibt den Positionierung...

Schritte zur vollständigen Deinstallation des Docker-Images

1. docker ps -a zeigt den laufenden Image-Prozess...

Detaillierte Erläuterung des MySQL-Isolationsebenen-Operationsprozesses (cmd)

Beispielvorgang für nicht festgeschriebenes Lesen...

Zen-Codierung für Editplus – Beispielcodebeschreibung

Er gibt beispielsweise ein: XML/HTML Code div#Seit...

Lösung für die Nichterreichbarkeit des Tencent Cloud Server Tomcat-Ports

Ich habe vor Kurzem einen Server mit Tencent Clou...

Probleme und Erfahrungen bei der Webentwicklung

<br />Nachfolgend sind die Probleme aufgefüh...

Vue3 AST Parser-Quellcode-Analyse

Inhaltsverzeichnis 1. Generieren Sie einen abstra...