Giao tiếp gossip giữa các node trong cassandra cassandra #3
Gossip là một giao thức dùng để cập nhật thông tin về trạng thái của các node khác đang tham gia vào cluster. Đây là một giao thức liên lạc dạng peer-to-peer trong đó mỗi node trao đổi định kỳ thông tin trạng thái của chúng với các node khác mà chúng có liên kết. Tiến trình gossip chạy mỗi giây và trao đổi thông tin với nhiều nhất là ba node khác trong cluster. Các node trao đổi thông tin về chính chúng và cả thông tin với các node mà chúng đã trao đổi, bằng cách này toàn bộ những node có thể nhanh chóng hiểu được trạng thái của tất cả các node còn lại trong cluster. Một gói tin gossip bao gồm cả version đi kèm với nó, như thế trong mỗi lần trao đổi gossip, các thông tin cũ sẽ bị ghi đè bởi thông tin mới nhất ở một số node.
Hiểu về cluster membership và seed node.
Khi một node được khởi động, nó sẽ xem file cấu hình cassandra.yaml để xác định tên cluster chứa nó và các nút khác trong cluster được cấu hình trong file, được biết với tên là seed node.
Để ngăn chặn sự đứt đoạn trong truyền thông gossip, tất cả các nút trong cluster phải có cùng 1 danh sách các seed node được liệt kê trong file cấu hình. Bởi vì, phần lớn các xung đột được sinh ra khi 1 node được khởi động. Mặc định, 1 node sẽ phải nhớ những node mà nó đã từng gossip kể cả khi khởi động lại và seed node sẽ không có mục đích nào khác ngoài việc cập nhật 1 node mới khi nó tham gia vào cluster. Tức là, khi một node tham gia vào cluster, nó sẽ liên lạc với các seed node để cập nhật trạng thái của tất cả các node khác trong cluster.
Trong những cluster có nhiều data center, danh sách seed node nên chứa ít nhất một seed node trên mỗi data center, nếu không thì khi có 1 nút mới tham gia vào cluster, thì nó sẽ liên lạc với một seed node nằm trên data center khác. Cũng không nên để mọi node đều là seed node vì nó sẽ làm giảm hiệu năng của gossip và gây khó duy trì. Việc tối ưu gossip là không quan trọng như khuyến khích nên sử dụng một danh sách nhỏ các seed node , thông thường 3 seed node trên một data center.
Phát hiện lỗi là một phương thức để từ 1 node xác định xem các node khác trong hệ thống đang online hay offline thông qua trạng thái của gossip. Thông tin này được dùng để tránh yêu cầu người dùng định tuyến tới những node không còn hoạt động hoặc hoạt động nhưng có hiệu năng thấp.
Quá trình gossip sẽ theo dõi hoạt động của nút từ các node dưới dạng trực tiếp (thông qua những node gossip trực tiếp đến nó) hoặc gián tiếp. Thay vì việc sét cố định ngưỡng để xác định xem một node là bị lỗi, Cassandra sử dụng một cơ chế tính toán ngưỡng phi cho mỗi nút như sau giá trị phi sẽ bằng khoảng thời gian kể từ tin nhắn cuối cùng chia cho thời gian trung bình của những lần gửi đi trước sau đó chia cho một hằng số PHI_FATOR( bằng 0, 434). Trong cassandra , cấu hình phi_convict_threshold điều chỉnh độ nhạy cho việc dò thất bại. nếu phi nhỏ hơn phi_convict_threshold thì node đó còn sống , nếu phi lớn hơn phi_convict_threshold thì node đó đã lỗi.
Một node bị lỗi có thể đến từ nhiều nguyên nhân như lỗi phần cứng hoặc mất mạng, … Một node hỏng thường chỉ trong giây lát nhưng cũng có thể kéo dài trong 1 khoảng thời gian. Các node hỏng sẽ không tự động xóa khỏi cluster hay ring mà các node khác sẽ cố gắng định kỳ thiết lập lại liên lạc với node bị hỏng để xem nó hồi phục hay chưa. Để có thay đổi vĩnh viễn 1 node trong cluster, các quản trị viên phải thêm hoặc loại bỏ tường minh các node trong cluster của cassandra bằng việc sử dụng nodetool hay OpsCenter.
Khi 1 node trở lại online sau khi không hoạt động, nó có thể đã bỏ lỡ việc sao chép các dữ liệu mà nó duy trì. Nếu quá trình phát hiện lỗi đánh dấu 1 node là offline và chế độ hint handoff được kích hoạt thì quá trình ghi nhớ sẽ được lưu trữ bởi những bản sao khác. Tuy nhiên, khi một node bị offline lớn hơn max_hint_window_in_ms thì gợi ý sẽ không được lưu. Vì lý do đó, tốt nhất là thường xuyên chạy nodetool sửa chữa tất cả các node để đảm bảo chúng toàn vẹn dữ liệu và cũng chạy repair sau khi hồi phục nút đã offline trong một thời gian dài.
Hiểu về cluster membership và seed node.
Khi một node được khởi động, nó sẽ xem file cấu hình cassandra.yaml để xác định tên cluster chứa nó và các nút khác trong cluster được cấu hình trong file, được biết với tên là seed node.
Để ngăn chặn sự đứt đoạn trong truyền thông gossip, tất cả các nút trong cluster phải có cùng 1 danh sách các seed node được liệt kê trong file cấu hình. Bởi vì, phần lớn các xung đột được sinh ra khi 1 node được khởi động. Mặc định, 1 node sẽ phải nhớ những node mà nó đã từng gossip kể cả khi khởi động lại và seed node sẽ không có mục đích nào khác ngoài việc cập nhật 1 node mới khi nó tham gia vào cluster. Tức là, khi một node tham gia vào cluster, nó sẽ liên lạc với các seed node để cập nhật trạng thái của tất cả các node khác trong cluster.
Trong những cluster có nhiều data center, danh sách seed node nên chứa ít nhất một seed node trên mỗi data center, nếu không thì khi có 1 nút mới tham gia vào cluster, thì nó sẽ liên lạc với một seed node nằm trên data center khác. Cũng không nên để mọi node đều là seed node vì nó sẽ làm giảm hiệu năng của gossip và gây khó duy trì. Việc tối ưu gossip là không quan trọng như khuyến khích nên sử dụng một danh sách nhỏ các seed node , thông thường 3 seed node trên một data center.
Hiểu về Failure Detection và Recovery
Việc các node sử dụng cùng sử dụng giao thức gossip giao tiếp và trao đổi thông tin trạng thái với nhau để xác định xem node online hay offline, từ đó có thể ngăn yêu cầu người dùng định tuyến tới những node offline.Phát hiện lỗi là một phương thức để từ 1 node xác định xem các node khác trong hệ thống đang online hay offline thông qua trạng thái của gossip. Thông tin này được dùng để tránh yêu cầu người dùng định tuyến tới những node không còn hoạt động hoặc hoạt động nhưng có hiệu năng thấp.
Quá trình gossip sẽ theo dõi hoạt động của nút từ các node dưới dạng trực tiếp (thông qua những node gossip trực tiếp đến nó) hoặc gián tiếp. Thay vì việc sét cố định ngưỡng để xác định xem một node là bị lỗi, Cassandra sử dụng một cơ chế tính toán ngưỡng phi cho mỗi nút như sau giá trị phi sẽ bằng khoảng thời gian kể từ tin nhắn cuối cùng chia cho thời gian trung bình của những lần gửi đi trước sau đó chia cho một hằng số PHI_FATOR( bằng 0, 434). Trong cassandra , cấu hình phi_convict_threshold điều chỉnh độ nhạy cho việc dò thất bại. nếu phi nhỏ hơn phi_convict_threshold thì node đó còn sống , nếu phi lớn hơn phi_convict_threshold thì node đó đã lỗi.
Một node bị lỗi có thể đến từ nhiều nguyên nhân như lỗi phần cứng hoặc mất mạng, … Một node hỏng thường chỉ trong giây lát nhưng cũng có thể kéo dài trong 1 khoảng thời gian. Các node hỏng sẽ không tự động xóa khỏi cluster hay ring mà các node khác sẽ cố gắng định kỳ thiết lập lại liên lạc với node bị hỏng để xem nó hồi phục hay chưa. Để có thay đổi vĩnh viễn 1 node trong cluster, các quản trị viên phải thêm hoặc loại bỏ tường minh các node trong cluster của cassandra bằng việc sử dụng nodetool hay OpsCenter.
Khi 1 node trở lại online sau khi không hoạt động, nó có thể đã bỏ lỡ việc sao chép các dữ liệu mà nó duy trì. Nếu quá trình phát hiện lỗi đánh dấu 1 node là offline và chế độ hint handoff được kích hoạt thì quá trình ghi nhớ sẽ được lưu trữ bởi những bản sao khác. Tuy nhiên, khi một node bị offline lớn hơn max_hint_window_in_ms thì gợi ý sẽ không được lưu. Vì lý do đó, tốt nhất là thường xuyên chạy nodetool sửa chữa tất cả các node để đảm bảo chúng toàn vẹn dữ liệu và cũng chạy repair sau khi hồi phục nút đã offline trong một thời gian dài.
Comments
Post a Comment