Raspberrypi.md: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→SATA) |
Root (Diskussion | Beiträge) (→SATA) |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 28: | 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 == | ||
Zeile 38: | Zeile 44: | ||
* Spares lauschen nur auf den Master und haben ihre Platte wirklich deaktiviert, vorzugsweise stromlos | * Spares lauschen nur auf den Master und haben ihre Platte wirklich deaktiviert, vorzugsweise stromlos | ||
* zumindest ein Spare sollte eingesetzt werden | * 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 == | ||
Zeile 45: | Zeile 55: | ||
* In der Phase imitieren Trainees die Schreibzugriffe ihrers Nodes | * 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 == | ||
Zeile 59: | Zeile 72: | ||
* https://de.wikipedia.org/wiki/DRBD | * https://de.wikipedia.org/wiki/DRBD | ||
* https://de.wikipedia.org/wiki/Network_Block_Device | * 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 == | == Kernel == | ||
Zeile 80: | Zeile 105: | ||
* http://linuxgizmos.com/sata-hats-support-up-to-four-drives-on-raspberry-pi-4-or-rock-pi-4/ | * 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 | * 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 | * https://www.youtube.com/watch?v=rylbFnTgFI8 |
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
- ... ein Raspberry Pi 4 den Master bereitstellt
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
- 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
SoC
- Raspberry Pi 4 (wegen Rechenleistung)
- NanoPi R1S H5 mit Armbian (wegen 3x Network (2x LAN, 1x WLAN))
SATA
- 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
- 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
- USB Verbindung auf https://de.wikipedia.org/wiki/USB_Attached_SCSI prüfen
Historie
- erstes Konzept am Donnerstag 07.11.2019