Đây là blogpost thứ hai về sao chép Apache HBase. Bài đăng trên blog trước đó, Tổng quan về nhân bản HBase, đã thảo luận về các trường hợp sử dụng, kiến trúc và các chế độ khác nhau được hỗ trợ trong nhân bản HBase. Bài đăng blog này từ góc độ hoạt động và sẽ liên quan đến cấu hình sao chép HBase và các khái niệm chính để sử dụng nó - chẳng hạn như khởi động, thay đổi lược đồ và khả năng chịu lỗi.
Cấu hình
Như đã đề cập trong Tổng quan về nhân bản HBase, cụm chủ gửi lô hàng WALEdits đến một hoặc nhiều cụm phụ. Phần này mô tả các bước cần thiết để định cấu hình sao chép trong chế độ chủ-tớ.
- Tất cả các bảng / họ cột sẽ được sao chép phải tồn tại trên cả hai cụm.
- Thêm thuộc tính sau vào $ HBASE_HOME / conf / hbase-site.xml trên tất cả các nút trên cả hai cụm; đặt nó thành true.
hbase.replication
đúng
Trên cụm chính, hãy thực hiện các thay đổi bổ sung sau:
- Đặt phạm vi sao chép ( REPLICATION_SCOPE thuộc tính) trên bảng / họ cột sẽ được sao chép:
hbase shell> vô hiệu hóa ‘bảng’
hbase shell> alter 'table', {NAME => "column-family", REPLICATION_SCOPE => 1}
hbase shell> bật 'table'
REPLICATION_SCOPE là thuộc tính cấp cột-họ và giá trị của nó có thể là 0 hoặc 1. Giá trị 0 có nghĩa là tính năng sao chép bị tắt và 1 có nghĩa là tính năng sao chép được bật. Người dùng phải thay đổi từng họ cột bằng lệnh thay đổi như được hiển thị ở trên, đối với tất cả các họ cột mà anh ta muốn sao chép.
Nếu người dùng muốn bật tính năng sao chép trong khi tạo bảng, anh ta nên sử dụng lệnh sau:
hbase shell> tạo ‘table’, ‘column-family1’, ‘‘ column-family2 ’, {NAME =>‘ column-family1 ’, REPLICATION_SCOPE => 1}
Lệnh trên sẽ cho phép sao chép trên ‘column-family1’ của bảng trên.
2. Trong vỏ hbase, thêm đồng đẳng nô lệ. Người dùng phải cung cấp túc số người quản lý sở thú của cụm nô lệ, cổng ứng dụng khách và znode hbase gốc, cùng với peerId:
hbase shell> add_peer ‘peerId’, “::”
peerId là một chuỗi dài một hoặc hai ký tự và một znode tương ứng được tạo dưới znode ngang hàng, như đã giải thích trong blog trước. Khi người dùng chạy lệnh add_peer, mã Replication khởi tạo đối tượng ReplicationSource cho máy ngang hàng đó và tất cả các máy chủ vùng của cụm chính cố gắng kết nối với các máy chủ vùng của cụm nô lệ. Nó cũng tìm nạp ClusterId của cụm nô lệ (UUID, được đăng ký trên túc số người giữ vườn thú của cụm nô lệ). Máy chủ vùng chính của cụm chủ liệt kê các máy chủ vùng có sẵn của máy chủ phụ bằng cách đọc “/ hbase / rs” znode và các máy chủ con của nó trong nhóm túc số người quản lý sở thú của cụm máy chủ và tạo kết nối với nó. Mỗi máy chủ vùng tại cụm chính chọn một tập hợp con từ các máy chủ vùng phụ, tùy thuộc vào tỷ lệ được chỉ định bởi “replication.source.ratio”, với giá trị mặc định là 0,1. Điều này có nghĩa là mỗi máy chủ vùng cụm chính sẽ cố gắng kết nối với 10% tổng số máy chủ vùng cụm phụ. Trong khi gửi lô giao dịch, máy chủ vùng chính của cụm sẽ chọn một máy chủ vùng ngẫu nhiên từ các máy chủ vùng được kết nối này. (Lưu ý:Không thực hiện sao chép đối với các bảng danh mục, .META. Và _ROOT_.)
Để thiết lập chế độ tổng thể chính, các bước trên phải được lặp lại trên cả hai cụm.
Thay đổi giản đồ
Như đã đề cập trong phần trước, họ bảng và cột được sao chép phải tồn tại trong cả hai cụm. Phần này thảo luận về các trường hợp có thể xảy ra khác nhau về điều gì sẽ xảy ra trong quá trình thay đổi giản đồ khi quá trình sao chép vẫn đang diễn ra:
a) Xóa họ cột trong tổng thể:Việc xóa họ cột sẽ không ảnh hưởng đến việc sao chép bất kỳ đột biến nào đang chờ xử lý cho họ đó. Điều này là do mã sao chép đọc WAL và kiểm tra phạm vi sao chép của các họ cột cho mỗi WALEdit. Mỗi WALEdit có một bản đồ của các họ cột được kích hoạt sao chép; việc kiểm tra được thực hiện trên tất cả họ cột của giá trị khóa cấu thành (cho dù chúng có được xác định phạm vi hay không). Nếu nó có trong bản đồ, nó sẽ được thêm vào lô hàng. Vì đối tượng WALEdit được tạo trước khi họ cột bị xóa nên việc sao chép của nó sẽ không bị ảnh hưởng.
b) Xóa họ cột trong nô lệ:Các WALEdits được chuyển từ cụm chính đến một máy chủ vùng phụ cụ thể, xử lý nó giống như một ứng dụng khách HBase bình thường (sử dụng đối tượng HTablePool). Vì họ cột bị xóa, thao tác đưa sẽ không thành công và ngoại lệ đó sẽ được chuyển đến cụm máy chủ vùng chính.
Bắt đầu / Dừng sao chép
Các lệnh Start / Stop hoạt động như một công tắc ngắt. Khi lệnh stop_replication được chạy tại HBase shell, nó sẽ thay đổi giá trị của / hbase / replication / state thành false. Nó sẽ ngăn tất cả các đối tượng nguồn sao chép đọc nhật ký; nhưng các mục đã đọc hiện có sẽ được chuyển đi. Nếu người dùng sử dụng lệnh dừng sao chép, các bản ghi mới được cuộn sẽ không được xếp vào hàng để sao chép. Tương tự, việc phát hành lệnh start_replication sẽ bắt đầu sao chép từ WAL hiện tại (có thể chứa một số giao dịch trước đó) chứ không phải từ thời điểm lệnh được phát hành.
Hình 1 giải thích hành vi chuyển đổi start-stop, trong đó chuỗi sự kiện diễn ra theo hướng mũi tên.
Khả năng tương thích với phiên bản
Máy chủ vùng cụm chính kết nối với máy chủ vùng cụm phụ như các máy khách HBase bình thường. Quy tắc tương thích tương tự áp dụng cho việc liệu một ứng dụng khách HBase trên phiên bản xxx có được hỗ trợ trên một máy chủ HBase trên phiên bản yyy hay không.
Mặt khác, vì sao chép vẫn đang tiếp tục phát triển (ngày càng có nhiều chức năng liên tục được thêm vào nó), người dùng nên biết về các chức năng hiện có. Ví dụ, trong CDH4, dựa trên nhánh HBase 0.92, có hỗ trợ sao chép bản chính và chu kỳ. Bật / Tắt nguồn sao chép ở cấp độ ngang hàng được thêm vào nhánh HBase 0.94.
Khởi động dây đai
Bản sao hoạt động bằng cách đọc WAL của máy chủ vùng cụm chính. Nếu người dùng muốn sao chép dữ liệu cũ, họ có thể chạy lệnh copyTable (xác định dấu thời gian bắt đầu và kết thúc), đồng thời cho phép sao chép. Lệnh copyTable sẽ sao chép dữ liệu có phạm vi theo dấu thời gian bắt đầu / kết thúc và quá trình sao chép sẽ xử lý dữ liệu hiện tại. Cách tiếp cận tổng thể có thể được tóm tắt là:
- Bắt đầu sao chép (lưu ý dấu thời gian).
- Chạy lệnh copyTable với dấu thời gian kết thúc bằng dấu thời gian trên.
- Vì sao chép bắt đầu từ WAL hiện tại, có thể có một số giá trị khóa được sao chép sang nô lệ bởi cả công việc sao chép và copyTable. Điều này vẫn ổn vì đây là một hoạt động không cần thiết.
Trong trường hợp sao chép chính-chủ, người ta nên chạy công việc copyTable trước khi bắt đầu sao chép. Điều này là do nếu người dùng bắt đầu công việc copyTable sau khi cho phép sao chép, bản chính thứ hai sẽ gửi lại dữ liệu cho bản chính đầu tiên, vì copyTable không chỉnh sửa clusterId trong các đối tượng đột biến. Cách tiếp cận tổng thể có thể được tóm tắt là:
- Chạy công việc copyTable, (lưu ý dấu thời gian bắt đầu của công việc).
- Bắt đầu sao chép.
- Chạy lại copyTable với thời gian bắt đầu bằng với thời gian bắt đầu đã ghi ở bước 1.
Điều này cũng dẫn đến một số dữ liệu bị đẩy qua lại giữa hai cụm; nhưng nó thu nhỏ kích thước của nó.
Khả năng chịu lỗi
Chuyển đổi dự phòng máy chủ khu vực cụm chính
Tất cả các máy chủ vùng trong cụm chính tạo một znode trong “/ hbase / replication / rs”, như đã đề cập trong phần Kiến trúc. Máy chủ vùng thêm một znode con cho mỗi WAL, với độ lệch byte dưới znode của nó trong hệ thống phân cấp sao chép, như trong Hình 1. Nếu một máy chủ vùng bị lỗi, các máy chủ vùng khác cần phải xử lý các nhật ký của máy chủ vùng chết, được liệt kê dưới đó znode của máy chủ vùng. Tất cả các máy chủ vùng luôn theo dõi các znode máy chủ vùng khác (“/ hbase / rs”) znode; vì vậy khi một máy chủ vùng bị lỗi, các máy chủ vùng khác sẽ nhận được sự kiện vì chính đánh dấu máy chủ vùng này là đã chết. Trong trường hợp này, tất cả các máy chủ vùng khác đua nhau chuyển WAL từ znode máy chủ vùng đã chết sang znode của chúng và gắn tiền tố nó với id nô lệ và tên máy chủ vùng chết, để phân biệt với các nhật ký bình thường khác. Nguồn sao chép riêng biệt (phiên bản NodeFailoverWorker) được khởi tạo cho các nhật ký đã chuyển, nguồn này sẽ chết sau khi xử lý các nhật ký đã chuyển này.
Nếu người ta coi Hình 1 của Tổng quan về nhân bản HBase là hình cơ sở của hệ thống phân cấp znodes sao chép, thì Hình 2. cho thấy hệ thống phân cấp znodes nhân bản mới trong trường hợp máy chủ foo1.bar.com chết và foo2.bar.com tiếp quản hàng đợi của nó. Lưu ý znode mới “1-foo1.bar.com, 40020,1339435481973” được tạo trong foo2.bar.com znode
/ hbase / hbaseid:b53f7ec6-ed8a-4227-b088-fd6552bd6a68…. /hbase/rs/foo2.bar.com,40020,1339435481973:/hbase/rs/foo3.bar.com,40020,1339435486713:/ hbase / replication:/ hbase / replication / state:true / hbase / replication / ngang hàng:/ hbase / replication /osystem / 1:zk.quorum.slave:281:/ hbase / hbase / replication / rs:/hbase/replication/rs/foo1.bar.com.com,40020,1339435084846:/ hbase / replication / rs / foo1.bar.com, 40020,1339435481973 / 1:/hbase/replication/rs/foo1.bar.com,40020, 1339435481973/1 / foo1.bar.com.1339435485769:1243232 / hbase / replication / rs / foo3 .bar.com, 40020,1339435481742:/hbase/replication/rs/foo3.bar.com,40020,1339435481742/1:/hbase/replication/rs/foo3.bar.com,40020, 1339435481742/1 / foo3.bar ..com.1339435485769:1243232 /hbase/replication/rs/foo2.bar.com,40020,1339435089550:/hbase/replication/rs/foo2.bar.com,40020,1339435481742/1:/ hbase / replication / rs / foo2.bar.com, 40020, 1339435481742/1 / foo2.bar..com.13394354343443:1909033 /hbase/replication/rs/foo2.bar.com,40020,1339435481742/1- foo1.bar.com, 40020,1339435481973 /foo1.bar.com.1339435485769:1243232
Hình 2. Hệ thống phân cấp znodes chuyển đổi dự phòng Regionserver znodes
Trong khi đó, quá trình chia nhỏ nhật ký có thể bắt đầu và có thể lưu trữ nhật ký máy chủ vùng chết. Nguồn nhân bản tìm kiếm các bản ghi trong cả thư mục thông thường và thư mục lưu trữ.
Cụm máy chủ chậm / không phản hồi (hoặc máy chủ vùng)
Khi cụm máy chủ gặp sự cố hoặc nếu có một phân vùng mạng tạm thời, các nhật ký chưa được sao chép sang máy phụ sẽ không bị xóa bởi trình dọn dẹp nhật ký HBase.
Việc dọn dẹp nhật ký được xử lý bởi lớp LogCleaner, lớp này sẽ tiếp tục chạy sau một thời gian được định cấu hình. Mã nhân bản thêm plugin ReplicationLogCleaner vào lớp LogCleaner. Khi cái sau cố gắng xóa một nhật ký cụ thể, ReplicationLogCleaner sẽ xem xét liệu nhật ký đó có tồn tại trong hệ thống phân cấp znode nhân bản hay không (dưới / hbase / replication / rs / znode). Nếu nhật ký được tìm thấy, điều đó có nghĩa là nhật ký vẫn chưa được sao chép và nó sẽ bỏ qua việc xóa. Khi nhật ký được sao chép, znode của nó sẽ bị xóa khỏi hệ thống phân cấp sao chép. Trong lần chạy tiếp theo, LogCleaner sẽ xóa tệp nhật ký thành công sau khi nó được sao chép.
Xác minh
Đối với lượng dữ liệu nhỏ hơn, người ta có thể chỉ cần tìm kiếm các hàng trong bảng bằng cách sử dụng vỏ hbase tại cụm nô lệ để xác minh xem chúng có được sao chép hay không. Một cách tiêu chuẩn để xác minh là chạy công việc verifyrep mapreduce, đi kèm với HBase. Nó sẽ được chạy ở cụm chủ và yêu cầu cụm từ phụ và tên bảng mục tiêu. Người ta cũng có thể cung cấp các đối số bổ sung như dấu thời gian bắt đầu / dừng và họ cột. Nó in ra hai bộ đếm là GOODROWS và BADROWS, biểu thị số lượng hàng được sao chép và không được giải thích tương ứng.
Chỉ số sao chép
Khung nhân bản cho thấy một số chỉ số hữu ích có thể được sử dụng để kiểm tra tiến trình nhân bản. Một số điều quan trọng là:
- sizeOfLogQueue:số lượng HLog cần xử lý (không bao gồm HLog đang được xử lý) tại nguồn Sao chép
- vận chuyểnOpsRate:tỷ lệ đột biến được vận chuyển
- logEditsReadRate:tỷ lệ đột biến được đọc từ các HLog tại nguồn sao chép
- ageOfLastShippedOp:độ tuổi của lô cuối cùng được vận chuyển bởi nguồn nhân bản
Công việc trong tương lai
Với tất cả các tính năng hiện có trong bản sao HBase hiện tại, vẫn còn phạm vi để cải thiện thêm. Nó thay đổi từ hiệu suất, chẳng hạn như giảm độ trễ thời gian sao chép giữa chính và phụ, đến xử lý lỗi máy chủ khu vực mạnh mẽ hơn (HBase-2611). Các lĩnh vực cải tiến khác bao gồm cho phép sao chép bảng cấp độ ngang hàng và xử lý phù hợp IncrementColumnValue (HBase-2804).
Kết luận
Bài đăng này đã thảo luận về việc sao chép HBase từ quan điểm của nhà điều hành bao gồm cấu hình (các chế độ khác nhau), khởi động cụm hiện có, ảnh hưởng của các thay đổi giản đồ và khả năng chịu lỗi.