Obecnie używamy wielu serwerów WWW z dostępem do jednego serwera mysql i serwera plików. Patrząc na przejście do chmury, czy mogę użyć tej samej konfiguracji i podłączyć EBS do wielu instancji maszyn, czy też jakie jest inne rozwiązanie?
Obecnie używamy wielu serwerów WWW z dostępem do jednego serwera mysql i serwera plików. Patrząc na przejście do chmury, czy mogę użyć tej samej konfiguracji i podłączyć EBS do wielu instancji maszyn, czy też jakie jest inne rozwiązanie?
Odpowiedzi:
AKTUALIZACJA (kwiecień 2015 r.) : W tym przypadku należy zacząć przyglądać się nowemu systemowi Amazon Elastic File System (EFS) , który został zaprojektowany do wielokrotnego dołączania dokładnie tak, jak chcesz. Kluczowa różnica między EFS i EBS polega na tym, że zapewniają one różne abstrakcje: EFS ujawnia protokół NFSv4, podczas gdy EBS zapewnia nieprzetworzony blokowy dostęp we / wy.
Poniżej znajdziesz moje oryginalne wyjaśnienie, dlaczego nie jest możliwe bezpieczne zamontowanie surowego urządzenia blokowego na wielu maszynach.
ORYGINALNY POST (2011):
Nawet gdybyś mógł podłączyć wolumen EBS do więcej niż jednej instancji, byłby to _REALLY_BAD_IDEA_. Cytując Kekoa: „to tak, jakby używać dysku twardego w dwóch komputerach naraz”
Dlaczego to zły pomysł? ... Powodem, dla którego nie można dołączyć woluminu do więcej niż jednej instancji, jest fakt, że EBS zapewnia abstrakcję „pamięci blokowej”, na której klienci uruchamiają system plików taki jak ext2 / ext3 / etc. Większość tych systemów plików (np. Ext2 / 3, FAT, NTFS itp.) Jest napisana przy założeniu, że mają wyłączny dostęp do urządzenia blokowego. Dwie instancje dostępu do tego samego systemu plików prawie na pewno zakończyłyby się łzami i uszkodzeniem danych.
Innymi słowy, podwójne montowanie woluminu EBS działałoby tylko wtedy, gdyby był uruchomiony klastrowy system plików, który jest przeznaczony do współużytkowania urządzenia blokowego między wieloma komputerami. Co więcej, nawet to nie wystarczy. EBS musiałby zostać przetestowany pod kątem tego scenariusza i aby upewnić się, że zapewnia te same gwarancje spójności, co inne rozwiązania współdzielonych urządzeń blokowych ... tj. Że bloki nie są buforowane na pośrednich niewspółdzielonych poziomach, takich jak jądro Dom0, warstwa Xen, i jądro DomU. Do tego dochodzi kwestia wydajności synchronizacji bloków między wieloma klientami - większość klastrowych systemów plików jest zaprojektowana do pracy w dedykowanych sieciach SAN o dużej szybkości, a nie w standardowej sieci Ethernet. Brzmi to tak prosto, ale to, o co prosisz, jest bardzo nietrywialne.
Możesz też sprawdzić, czy scenariusz udostępniania danych może obejmować NFS, SMB / CIFS, SimpleDB lub S3. Wszystkie te rozwiązania wykorzystują protokoły wyższych warstw, które są przeznaczone do udostępniania plików bez współdzielonego podsystemu urządzeń blokowych. Często takie rozwiązanie jest faktycznie bardziej wydajne.
W Twoim przypadku nadal możesz mieć jedną instancję / serwer plików MySql, do której dostęp ma wiele interfejsów WWW. Ten serwer plików może następnie przechowywać swoje dane na woluminie EBS, umożliwiając tworzenie nocnych kopii zapasowych migawek. Jeśli instancja, na której działa serwer plików, zostanie utracona, można odłączyć wolumin EBS i ponownie podłączyć go do nowej instancji serwera plików, aby w ciągu kilku minut można było zarchiwizować i uruchomić.
„Czy istnieje coś takiego jak S3 jako system plików?” - tak i nie. Tak, istnieją rozwiązania innych firm, takie jak s3fs, które działają „dobrze”, ale nadal muszą wykonywać stosunkowo drogie wywołania usługi sieciowej dla każdego odczytu / zapisu. W przypadku wspólnego narzędzia reż, działa świetnie. W przypadku klastrowego użycia FS, które widzisz w świecie HPC, nie ma szans. Aby działać lepiej, potrzebujesz nowej usługi, która zapewnia binarny protokół zorientowany na połączenie, taki jak NFS. Oferowanie takiego wielomonontowanego systemu plików z rozsądną wydajnością i zachowaniem byłoby WSPANIAŁYM dodatkiem do EC2. Od dawna jestem zwolennikiem Amazon, aby zbudować coś takiego.
Jest to teraz możliwe dzięki najnowszym typom instancji działającym w AWS Nitro w tej samej Strefie Dostępności. Istnieją pewne zastrzeżenia, ale jest to świetne w niektórych przypadkach użycia, które wymagają szybkości EBS i gdzie EFS nie jest wykonalny.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html
Nie, to tak, jakby używać dysku twardego w dwóch komputerach.
Jeśli chcesz udostępniać dane, możesz skonfigurować serwer, do którego będą miały dostęp wszystkie Twoje instancje. Jeśli potrzebujesz prostego obszaru przechowywania dla wszystkich swoich instancji, możesz skorzystać z usługi pamięci masowej Amazon S3 do przechowywania rozproszonych i skalowalnych danych.
Przechodząc do chmury, możesz mieć dokładnie taką samą konfigurację, ale możesz zastąpić serwer plików S3 lub połączyć wszystkie instancje z serwerem plików.
Masz wiele opcji, ale udostępnianie dysku twardego między instancjami prawdopodobnie nie jest najlepszą opcją.
Nie, zgodnie z dokumentacją EBS: „Wolumin może być dołączony tylko do jednej instancji naraz”.
Jak obecnie korzystasz z pamięci współdzielonej? Jeśli służy to tylko do obsługi plików z serwera plików, czy rozważałeś skonfigurowanie systemu tak, aby można było przekazywać określone żądania do procesu na serwerze plików zamiast obsługiwać te pliki przez serwery sieciowe?
aws ec2 describe-volumes
zwraca tablicę załączników.
Jestem prawie pewien, że nie możesz, ale możesz sklonować EBS i dołączyć go do innej instancji.
Jest to przydatne w przypadku stałych zestawów danych lub do testowania na „prawdziwych” danych, ale nie pozwala na działanie więcej niż jednej instancji w jednym magazynie blokowym
Wiele serwerów WWW uzyskujących dostęp do serwera MySQL i serwera plików jest normalne w AWS. Niektóre z najlepszych praktyk, których należy przestrzegać dla wyżej wymienionej architektury, to:
Punkt 1) MySQL na EC2 można ustawić jako Master-Slave w trybie async / semi sync w AWS. EBS-OPT + PIOPS w RAID 0 jest zalecany dla wysokowydajnej bazy danych
Punkt 2) Alternatywnie możesz skorzystać z trybu Amazon RDS + Multi-AZ. W celu skalowania odczytu do MySQL RDS można dołączyć wiele replik odczytu RDS.
Punkt 3) Objętość EBS nie może być podłączona jednocześnie do wielu EC2. Możesz utworzyć serwer plików oparty na GlusterFS na Amazon EC2 przy użyciu EBS. Wiele serwerów internetowych może jednocześnie komunikować się z jednym GlusterFS w ramach AWS infra.
Punkt 4) Jeśli twoja aplikacja może być zintegrowana z S3 jako magazyn plików, jest to preferowane ze względu na stabilność, jaką wnosi do architektury. Dostęp do S3 można również uzyskać za pomocą narzędzi takich jak S3fuse z poziomu aplikacji.
EBS właśnie ogłosił, że jest to możliwe: https://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/
W świecie IT jest coś znanego jako Clustered Filesystem, Redhat GFS, Oracle OCFS2, Veritas CFS ...
Krótka odpowiedź brzmi kategorycznie „nie”. Inni powiedzieli to powyżej.
Ci, którzy powiedzieli „tak”, nie odpowiedzieli na pytanie, ale na inne pytanie. Jeśli EFS jest tylko usługą NFS, nie jest to odpowiedź na pierwotnie podane pytanie. I nie ma znaczenia, czy EFS jest „wdrożony we wszystkich strefach”, czy nie, ponieważ możesz całkiem stworzyć własną instancję NFS i mieć wiele serwerów, które montują NFS. To nie jest nic nowego, zrobiliśmy to już w 1992 roku. SMB i sshfs, wszystkie te sposoby to tylko sposoby montowania dysków jako zdalnego systemu plików.
Ci, którzy powiedzieli „dlaczego miałbyś to zrobić” lub „to wszystko skończy się łzami”, są w błędzie. Od dziesięcioleci montujemy wiele dysków na wielu serwerach. Jeśli kiedykolwiek pracowałeś z SAN (Storage Area Network), możliwość podłączenia tego samego urządzenia do wielu węzłów, zwykle przez FibreChannel SAN, jest całkowicie normalna. Tak więc każdy, kto dziesięć lat temu zarządzał serwerami, zanim wirtualizacja / serwery w chmurze stały się wszechobecne, ma na to pewien wpływ.
Wkrótce pojawiły się klastrowe systemy plików, w których dwa systemy mogły odczytywać i zapisywać dokładnie na tym samym woluminie. Myślę, że zaczęło się to już od czasów VAX i Alpha VMS w historii. Klastrowe systemy plików używają rozproszonego schematu wzajemnego wykluczania, aby móc bezpośrednio manipulować blokami.
Zaletą montażu tego samego dysku w wielu węzłach jest szybkość i redukcja pojedynczych punktów awarii.
To prawda, klastrowe systemy plików nie stały się bardzo popularne w biznesie hostingowym „konsumenckim”. Są skomplikowane i mają pewne pułapki. Ale nie potrzebujesz nawet klastrowego systemu plików, aby korzystać z dysku podłączonego do wielu węzłów obliczeniowych. Co jeśli chcesz mieć dysk tylko do odczytu? Nie potrzebujesz nawet klastrowego systemu plików! Po prostu umieściłeś w swoim / etc / fstab to samo urządzenie fizyczne, co tylko do odczytu (ro). Następnie montujesz na 2 lub 10 serwerach EC2 i wszystkie mogą czytać bezpośrednio z tego urządzenia!
Istnieje oczywisty przypadek użycia tego w świecie serwerów w chmurze podczas budowania szybko skalujących się farm. Możesz przygotować cały główny dysk systemowy i użyć bardzo małego dysku rozruchowego i konfiguracyjnego dla każdego z serwerów. Możesz nawet uruchomić je wszystkie z tego samego dysku rozruchowego, a tuż przed ponownym zamontowaniem / w trybie odczytu i zapisu możesz wstawić Union-FS z 3 warstwami:
Więc tak, to pytanie miało dużo sensu i niestety odpowiedź brzmi (nadal) „nie”. I żaden NFS nie jest świetnym zamiennikiem dla tego przypadku użycia, ponieważ penalizuje całą aktywność odczytu z dysku systemowego. Jednak rozruch sieciowy z dysku systemowego NFS jest jedyną alternatywą dla wdrożenia opisanego powyżej przypadku użycia. Niestety, ponieważ skonfigurowanie sieciowego agenta rozruchowego i NFS jest znacznie trudniejsze niż dostęp do tego samego fizycznego urządzenia blokowego.
PS: Chciałbym przesłać krótszą wersję tego w komentarzach, ale nie mogę z powodu głupiego progu 51 punktów kredytowych, więc muszę napisać odpowiedź z tym samym podstawowym „Nie”, ale uwzględnić mój punkt widzenia, dlaczego tak jest istotne pytanie, na które nie ma zasłużonej odpowiedzi.
PPS: Właśnie znalazłem kogoś w StackExchange, kto wspomniał o iSCSI. iSCSI jest trochę jak NFS, ale logicznie przypomina SAN FibreChannel. Otrzymujesz dostęp (i udostępnianie) fizycznych urządzeń blokowych. Ułatwiłoby to udostępnianie dysku rozruchowego, więc nie trzeba konfigurować rozruchu sieciowego z systemu bootd, co może być skomplikowane. Ale z drugiej strony w AWS nie ma również możliwości uruchamiania z sieci.
Chociaż wcześniej EBS umożliwiał podłączenie tylko jednej instancji EC2 do danego woluminu, teraz możliwe jest podłączanie wielu urządzeń, przynajmniej dla woluminów io1. Aby uzyskać więcej informacji, zobacz ten wpis na blogu AWS .
Możesz całkowicie używać jednego dysku na wielu serwerach w AWS. Używam sshfs do zamontowania dysku zewnętrznego i udostępnienia go wielu serwerom w EC2.
Powodem, dla którego potrzebowałem podłączyć jeden dysk do wielu serwerów, jest jedno miejsce, w którym można umieścić wszystkie kopie zapasowe przed pobraniem ich lokalnie.