Giới thiệu về việc bảo trì ZooKeeper

Các nhóm ZooKeeper được thiết kế để duy trì hoạt động mà không bị mất dữ liệu, bất chấp việc mất một hoặc nhiều nút ZooKeeper. Khả năng phục hồi này có thể được sử dụng hiệu quả để thực hiện việc bảo trì trên các nút ZooKeeper mà không cần thời gian ngừng hoạt động của hệ thống.

Giới thiệu về ZooKeeper và Edge

Trong Edge, các nút ZooKeeper chứa dữ liệu cấu hình về vị trí và cấu hình của nhiều thành phần Edge, đồng thời thông báo cho các thành phần khác nhau về các thay đổi về cấu hình. Tất cả cấu trúc liên kết Edge được hỗ trợ cho hệ thống phát hành công khai đều sử dụng ít nhất 3 nút ZooKeeper.

Sử dụng các thuộc tính ZK_HOSTS và ZK_CLIENT_HOSTS trong tệp cấu hình Edge để chỉ định các nút ZooKeeper. Ví dụ:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Trong trường hợp:

  • ZK_HOSTS chỉ định địa chỉ IP của các nút ZooKeeper. Địa chỉ IP phải được liệt kê theo cùng thứ tự trên tất cả các nút ZooKeeper.

    Trong môi trường có nhiều Trung tâm dữ liệu, hãy liệt kê tất cả các nút ZooKeeper từ tất cả Trung tâm dữ liệu.

  • ZK_CLIENT_HOSTS chỉ định địa chỉ IP của các nút ZooKeeper mà chỉ Trung tâm dữ liệu này sử dụng. Địa chỉ IP phải được liệt kê theo cùng thứ tự trên tất cả các nút ZooKeeper trong Trung tâm dữ liệu.

    Trong một bản cài đặt Trung tâm dữ liệu, đây là các nút giống như được chỉ định bởi ZK_HOSTS. Trong môi trường nhiều Trung tâm dữ liệu, tệp cấu hình Edge cho mỗi Trung tâm dữ liệu chỉ được liệt kê các nút ZooKeeper cho Trung tâm dữ liệu đó.

Theo mặc định, tất cả các nút ZooKeeper đều được chỉ định là nút voter. Điều này có nghĩa là tất cả các nút đều tham gia bầu chọn leader (nút dẫn đầu) của ZooKeeper. Bạn có thể thêm đối tượng sửa đổi :observer vào ZK_HOSTS để biểu thị rằng nút này là nút quan sát chứ không phải nút bỏ phiếu. Nút quan sát không tham gia vào quá trình bầu chọn nút dẫn đầu.

Bạn thường chỉ định đối tượng sửa đổi :observer khi tạo nhiều Trung tâm dữ liệu Edge hoặc khi một Trung tâm dữ liệu có số lượng lớn nút ZooKeeper. Ví dụ: trong một Cài đặt Edge 12 máy chủ với hai Trung tâm dữ liệu, ZooKeeper trên nút 9 trong Trung tâm dữ liệu 2 là người quan sát:

Sau đó, bạn sử dụng các chế độ cài đặt sau trong tệp cấu hình cho Trung tâm dữ liệu 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Và đối với Trung tâm dữ liệu 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

Các phần sau đây trình bày chi tiết hơn về nút lãnh đạo, nút cử tri và nút quan sát, đồng thời mô tả những điều cần cân nhắc khi thêm nút cử tri và nút quan sát.

Giới thiệu về người lãnh đạo, người theo dõi, người bỏ phiếu và người quan sát

Trong quá trình cài đặt ZooKeeper nhiều nút, một trong các nút được chỉ định làm nút dẫn đầu. Tất cả các nút ZooKeeper khác được chỉ định là người theo dõi. Mặc dù thao tác đọc có thể diễn ra từ bất kỳ nút ZooKeeper nào, nhưng tất cả yêu cầu ghi đều được chuyển tiếp đến nút chính. Ví dụ: một Bộ xử lý thông báo mới được thêm vào Edge. Thông tin đó được ghi vào ZooKeeper leader. Tất cả người theo dõi sau đó sao chép dữ liệu.

Tại thời điểm cài đặt Edge, bạn chỉ định mỗi nút ZooKeeper là một cử tri hoặc một người quan sát. Sau đó, nút dẫn đầu sẽ được tất cả các nút ZooKeeper cử tri bầu chọn. Yêu cầu duy nhất để bầu chọn một thủ lĩnh là phải có một túc số nút cử tri ZooKeeper đang hoạt động. Túc số có nghĩa là hơn một nửa số nút ZooKeeper của cử tri, trên tất cả Trung tâm dữ liệu, đều hoạt động.

