Cách thiết lập Hadoop Cluster với HDFS có tính sẵn sàng cao (P1)

Ngày đăng: 02/05/2019   -    Cập nhật: 02/05/2019

Kiến trúc Cluster khả dụng cao với HDFS 2.x

Trong bài viết này, mình sẽ nói về Kiến trúc Cluster khả dụng cao với HDFS 2.x và quy trình thiết lập Cluster tính khả dụng cao HDFS.

Đây là một phần quan trọng của chương trình Master Big Data. Thứ tự mà các chủ đề đã được đề cập trong bài viết này như sau:

 
  • HDFS HA ​​Architecture 
    • Giới thiệu 
    • NameNode Availability
    • Kiến trúc của HA 
    • Triển khai HA (JournalNode và Shared storage) 
  • Làm cách nào để thiết lập HA (Node đại biểu) trong cụm Hadoop?

Giới thiệu về High Availability Cluster

Khái niệm Cluster có tính sẵn sàng cao (High Availability Cluster) đã được giới thiệu trong Hadoop 2.x để giải quyết vấn đề thất bại duy nhất trong Hadoop 1.x.

Như bạn đã biết từ bài viết trước của tôi là Kiến trúc HDFS tuân theo Cấu trúc liên kết Master / Slave trong đó NameNode hoạt động như một trình nền chính và chịu trách nhiệm quản lý các nút phụ khác được gọi là DataNodes.

Master Daemon hoặc NameNode duy nhất này trở thành nút cổ chai. Mặc dù, việc giới thiệu NameNode thứ cấp đã ngăn chúng ta khỏi mất dữ liệu và giảm tải một số gánh nặng của NameNode, nhưng nó không giải quyết được vấn đề về tính khả dụng của NameNode.


NameNode Availability

Nếu bạn xem xét cấu hình tiêu chuẩn của HDFS cluster, NameNode sẽ trở thành một điểm lỗi duy nhất.

Điều này xảy ra vì thời điểm NameNode không khả dụng, toàn bộ cluster sẽ không khả dụng cho đến khi ai đó khởi động lại NameNode hoặc mang đến một cái mới.


Các lý do không sẵn sàng của NameNode có thể là:


  • Một sự kiện được lên kế hoạch như công việc bảo trì như đã nâng cấp phần mềm hoặc phần cứng.
  • Nó cũng có thể là do một sự kiện ngoài ý muốn khi NameNode gặp sự cố vì một số lý do nào đó.

Trong mỗi trường hợp trên, chúng ta có thời gian chết (Down time) mà chúng ta không thể sử dụng HDFS Cluster, chính vì thế đây là một thách thức lớn.


Kiến trúc HDFS HA

Chúng ta hãy hiểu rằng HDFS HA ​​Architecture đã giải quyết vấn đề quan trọng này về tính khả dụng của NameNode:

Kiến trúc HA đã giải quyết vấn đề về tính khả dụng của NameNode bằng cách cho phép chúng ta có hai NameNode trong cấu hình active/passive.

Vì vậy, chúng tôi có hai NameNodes đang chạy cùng một lúc trong High Availability cluster:


  • Active NameNode
  • Standby/Passive NameNode.
Kiến trúc HDFS HA

Kiến trúc HDFS HA (Via Edureka)

Nếu một NameNode bị hỏng, NameNode khác có thể đảm nhận trách nhiệm và do đó, giảm thời gian Down time.

NameNode dự phòng phục vụ mục đích (không giống như NameNode phụ) kết hợp các khả năng chuyển đổi dự phòng cho cụm Hadoop.

Do đó, với StandbyNode, chúng ta có thể có chuyển đổi dự phòng tự động bất cứ khi nào một NameNode gặp sự cố (sự kiện ngoài dự kiến) hoặc chúng ta có thể có tự chuyển đổi dự phòng (được khởi tạo thủ công) trong thời gian bảo trì.


