Raspberrypi.md
- 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