Nếu không có đủ số lượng nút bỏ phiếu, thì không thể bầu ra nút lãnh đạo. Trong trường hợp này, Zookeeper không thể phân phát yêu cầu. Điều này có nghĩa là bạn không thể gửi yêu cầu đến Máy chủ quản lý Edge, xử lý yêu cầu API hoặc đăng nhập vào giao diện người dùng Edge cho đến khi khôi phục được số đại biểu.

Ví dụ: trong một bản cài đặt Trung tâm dữ liệu:

  • Bạn đã cài đặt 3 nút ZooKeeper
  • Tất cả các nút ZooKeeper đều là nút bỏ phiếu
  • Số đại biểu là hai nút cử tri đang hoạt động
  • Nếu chỉ có một nút cử tri thì tập hợp ZooKeeper không thể hoạt động

Trong một hệ thống có hai Trung tâm dữ liệu:

  • Bạn đã cài đặt 3 nút ZooKeeper cho mỗi Trung tâm dữ liệu, tổng cộng là 6 nút
  • Trung tâm dữ liệu 1 có 3 nút bỏ phiếu
  • Trung tâm dữ liệu 2 có hai nút cử tri và một nút quan sát viên
  • Túc số dựa trên 5 cử tri trên cả hai Trung tâm dữ liệu, do đó, có 3 nút cử tri đang hoạt động
  • Nếu chỉ có hai nút cử tri trở xuống, thì tập hợp ZooKeeper không thể hoạt động

Những điều cần cân nhắc khi thêm nút làm cử tri hoặc người quan sát

Yêu cầu về hệ thống có thể yêu cầu bạn thêm các nút ZooKeeper bổ sung vào bản cài đặt Edge. Tài liệu Thêm nút ZooKeeper mô tả cách thêm các nút ZooKeeper bổ sung vào Edge. Khi thêm nút ZooKeeper, bạn phải xem xét loại nút cần thêm: cử tri hoặc người quan sát.

Bạn cần đảm bảo có đủ nút cử tri để nếu một hoặc nhiều nút cử tri ngừng hoạt động, tập hợp ZooKeeper vẫn có thể hoạt động, tức là vẫn có đủ số đại biểu của các nút cử tri hiện có. Bằng cách thêm nút cử tri, bạn sẽ tăng quy mô của túc số và do đó, bạn có thể chấp nhận nhiều nút cử tri bị hỏng hơn.

Tuy nhiên, việc thêm các nút bỏ phiếu bổ sung có thể ảnh hưởng tiêu cực đến hiệu suất ghi vì các thao tác ghi yêu cầu số đại biểu đồng ý về nút dẫn đầu. Thời gian cần thiết để xác định nút dẫn đầu dựa trên số lượng nút cử tri, số lượng này sẽ tăng lên khi bạn thêm nhiều nút cử tri hơn. Do đó, bạn không nên đặt tất cả các nút làm nút bỏ phiếu.

Thay vì thêm nút bỏ phiếu, bạn có thể thêm nút quan sát. Việc thêm các nút quan sát sẽ làm tăng hiệu suất đọc tổng thể của hệ thống mà không làm tăng mức hao tổn khi bầu chọn nút lãnh đạo vì các nút quan sát không bỏ phiếu và không ảnh hưởng đến quy mô của số đại biểu. Do đó, nếu một nút quan sát ngừng hoạt động, thì điều này sẽ không ảnh hưởng đến khả năng bầu chọn nút dẫn đầu của nhóm. Tuy nhiên, việc mất các nút quan sát có thể làm giảm hiệu suất đọc của nhóm ZooKeeper vì có ít nút hơn để phục vụ các yêu cầu dữ liệu.

Trong một Trung tâm dữ liệu, Apigee khuyên bạn không nên có quá 5 cử tri, bất kể số lượng nút quan sát. Trong hai Trung tâm dữ liệu, Apigee khuyên bạn không nên có nhiều hơn hơn chín cử tri (năm cử tri ở một Trung tâm dữ liệu và bốn cử tri ở Trung tâm dữ liệu còn lại). Sau đó, bạn có thể thêm số lượng nút quan sát cần thiết cho các yêu cầu về hệ thống của mình.

Xoá nút Zookeeper

Có nhiều lý do khiến bạn muốn xoá một nút Zookeeper; ví dụ: một nút bị hỏng hoặc được thêm vào môi trường không phù hợp.

Phần này mô tả cách xoá một nút Zookeeper khi nút đó ngừng hoạt động và không thể truy cập được.

Cách xoá nút Zookeeper:

  1. Chỉnh sửa tệp cấu hình im lặng và xoá địa chỉ IP của nút Zookeeper mà bạn muốn xoá.
  2. Chạy lại lệnh setup cho ZooKeeper để định cấu hình lại các nút ZooKeeper còn lại:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Khởi động lại tất cả các nút Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Định cấu hình lại nút Máy chủ quản lý:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Định cấu hình lại tất cả Bộ định tuyến:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Định cấu hình lại tất cả Bộ xử lý thông báo:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. Định cấu hình lại tất cả các nút Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. Định cấu hình lại tất cả các nút Postgres:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