Có hai vấn đề trong việc duy trì tính nhất quán trong cụm tính sẵn sàng cao HDFS:


  • NameNode Active và Stanby NameNode phải luôn đồng bộ với nhau, tức là chúng phải có cùng một siêu dữ liệu. Điều này sẽ cho phép chúng ta khôi phục Hadoop Cluster về trạng thái namespace tương tự nơi nó bị hỏng và do đó, sẽ cung cấp cho chúng ta khả năng chuyển đổi dự phòng nhanh.
  • Mỗi lần chỉ nên có một NameNode hoạt động vì hai NameNode hoạt động sẽ dẫn đến hỏng dữ liệu. Loại kịch bản này được gọi là kịch bản split_brain, trong đó một cụm được chia thành cụm nhỏ hơn, mỗi nhóm tin rằng đó là cụm hoạt động duy nhất. Để tránh các kịch bản như vậy hàng rào được thực hiện. Tranh cử là một quá trình đảm bảo rằng chỉ một NameNode vẫn hoạt động tại một thời điểm cụ thể.


Triển khai kiến ​​trúc HA

Bây giờ, bạn biết rằng trong HDFS HA ​​Architecture, chúng ta có hai NameNodes chạy cùng một lúc. Vì vậy, chúng ta có thể triển khai cấu hình NameNode active và stanby trong hai cách sau:

  • Sử dụng Node đại biểu
  • Shared Storage bằng NFS

Chúng ta hãy hiểu hai cách thực hiện này cùng một lúc:

1. Sử dụng Node đại biểu

Triển khai HA sử dụng Node đại biểu

Triển khai HA sử dụng Node đại biểu (Via Edureka)
 

NameNode dự phòng và NameNode hoạt động giữ đồng bộ với nhau thông qua một nhóm các node hoặc daemons được gọi là JournalNodes.

JournalNodes theo các cấu trúc liên kết vòng trong đó các node được kết nối với nhau để tạo thành một vòng.

JournalNodes yêu cầu đến với nó và sao chép thông tin vào các node khác trong vòng. Điều này cung cấp khả năng chịu lỗi trong trường hợp lỗi JournalNodes.

NameNode hoạt động chịu trách nhiệm cập nhật EditLogs (thông tin siêu dữ liệu) có trong JournalNodes.

StandbyNode đọc các thay đổi được thực hiện cho EditLogs trong JournalNode và áp dụng nó vào namespace của chính nó một cách không đổi.

Trong quá trình chuyển đổi dự phòng, StandbyNode đảm bảo rằng nó đã cập nhật thông tin dữ liệu meta của mình từ 
JournalNodes trước khi trở thành Active NameNode mới. Điều này làm cho trạng thái namespace hiện tại được đồng bộ hóa với trạng thái trước khi chuyển đổi dự phòng.

Địa chỉ IP của cả hai NameNodes đều khả dụng cho tất cả các DataNodes và chúng gửi heartbeat và chặn thông tin vị trí cho cả NameNode. Điều này cung cấp khả năng chuyển đổi dự phòng nhanh (tốn ít thời gian hơn) vì StandbyNode có thông tin cập nhật về vị trí khối trong cụm.



Tranh cử NameNode


Bây giờ, như đã thảo luận trước đó, điều rất quan trọng là đảm bảo rằng chỉ có một NameNode hoạt động tại một thời điểm. Vì vậy, Tranh Cử là một quá trình để đảm bảo quy tắc này trong cụm. 
  • JournalNodes thực hiện việc Tranh Cử này bằng cách chỉ cho phép một NameNode trở thành writer tại một thời điểm.
  • NameNode ở chế độ chờ chịu trách nhiệm viết cho Nhật ký và cấm mọi NameNode khác active.
  • Cuối cùng, Active NameNode mới có thể thực hiện các hoạt động của nó một cách an toàn.

2. Sử dụng Shared Storage

Triển khai HA sử dụng Shared Storage

Triển khai HA sử dụng Shared Storage (Via Edureka)

StandbyNode và NameNode hoạt động giữ đồng bộ với nhau bằng cách sử dụng một thiết bị lưu trữ được chia sẻ.

