2012-08-30 23 views
6

Tôi có một cụm Mongo với 2 mảnh, RS1 và RS2. RS1 có khoảng 600G (*), RS2 khoảng 460G. Một vài phút trước, tôi đã thêm một mảnh vỡ mới, RS3. Khi tôi kết nối với mongos và kiểm tra tình trạng, đây là những gì tôi thấy:MongoDB: phân đoạn mới xuất hiện, nhưng không hiển thị nội dung. Đây có phải là dự kiến ​​không?

mongos> db.printShardingStatus() 
--- Sharding Status --- 
    sharding version: { "_id" : 1, "version" : 3 } 
    shards: 
     { "_id" : "RS1", "host" : "RS1/dbs1d1:27018" } 
     { "_id" : "RS2", "host" : "RS2/dbs1d2:27018" } 
     { "_id" : "RS3", "host" : "RS3/dbs3a:27018" } 
    databases: 
     { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
     { "_id" : "demo", "partitioned" : false, "primary" : "RS1" } 
     { "_id" : "cm_prod", "partitioned" : true, "primary" : "RS1" } 
       cm_prod.profile_daily_stats chunks: 
           RS2  16 
           RS1  16 
         too many chunks to print, use verbose if you want to force print 
       cm_prod.profile_raw_stats chunks: 
           RS2  157 
           RS1  157 
         too many chunks to print, use verbose if you want to force print 
       cm_prod.video_latest_stats chunks: 
           RS1  152 
           RS2  153 
         too many chunks to print, use verbose if you want to force print 
       cm_prod.video_raw_stats chunks: 
           RS1  3257 
           RS2  3257 
         too many chunks to print, use verbose if you want to force print 
      [ ...various unpartitioned DBs snipped...] 

Vì vậy, RS3 mảnh mới xuất hiện trong danh sách các mảnh vỡ, nhưng không phải trong danh sách "có bao nhiêu khối không mỗi phân đoạn có" . Tôi đã dự kiến ​​nó sẽ xuất hiện trong danh sách đó với tổng số là 0 cho tất cả các bộ sưu tập được phân loại.

Đây có phải là hành vi mong đợi sẽ tự sắp xếp nếu tôi muốn một chút không?

Trả lời

3

Nó sẽ bắt đầu có khối di chuyển qua nó, có, trên thực tế nó sẽ là mục tiêu mặc định cho mỗi di chuyển chunk cho tương lai gần (lựa chọn cơ bản là để di chuyển từ mảnh với hầu hết các mảnh với ít nhất khối) . Mỗi phân đoạn chính chỉ có thể tham gia vào một lần di chuyển duy nhất tại một thời điểm, do đó, với nhiều khối để di chuyển nó sẽ mất một thời gian, đặc biệt là nếu hai người kia bận.

Tôi đã thấy những trường hợp mọi người đã tắt cân bằng và quên nó đi. Cho rằng 2 mảnh khác của bạn được cân bằng khá tốt, tôi không nghĩ đó là trường hợp ở đây, nhưng chỉ trong trường hợp ....

Bạn có thể kiểm tra trạng thái của cân bằng bằng cách kết nối với mongos và sau đó làm như sau:

use config; 
db.settings.find({ _id : "balancer" }) 

Đảm bảo rằng "đã dừng" không được đặt thành true.

Để xem những gì đang giữ khóa, và vì thế cân bằng tại thời điểm đó:

use config; 
db.locks.find({ _id : "balancer" }); 

Cuối cùng, để kiểm tra những gì cân bằng được thực sự làm, nhìn vào mongos đăng nhập trên máy tính đó. Bộ cân bằng xuất các hàng vào nhật ký được đặt trước bởi [Balancer]. Bạn cũng có thể tìm kiếm thư di chuyển trong nhật ký của các cá thể mongod chính trong nhật ký.

CHỈNH SỬA: Điều này có thể gây ra bởi SERVER-7003 - một lỗi được tìm thấy trong bản phát hành sau 2.2.0. Nếu có các xóa trong phạm vi (đoạn) được di chuyển từ phân đoạn nguồn, đôi khi nó có thể gây ra tình trạng tê liệt nơi tất cả các đoạn di chuyển bị hủy bỏ và phân đoạn mục tiêu dường như luôn tham gia vào quá trình di chuyển, không phải.

Vì điều này đã được sửa trong 2.2.1 bản nâng cấp là đường dẫn được đề xuất để giải quyết vấn đề. Mặc dù nó có thể được giải quyết bằng cách khởi động lại và/hoặc khi trạng thái xấu trên phân đoạn mục tiêu tự giải quyết, như có thể là trường hợp trong các bình luận bên dưới.

+0

tôi nhận được kết quả như sau, mà dường như sai (định dạng cho mức độ dễ đọc): 'mongos> sử dụng cấu hình chuyển sang db config mongos> db.settings.find ({_id: "balancer"}) mongos> db.locks.find ({_id: "balancer"}); { "_id": "cân bằng", "quá trình": "dbs1d1: 27.017: 1343957738: 1804289383", "nhà nước": 2, "ts": ObjectId ("50400347f7448e409c964af3"), "khi": ISODate ("2012-08-31T00: 20: 23.879Z "), " người ":" dbs1d1: 27017: 1343957738: 1804289383: Số dư: 846930886 ", " tại sao ":" làm tròn cân bằng "}' – dstorrs

+0

Argh, không thể quản lý dễ đọc. Dưới đây là tóm tắt: db.settings.find ({_id: "balancer"}) không trả về gì cả. Db.locks.find ({_id: "balancer"}); trả về một hàng cho biết dbs1d1 (tên thay thế cho dbs1a) sở hữu khóa Trên phân đoạn mới, db.chunks.find ({shard: "RS3"}). count() trả về 0. – dstorrs

+0

... Aaand, đã viết rằng, nó bây giờ bắt đầu xuất hiện. thấy điều này trong các bản ghi trên hộp mới (dbs3a), mà nói rằng di chuyển chunk là không (cắt để phù hợp): [Balancer] di chuyển chunk ns: cm_prod.video_latest_stats di chuyển (ns: cm_prod.vid eo_latest_stats tại: RS2: RS2/dbs1d2: 27018 ... RS2: RS2/dbs1d2: 27018 -> RS3: RS3/dbs3a: 27018 Thu Aug 30 17:37:06 [Balancer] moveChết quả kết quả: {nguyên nhân: {errmsg: "di chuyển đã được tiến hành", ok: 0.0}, errmsg: "moveChunk không tham gia TO-shard trong chuyển dữ liệu: di chuyển đã được tiến hành", ok: 0.0} – dstorrs

1

thay vì sử dụng db.printShardingStatus(true); nó sẽ in danh sách các mảnh vỡ, khối và tất cả các chi tiết khác