Chúng tôi hiện đang sử dụng nhiều máy chủ web truy cập vào một máy chủ và máy chủ tệp mysql. Nhìn vào việc chuyển sang đám mây, tôi có thể sử dụng cùng một thiết lập này và đính kèm EBS vào nhiều phiên bản máy hay giải pháp nào khác không?
Chúng tôi hiện đang sử dụng nhiều máy chủ web truy cập vào một máy chủ và máy chủ tệp mysql. Nhìn vào việc chuyển sang đám mây, tôi có thể sử dụng cùng một thiết lập này và đính kèm EBS vào nhiều phiên bản máy hay giải pháp nào khác không?
Câu trả lời:
CẬP NHẬT (Tháng 4 năm 2015) : Đối với trường hợp sử dụng này, bạn nên bắt đầu xem Hệ thống tệp đàn hồi Amazon (EFS) mới , được thiết kế để được nhân lên theo cách chính xác theo cách bạn muốn. Sự khác biệt chính giữa EFS và EBS là chúng cung cấp các tóm tắt khác nhau: EFS hiển thị giao thức NFSv4, trong khi EBS cung cấp truy cập IO khối thô.
Dưới đây bạn sẽ tìm thấy lời giải thích ban đầu của tôi về lý do tại sao không thể gắn thiết bị khối thô trên nhiều máy một cách an toàn.
BÀI VIẾT GỐC (2011):
Ngay cả khi bạn có thể có được một khối EBS được gắn vào nhiều hơn một thể hiện, thì đó sẽ là một _REALLY_BAD_IDEA_. Để trích dẫn Kekoa, "điều này giống như sử dụng ổ cứng trong hai máy tính cùng một lúc"
Tại sao đây là một ý tưởng tồi? ... Lý do bạn không thể đính kèm một ổ đĩa cho nhiều hơn một phiên bản là vì EBS cung cấp một bản tóm tắt "khối lưu trữ" mà khách hàng chạy một hệ thống tệp như ext2 / ext3 / etc. Hầu hết các hệ thống tệp này (ví dụ: ext2 / 3, FAT, NTFS, v.v.) được viết với giả định rằng họ có quyền truy cập độc quyền vào thiết bị khối. Hai trường hợp truy cập vào cùng một hệ thống tập tin gần như chắc chắn sẽ kết thúc trong nước mắt và hỏng dữ liệu.
Nói cách khác, việc gắn đôi một khối EBS sẽ chỉ hoạt động nếu bạn đang chạy một hệ thống tệp cụm được thiết kế để chia sẻ một thiết bị khối giữa nhiều máy. Hơn nữa, thậm chí điều này sẽ không đủ. EBS sẽ cần phải được kiểm tra cho kịch bản này và để đảm bảo rằng nó cung cấp các đảm bảo tính nhất quán giống như các giải pháp thiết bị khối chia sẻ khác ... tức là, các khối đó không được lưu trong bộ nhớ cache ở cấp độ trung gian như hạt nhân Dom0, lớp Xen, và hạt nhân DomU. Và sau đó là các cân nhắc về hiệu suất của việc đồng bộ hóa các khối giữa nhiều máy khách - hầu hết các hệ thống tệp được phân cụm được thiết kế để hoạt động trên SAN chuyên dụng tốc độ cao, không phải là ethernet hàng hóa có nỗ lực tốt nhất. Nghe có vẻ đơn giản, nhưng những gì bạn đang yêu cầu là một điều rất không cần thiết.
Ngoài ra, hãy xem kịch bản chia sẻ dữ liệu của bạn có thể là NFS, SMB / CIFS, SimpleDB hoặc S3. Các giải pháp này đều sử dụng các giao thức lớp cao hơn nhằm chia sẻ tệp mà không cần có hệ thống con thiết bị khối chung. Nhiều lần một giải pháp như vậy thực sự hiệu quả hơn.
Trong trường hợp của bạn, bạn vẫn có thể có một cá thể / máy chủ tệp MySql duy nhất được truy cập bởi nhiều giao diện web. Máy chủ tệp đó sau đó có thể lưu trữ dữ liệu của nó trên một khối EBS, cho phép bạn thực hiện sao lưu ảnh chụp nhanh hàng đêm. Nếu phiên bản đang chạy máy chủ tệp bị mất, bạn có thể tách âm lượng EBS và gắn lại nó vào một phiên bản máy chủ tệp mới và sao lưu và chạy trong vài phút.
"Có bất cứ điều gì như S3 là một hệ thống tập tin không?" - có và không. Có, có các giải pháp của bên thứ 3 như s3fs hoạt động "ok", nhưng trong giới hạn, họ vẫn phải thực hiện các cuộc gọi dịch vụ web tương đối đắt tiền cho mỗi lần đọc / ghi. Đối với một công cụ chia sẻ dir, hoạt động tuyệt vời. Đối với loại sử dụng FS cụm mà bạn thấy trong thế giới HPC, không phải là một cơ hội. Để làm tốt hơn, bạn cần một dịch vụ mới cung cấp giao thức hướng kết nối nhị phân, như NFS. Cung cấp một hệ thống tập tin đa gắn kết như vậy với hiệu suất và hành vi hợp lý sẽ là một tính năng bổ sung TUYỆT VỜI cho EC2. Tôi từ lâu đã là người ủng hộ Amazon xây dựng một thứ như thế.
Hiện tại điều này có thể xảy ra với các loại phiên bản mới nhất đang chạy trong AWS Nitro trong cùng Vùng khả dụng. Có một số cảnh báo nhưng điều này rất tốt cho các trường hợp sử dụng nhất định cần tốc độ của EBS và khi EFS không khả thi.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-multi.html
Không, điều này giống như sử dụng ổ cứng trong hai máy tính.
Nếu bạn muốn chia sẻ dữ liệu, bạn có thể thiết lập một máy chủ mà tất cả các phiên bản của bạn có thể truy cập. Nếu bạn muốn có một vùng lưu trữ đơn giản cho tất cả các phiên bản của mình, bạn có thể sử dụng dịch vụ lưu trữ S3 của Amazon để lưu trữ dữ liệu được phân phối và có thể mở rộng.
Di chuyển lên đám mây, bạn có thể có cùng một thiết lập, nhưng bạn có thể thay thế máy chủ tệp bằng S3 hoặc có tất cả các phiên bản của bạn kết nối với máy chủ tệp của bạn.
Bạn có rất nhiều tùy chọn, nhưng chia sẻ ổ cứng giữa các phiên bản có lẽ không phải là lựa chọn tốt nhất.
Không, theo tài liệu EBS: "Một khối lượng chỉ có thể được gắn vào một phiên bản tại một thời điểm".
Hiện tại bạn đang sử dụng bộ nhớ chia sẻ như thế nào? Nếu nó chỉ để phục vụ các tệp từ máy chủ tệp, bạn đã xem xét việc thiết lập một hệ thống để bạn có thể ủy quyền một số yêu cầu nhất định cho một quy trình trên máy chủ tệp thay vì để máy chủ web phục vụ các tệp đó chưa?
aws ec2 describe-volumes
trả về một loạt các tập tin đính kèm.
Tôi khá chắc chắn rằng bạn không thể, nhưng bạn có thể sao chép EBS và đính kèm nó vào một thể hiện khác.
Điều này hữu ích cho các bộ dữ liệu cố định hoặc để thử nghiệm dữ liệu 'thực' nhưng không cho phép nhiều hơn 1 phiên bản hoạt động trên một cửa hàng khối duy nhất
Nhiều máy chủ web truy cập MySQL Server & File Server là bình thường trong AWS. Một số thực tiễn tốt nhất cần tuân thủ đối với kiến trúc được đề cập ở trên là:
Điểm 1) MySQL trên EC2 có thể được thiết lập là Master-Slave ở chế độ không đồng bộ / bán đồng bộ trong AWS. EBS-OPT + PIOPS trong RAID 0 được khuyến nghị cho DB hiệu suất cao
Điểm 2) Hoặc bạn có thể sử dụng chế độ Amazon RDS + Multi-AZ. Để đọc tỷ lệ nhiều RDS Đọc bản sao có thể được đính kèm với RDS của MySQL.
Điểm 3) Khối lượng EBS không thể được gắn vào nhiều EC2. Bạn có thể tạo Máy chủ tệp dựa trên GlusterFS trên Amazon EC2 bằng EBS. Nhiều máy chủ web có thể nói chuyện với một GlusterFS đồng thời trên infra AWS.
Điểm 4) Trong trường hợp ứng dụng của bạn có thể được tích hợp với S3 dưới dạng lưu trữ tệp, thì nó được ưa thích vì tính ổn định mà nó mang lại cho kiến trúc. Bạn cũng có thể truy cập S3 bằng các công cụ như S3fuse cũng từ ứng dụng của mình.
EBS vừa thông báo điều này là có thể: https://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-av Available-provisioned-iops-ssd-volume /
Có một cái gì đó trong thế giới CNTT được gọi là Clustered Filesystem, Redhat GFS, Oracle OCFS2, Veritas CFS ...
Câu trả lời ngắn gọn là "Không". Những người khác đã nói nó ở trên.
Những người nói "có" không trả lời câu hỏi, nhưng một câu hỏi khác. Nếu EFS chỉ là một dịch vụ NFS, thì đó không phải là câu trả lời cho câu hỏi như đã nêu ban đầu. Và không thành vấn đề nếu EFS có "được triển khai trong tất cả các vùng" hay không, bởi vì bạn có thể thực hiện ví dụ NFS của riêng mình và có nhiều máy chủ gắn NFS. Đó không phải là bất cứ điều gì mới, chúng tôi đã làm điều đó vào năm 1992. SMB và sshfs, tất cả những thứ này chỉ là cách để gắn ổ đĩa như một hệ thống tệp từ xa.
Những người nói "tại sao bạn muốn làm điều đó" hay "tất cả sẽ kết thúc trong nước mắt" là sai. Chúng tôi đã gắn nhiều đĩa vào nhiều máy chủ trong nhiều thập kỷ. Nếu bạn từng làm việc với SAN (Mạng khu vực lưu trữ), khả năng gắn cùng một thiết bị vào nhiều nút thường thông qua FibreChannel SAN là hoàn toàn bình thường. Vì vậy, bất cứ ai đã chạy các máy chủ một thập kỷ trước khi các máy chủ ảo / đám mây trở nên phổ biến đều có một số tiếp xúc với điều đó.
Chẳng mấy chốc, đã có các hệ thống tập tin được phân cụm trong đó hai hệ thống có thể đọc và ghi vào cùng một ổ đĩa. Tôi tin rằng điều này đã bắt đầu với thời gian VAX và Alpha VMS trong lịch sử. Các hệ thống tệp được phân cụm sử dụng sơ đồ loại trừ lẫn nhau phân tán để có thể thao tác trực tiếp các khối.
Ưu điểm của việc gắn cùng một đĩa vào nhiều nút là tốc độ và giảm các điểm lỗi đơn.
Bây giờ, các hệ thống tệp cụm đã không trở nên cực kỳ phổ biến trong kinh doanh lưu trữ "người tiêu dùng", đó là sự thật. Và chúng phức tạp và có một số cạm bẫy. Nhưng bạn thậm chí không cần một hệ thống tệp được phân cụm để sử dụng đĩa được gắn vào nhiều nút tính toán. Điều gì nếu bạn muốn một ổ đĩa chỉ đọc? Bạn thậm chí không cần một hệ thống tập tin cụm! Bạn chỉ cần đặt vào / etc / fstab cùng một thiết bị vật lý như chỉ đọc (ro). Sau đó, bạn gắn kết với 2 hoặc 10 máy chủ EC2 và tất cả chúng có thể đọc trực tiếp từ thiết bị đó!
Có một trường hợp sử dụng rõ ràng cho điều này trong thế giới của các máy chủ đám mây khi xây dựng các trang trại mở rộng nhanh chóng. Bạn có thể chuẩn bị tất cả đĩa hệ thống chính của mình và chỉ sử dụng một đĩa cấu hình và khởi động rất nhỏ cho mỗi máy chủ. Bạn thậm chí có thể có tất cả chúng khởi động từ cùng một đĩa khởi động, và ngay trước khi kết thúc / ở chế độ đọc-ghi, bạn có thể chèn Union-FS với 3 lớp:
Vì vậy, vâng, câu hỏi rất có ý nghĩa, và thật không may, câu trả lời là (vẫn) "Không". Và không có NFS không phải là sự thay thế tuyệt vời cho trường hợp sử dụng đó vì nó phạt tất cả các hoạt động đọc từ đĩa hệ thống. Tuy nhiên, khởi động mạng từ đĩa hệ thống NFS là cách thay thế duy nhất để thực hiện trường hợp sử dụng mà tôi đã mô tả ở trên. Thật không may, vì thiết lập tác nhân khởi động mạng và NFS phức tạp hơn nhiều so với việc chỉ truy cập vào cùng một thiết bị khối vật lý.
Tái bút: Tôi muốn gửi một phiên bản ngắn hơn về nhận xét này, nhưng tôi không thể vì ngưỡng 51 điểm tín dụng ngớ ngẩn, vì vậy tôi phải viết một câu trả lời với cùng một chữ "Không" nhưng phải đưa ra quan điểm của mình tại sao một câu hỏi có liên quan mà không nhận được câu trả lời xứng đáng.
PPS: Tôi vừa tìm thấy ai đó tại StackExchange đề cập đến iSCSI. iSCSI có phần giống NFS, nhưng về mặt logic như một FibreChannel SAN. Bạn có thể truy cập (và chia sẻ) các thiết bị khối vật lý. Nó sẽ giúp việc chia sẻ đĩa khởi động dễ dàng hơn, do đó bạn không cần thiết lập khả năng khởi động mạng bootd có thể rất khó khăn. Nhưng sau đó trên AWS, cũng không có khả năng khởi động mạng.
Mặc dù trước đây EBS chỉ cho phép một phiên bản EC2 duy nhất được gắn vào một ổ đĩa nhất định, giờ đây có thể gắn nhiều tệp, ít nhất là cho các khối io1. Để biết thêm thông tin, xem bài đăng blog AWS này .
Bạn hoàn toàn có thể sử dụng một ổ đĩa trên nhiều máy chủ trong AWS. Tôi sử dụng sshfs để gắn ổ đĩa ngoài và chia sẻ nó với nhiều máy chủ trong EC2.
Lý do tôi cần để kết nối một ổ đĩa với nhiều máy chủ là để có một nơi duy nhất để đặt tất cả các bản sao lưu của tôi trước khi kéo chúng xuống cục bộ.