NameNode hoạt động ghi lại bản ghi của bất kỳ sửa đổi nào được thực hiện trong namespace của nó thành EditLog có trong bộ lưu trữ được chia sẻ này.

StandbyNode đọc các thay đổi được thực hiện cho EditLogs trong bộ lưu trữ được chia sẻ này và áp dụng nó vào namespace của chính nó.

Bây giờ, trong trường hợp chuyển đổi dự phòng, StandbyNode cập nhật thông tin siêu dữ liệu của nó bằng cách sử dụng EditLogs trong bộ nhớ chia sẻ.

Sau đó, nó chịu trách nhiệm của Active NameNode. Điều này làm cho trạng thái namespace hiện tại được đồng bộ hóa với trạng thái trước khi chuyển đổi dự phòng.

Quản trị viên phải định cấu hình ít nhất một phương thức Tranh Cử để tránh tình huống Split-Brain.

Hệ thống có thể sử dụng một loạt các cơ chế tranh cử. Nó có thể bao gồm việc hủy quá trình NameNode, và thu hồi quyền truy cập của nó vào thư mục lưu trữ được chia sẻ.

Như một phương án cuối cùng, chúng ta có thể tạo hàng rào cho NameNode đang hoạt động trước đó bằng một kỹ thuật được gọi là STONITH hoặc "Bắn vào đầu của node khác".

STONITH sử dụng một đơn vị phân phối điện chuyên dụng để tắt nguồn máy NameNode.

Chuyển đổi dự phòng tự động (Automatic Failover)

Failover là một thủ tục trong đó một hệ thống tự động chuyển điều khiển sang hệ thống thứ cấp khi phát hiện ra lỗi hoặc lỗi. Có hai loại chuyển đổi dự phòng:

Graceful Failover: Trong trường hợp này, chúng ta tự khởi động chuyển đổi dự phòng để bảo trì định kỳ. 

Automatic Failover: Trong trường hợp này, chuyển đổi dự phòng được khởi động tự động trong trường hợp lỗi NameNode (sự kiện ngoài dự kiến).

Apache Zookeeper là một dịch vụ cung cấp khả năng chuyển đổi dự phòng tự động trong cụm HDFS High Availabilty.

Nó duy trì một lượng nhỏ dữ liệu phối hợp, thông báo cho khách hàng về những thay đổi trong dữ liệu đó và giám sát các lỗi của khách hàng.

Zookeeper duy trì một phiên với NameNodes. Trong trường hợp thất bại, phiên sẽ hết hạn và Zookeeper sẽ thông báo cho các NameNodes khác để bắt đầu quá trình chuyển đổi dự phòng.

Trong trường hợp thất bại NameNode, NameNode thụ động khác có thể khóa trong Zookeeper nói rằng nó muốn trở thành ActiveNode tiếp theo.

ZookeerFailoverControll (ZKFC) là ứng dụng khách Zookeeper cũng theo dõi và quản lý trạng thái NameNode. Mỗi NameNode cũng chạy ZKFC. ZKFC chịu trách nhiệm theo dõi sức khỏe của NameNodes theo định kỳ.

Bây giờ bạn đã hiểu tính khả dụng cao trong cụm Hadoop là gì, đã đến lúc thiết lập nó. Để thiết lập Tính sẵn sàng cao trong cụm Hadoop, bạn phải sử dụng Zookeeper trong tất cả các node.


Các deamon trong Active NameNode là:


  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Các deamon trong Stanby NameNode là:


  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Các deamon trong Data NameNode là:


  • Zookeeper
  • JournalNode
  • DataNode

Chúng ta sẽ đến với phần Hướng dẫn cài đặt chi tiết Cụm HDFS tính khả dụng cao ở phần 2.


>>> Nếu bạn muốn thành thạo HDFS và Hadoop, hãy xem ngay Khóa học Big Data và Hadoop được thiết kế đặc biệt dành cho dân doanh nghiệp.

Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!