Những điều cần lưu ý khi bảo trì

Bạn có thể thực hiện bảo trì ZooKeeper trên một tập hợp hoạt động đầy đủ mà không cần thời gian ngừng hoạt động nếu bạn thực hiện việc này trên một nút tại một thời điểm. Bằng cách đảm bảo rằng chỉ có một nút ZooKeeper ngừng hoạt động tại bất kỳ thời điểm nào, bạn có thể đảm bảo rằng luôn có đủ số nút cử tri để bầu ra một thủ lĩnh.

Bảo trì trên nhiều trung tâm dữ liệu

Khi làm việc với nhiều Trung tâm dữ liệu, hãy nhớ rằng nhóm ZooKeeper không phân biệt giữa các Trung tâm dữ liệu. Các tập hợp ZooKeeper xem tất cả các nút ZooKeeper trên tất cả Trung tâm dữ liệu dưới dạng một tập hợp.

Vị trí của các nút bỏ phiếu trong một Trung tâm dữ liệu nhất định không phải là một yếu tố khi ZooKeeper thực hiện tính toán số đại biểu. Các nút riêng lẻ có thể ngừng hoạt động trên các Trung tâm dữ liệu, nhưng miễn là số đại biểu được duy trì trên toàn bộ tập hợp, ZooKeeper vẫn hoạt động.

Ảnh hưởng đến việc bảo trì

Trong nhiều trường hợp, bạn sẽ phải gỡ một nút ZooKeeper xuống để bảo trì, có thể là nút cử tri hoặc nút quan sát. Ví dụ: bạn có thể phải nâng cấp phiên bản Edge trên nút, máy lưu trữ ZooKeeper có thể bị lỗi hoặc nút có thể không hoạt động vì một số lý do khác, chẳng hạn như lỗi mạng.

Nếu nút ngừng hoạt động là nút quan sát, thì bạn có thể thấy hiệu suất của nhóm ZooKeeper giảm nhẹ cho đến khi nút đó được khôi phục. Nếu nút này là nút bỏ phiếu, thì nút này có thể ảnh hưởng đến khả năng hoạt động của nhóm ZooKeeper do mất một nút tham gia vào quy trình bầu chọn nút dẫn đầu. Bất kể lý do khiến nút cử tri ngừng hoạt động là gì, bạn cần duy trì một số đại biểu gồm các nút cử tri có sẵn.

Quy trình bảo trì

Chỉ thực hiện các quy trình bảo trì sau khi đảm bảo rằng một nhóm ZooKeeper đang hoạt động. Điều này giả định rằng các nút quan sát đang hoạt động và có đủ nút cử tri trong quá trình bảo trì để duy trì số đại biểu.

Khi đáp ứng các điều kiện này, một nhóm ZooKeeper có kích thước tuỳ ý có thể chịu được việc mất một nút duy nhất tại bất kỳ thời điểm nào mà không bị mất dữ liệu hoặc ảnh hưởng đáng kể đến hiệu suất. Điều này có nghĩa là bạn có thể tự do thực hiện việc bảo trì trên bất kỳ nút nào trong nhóm, miễn là bạn chỉ thực hiện trên một nút tại một thời điểm.

Trong quá trình bảo trì, hãy làm theo quy trình sau để xác định loại nút ZooKeeper (nút dẫn đầu, nút bỏ phiếu hoặc nút quan sát):

  1. Nếu chưa cài đặt trên nút ZooKeeper, hãy cài đặt nc:
    sudo yum install nc
  2. Chạy lệnh nc sau trên nút, trong đó 2181 là cổng ZooKeeper:
    echo stat | nc localhost 2181

    Bạn sẽ thấy kết quả đầu ra trên biểu mẫu:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    Trong dòng Mode của kết quả cho các nút, bạn sẽ thấy observer, leader hoặc follower (nghĩa là một nút bỏ phiếu không phải là nút lãnh đạo) tuỳ thuộc vào cấu hình nút.

  3. Lặp lại bước 1 và 2 trên mỗi nút ZooKeeper.

Tóm tắt

Cách tốt nhất để thực hiện bảo trì trên một nhóm ZooKeeper là thực hiện từng nút một. Lưu ý:

  • Bạn phải duy trì một số lượng nút bỏ phiếu trong quá trình bảo trì để đảm bảo tập hợp ZooKeeper vẫn hoạt động.
  • Việc gỡ bỏ một nút quan sát không ảnh hưởng đến số đại biểu hoặc khả năng bầu chọn người đứng đầu.
  • Túc số được tính trên tất cả các nút ZooKeeper trong tất cả Trung tâm dữ liệu.
  • Tiến hành bảo trì máy chủ tiếp theo sau khi máy chủ trước đó hoạt động.
  • Sử dụng lệnh nc để kiểm tra nút ZooKeeper.