Raspberrypi.md: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(33 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
* Dies beschreibt das Konzept eines RAID-6-Systems bei dem ...
* Dies beschreibt das Konzept eines RAID-6-Systems bei dem ...
** ... ein Raspberry Pi 4 den Master bereitstellt
** ... ein Raspberry Pi 4 den Master bereitstellt
*** er betreibt ein ext4-Dateisystem mit er Freigaben durchführt
*** er betreibt ein ext4-Dateisystem mit dem er Freigaben durchführt
*** er hat selbst kein Speichermedium,  
*** er hat selbst kein Speichermedium,  
*** er ist an einen internen Switch angeschlossen, an den auch alle Nodes gekoppelt sind
*** er ist an einen internen Switch angeschlossen, an den auch alle Nodes gekoppelt sind
Zeile 9: Zeile 9:
*** die haben nur eine Platte mit einer Partition angeschlossen
*** die haben nur eine Platte mit einer Partition angeschlossen
*** sie berechnen P und Q immer selbst anhand ihrer Rolle und der Sektornummer
*** sie berechnen P und Q immer selbst anhand ihrer Rolle und der Sektornummer
*** sie nutzen für "xor" ihren Video Core
** ... weitere Rapsberry Pi 4s als Spares oder Tranies arbeiten


== write(Sector,Data):boolean ==
== write(Sector,Data):boolean ==
Zeile 26: Zeile 28:
** Ich bin mir jetzt unsicher wie das im raid-6 Code gemacht wird
** Ich bin mir jetzt unsicher wie das im raid-6 Code gemacht wird
** wird immer raw,P und Q gelesen, also 3 Platten?  
** wird immer raw,P und Q gelesen, also 3 Platten?  
** oder nur raw,P wegen der Kosten?
** oder nur raw,P wegen der Kosten, und erst bei raw<>decrypt(P) wird Q gelesen?
* es ist wiederum klar "wer" für einen gewissen Sektor verantwortlich ist
* es ist wiederum klar "wer" für einen gewissen Sektor verantwortlich ist
** Node "raw" schickt die Daten ins Netz
** Node "raw" schickt die Daten ins Netz
** Node "P" und Node "Q" lesen die Daten und prüfen ob diese stimmen, senden ihr ACK an den Master
** Node "P" und Node "Q" lesen die Daten mit und prüfen lokal ob diese stimmen, senden ihr ACK an den Master
** wenn beide zustimmen (nur ein kurzes OK) sind die Daten auch für den Master valide
** wenn beide zustimmen (nur ein kurzes OK) sind die Daten auch für den Master valide
** wenn nicht, dann muss die Mehrheit entscheiden, wenn raw<>decrypt(P)<>decrypt(Q) dann haben wir ein Problem
== RDMA ==
* Lese und Schreibvorgänge könnte man mit diesem Protokoll ausführen
* Gibt es schon Block-Devices auf Basis von RDMA?, also fabrics?


== Spares ==
== Spares ==


* Spares lauschen nur auf den Master und haben ihre Platte deaktiviert
* Spares lauschen nur auf den Master und haben ihre Platte wirklich deaktiviert, vorzugsweise stromlos
* zumindest ein Spare sollte eingesetzt werden
* ein "clone" sollte möglich sein, also ein ein Teamup im Laufenden Betrieb
** Dazu soll ein Prozentsatz des Idle Betriebes der Kopierquelle zum Lesen genutzt werden
** Ein Bitmap sorgt für Infos was wiederum kopiert werden muss
** Ein Zähler durchpflügt die komplette Quelle


== Trainee ==
== Trainee ==


* Trainees arbeiten im Idle immer daran die Rolle eines Nodes übernehmen zu können
* Trainees arbeiten im Idle immer daran die Rolle eines Nodes übernehmen zu können
* Dabei versuchen sie, die Anzahl der ungleichen Sektoren zwischen Node und Trainee auf "0" zu bringen
* In der Phase imitieren Trainees die Schreibzugriffe ihrers Nodes
* Dann ersetzen sie diesen und sind ab dem Moment Node
* Dann ersetzen sie diesen und sind ab dem Moment Node
* Ein Trainee könnte den Node bereits ersetzen wenn er noch gar nicht komplett ist
** Er könnte die Schreibzugriffe verarbeiten und den alten Node so entlasten
** den alten Node würde er nur noch leerlesen, dann aushängen


== Revolution ==
== Revolution ==


* eine "Revolution"-Situation ersetzt den Master, alle Nodes müssen zustimmen
* eine "Revolution"-Situation ersetzt den Master, alle Nodes müssen zustimmen
* das ext4 muss dafür unmounted werden, einen switch im laufenden Betrieb ? Das ist mir nicht bekannt, dass dies geht
* alle Nodes müssen in einem tadellosen Zustand sein
* alle Nodes müssen in einem tadellosen Zustand sein
* dabei muss auf dem Master ein Prozess installiert sein, der es Nodes ermöglicht ihn abzuschalten
== Network ==
* UDP enet ? (gibt es als freepascal lib)
* https://code.google.com/archive/p/openpgm/
* https://de.wikipedia.org/wiki/DRBD
* https://de.wikipedia.org/wiki/Network_Block_Device
* https://wiki.debian.org/RDMA
== P und Q berechnen ==
* Alternativ zur GPU kann man auch über die Arm Neon Extension rechnen
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/neon.uc?h=v5.9
* Modernes Beispiel
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/vpermxor.uc?h=v5.9
== Kernel ==
* Ich versuche es erst mal auf einem Tumbleweek openSUSE den 5.4.1 Kerneln zu ändern
* zypper ar -f http://download.opensuse.org/repositories/Kernel:/HEAD/standard/ kernel-repo


== Hardware ==
== Hardware ==
=== SoC ===
* Raspberry Pi 4 (wegen Rechenleistung)
* NanoPi R1S H5 mit Armbian (wegen 3x Network (2x LAN, 1x WLAN))
== SATA ==
[[Datei:USB-SATA.jpg|90px]]
* https://www.olimex.com/Products/USB-Modules/USB-SATA/open-source-hardware
* https://www.dhgate.com/product/super-speed-usb-3-0-to-sata-22-pin-2-5-inch/410453410.html#seo=WAP
* http://linuxgizmos.com/sata-hats-support-up-to-four-drives-on-raspberry-pi-4-or-rock-pi-4/
* https://www.friendlyarm.com/index.php?route=product/product&product_id=254
* Alternativ ein Compute Module 4
* Dazu ein custom Break-Out Board mit
** Poe LAN
** SATA-Port via https://www.asmedia.com.tw/eng/e_show_products.php?cate_index=166&item=118
** Power Converter für 15 W Drive Power, also 5,0V und 12,0V
** Status LED oder OLED
** (kein USB, WLAN, BlueTooth, )
== USV ==
* https://www.youtube.com/watch?v=rylbFnTgFI8
* http://www.miuzeipro.com/product/miuzei-for-raspberry-pi-3-3-model-b-battery-pack-expansion-board-power-supply-with-usb-cable-2-layer-acrylic-case-for-raspberry-pi-3-b-2-model-b-mc12-1/


=== Infrastruktur ===
=== Infrastruktur ===
Zeile 52: Zeile 124:
* Es wird ein POE-Switch verwendet der per VLAN-ID ein privates Netz betreibt
* Es wird ein POE-Switch verwendet der per VLAN-ID ein privates Netz betreibt
* Der Switch hat einen "external" Port ohne VLAN-ID, das ist der eigentliche Anschluss des NAS
* Der Switch hat einen "external" Port ohne VLAN-ID, das ist der eigentliche Anschluss des NAS
* Bei einem 8-Port POE Switch gibt es z.B. (Best Practise)
** Einen externen Port
** Einen Master
** Einen Spare
** Einen "Free Port for alive Replacements"
** 4 Nodes


=== Worker ===
=== Worker ===
Zeile 59: Zeile 137:
** read-Aktivity
** read-Aktivity
** write-Aktivity
** write-Aktivity
** Master "I am Master" + good/fail
** "I am Master" + good/fail
** Node "I am Node" + good/fail
** "I am Node" + good/fail
** "I am Trainee" + good/fail
** Replace me
** Replace me
* Booten über die Festplatte, es gehen 16 GB fürs Betriebssystem verloren
* Booten über die Festplatte, es gehen 16 GB fürs Betriebssystem verloren
* USV mit Super CAPs
* USV mit Super CAPs
== TODO ==
* USB Verbindung auf https://de.wikipedia.org/wiki/USB_Attached_SCSI prüfen


== Historie ==
== Historie ==

Aktuelle Version vom 9. November 2020, 16:44 Uhr

  • Dies beschreibt das Konzept eines RAID-6-Systems bei dem ...
    • ... ein Raspberry Pi 4 den Master bereitstellt
      • er betreibt ein ext4-Dateisystem mit dem er Freigaben durchführt
      • er hat selbst kein Speichermedium,
      • er ist an einen internen Switch angeschlossen, an den auch alle Nodes gekoppelt sind
      • er berechnet niemals P oder Q
    • ... viele Raspberry Pi 4s als Nodes arbeiten
      • sie haben eine feste Rolle inerhalb des RAID-Verbundes
      • die haben nur eine Platte mit einer Partition angeschlossen
      • sie berechnen P und Q immer selbst anhand ihrer Rolle und der Sektornummer
      • sie nutzen für "xor" ihren Video Core
    • ... weitere Rapsberry Pi 4s als Spares oder Tranies arbeiten

write(Sector,Data):boolean

  • Der Master sendet ein Datagram mit
    • WRITE
    • Sector#
    • Data
  • auf den Switch. Das Datagram ist nicht an einen gewissen Node gerichtet, es ist für alle
  • Ein Node kann anhand seiner "Rolle" erkennen, ob er
  • raw oder P oder Q and der Stelle "Sector" speichern muss.
  • Nur die 3 Betroffenen Nodes senden das Ack, der Master weiss wer das sein sollte

read(Sector):Data

  • Der Master führt eine Statistik "wer" einen read beantworten muss
    • Ich bin mir jetzt unsicher wie das im raid-6 Code gemacht wird
    • wird immer raw,P und Q gelesen, also 3 Platten?
    • oder nur raw,P wegen der Kosten, und erst bei raw<>decrypt(P) wird Q gelesen?
  • es ist wiederum klar "wer" für einen gewissen Sektor verantwortlich ist
    • Node "raw" schickt die Daten ins Netz
    • Node "P" und Node "Q" lesen die Daten mit und prüfen lokal ob diese stimmen, senden ihr ACK an den Master
    • wenn beide zustimmen (nur ein kurzes OK) sind die Daten auch für den Master valide
    • wenn nicht, dann muss die Mehrheit entscheiden, wenn raw<>decrypt(P)<>decrypt(Q) dann haben wir ein Problem

RDMA

  • Lese und Schreibvorgänge könnte man mit diesem Protokoll ausführen
  • Gibt es schon Block-Devices auf Basis von RDMA?, also fabrics?

Spares

  • Spares lauschen nur auf den Master und haben ihre Platte wirklich deaktiviert, vorzugsweise stromlos
  • zumindest ein Spare sollte eingesetzt werden
  • ein "clone" sollte möglich sein, also ein ein Teamup im Laufenden Betrieb
    • Dazu soll ein Prozentsatz des Idle Betriebes der Kopierquelle zum Lesen genutzt werden
    • Ein Bitmap sorgt für Infos was wiederum kopiert werden muss
    • Ein Zähler durchpflügt die komplette Quelle

Trainee

  • Trainees arbeiten im Idle immer daran die Rolle eines Nodes übernehmen zu können
  • Dabei versuchen sie, die Anzahl der ungleichen Sektoren zwischen Node und Trainee auf "0" zu bringen
  • In der Phase imitieren Trainees die Schreibzugriffe ihrers Nodes
  • Dann ersetzen sie diesen und sind ab dem Moment Node
  • Ein Trainee könnte den Node bereits ersetzen wenn er noch gar nicht komplett ist
    • Er könnte die Schreibzugriffe verarbeiten und den alten Node so entlasten
    • den alten Node würde er nur noch leerlesen, dann aushängen

Revolution

  • eine "Revolution"-Situation ersetzt den Master, alle Nodes müssen zustimmen
  • das ext4 muss dafür unmounted werden, einen switch im laufenden Betrieb ? Das ist mir nicht bekannt, dass dies geht
  • alle Nodes müssen in einem tadellosen Zustand sein
  • dabei muss auf dem Master ein Prozess installiert sein, der es Nodes ermöglicht ihn abzuschalten

Network

P und Q berechnen

  • Alternativ zur GPU kann man auch über die Arm Neon Extension rechnen
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/neon.uc?h=v5.9


  • Modernes Beispiel
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/vpermxor.uc?h=v5.9

Kernel

Hardware

SoC

  • Raspberry Pi 4 (wegen Rechenleistung)
  • NanoPi R1S H5 mit Armbian (wegen 3x Network (2x LAN, 1x WLAN))

SATA


USV

Infrastruktur

  • Es wird ein POE-Switch verwendet der per VLAN-ID ein privates Netz betreibt
  • Der Switch hat einen "external" Port ohne VLAN-ID, das ist der eigentliche Anschluss des NAS
  • Bei einem 8-Port POE Switch gibt es z.B. (Best Practise)
    • Einen externen Port
    • Einen Master
    • Einen Spare
    • Einen "Free Port for alive Replacements"
    • 4 Nodes

Worker

  • Alle Worker sind identisch aufgebaut
  • Es gibt 5 Status LED
    • read-Aktivity
    • write-Aktivity
    • "I am Master" + good/fail
    • "I am Node" + good/fail
    • "I am Trainee" + good/fail
    • Replace me
  • Booten über die Festplatte, es gehen 16 GB fürs Betriebssystem verloren
  • USV mit Super CAPs

TODO

Historie

  • erstes Konzept am Donnerstag 07.11.2019

Links

http://www.aholme.co.uk/GPU_FFT/Main.htm