2011-01-17 21 views
5

Khi sử dụng Phân vùng theo Solaris, hostid không thay đổi theo vùng, nhưng bạn cũng có được (thông qua một cuộc gọi hàm, getzoneid()) một vùng duy nhất cho vùng của bạn.Có API nào trong KVM để có được một ZoneID không?

Sử dụng KVM trong Linux, thay đổi hostid (gia tăng) theo vùng - điều này khá tốt, nhưng không hoàn hảo - bạn có thể va chạm với một người nào đó elses hostid.

Có API nào do KVM cung cấp cho phép tôi có vùng bị ô nhiễm không?

Trả lời

3

Về mối quan tâm của bạn về hostids trùng lặp:

Không giống như Solaris, Linux kernel không cung cấp "gethostid" gọi. Thay vào đó, "gethostid" (được sử dụng bởi các chương trình /usr/bin/hostid) là implemented by glibc, mà cố gắng:

  1. Xác định xem một file cố định (/etc/hostid trên hệ thống của tôi) tồn tại; nếu có, sử dụng giá trị 4 byte trong đó;
  2. Nếu không, cố gắng tạo một hostid dựa trên địa chỉ IP của hệ thống;
  3. Nếu không, hãy sử dụng máy chủ của 0.

Điều này có nghĩa là nếu mọi hệ thống đều có một địa chỉ IP duy nhất, chúng cũng sẽ có một hostid duy nhất.

Nếu hệ thống của bạn không có địa chỉ IP duy nhất, bạn vẫn có thể ghi đè lên hostid bằng cách sử dụng cuộc gọi thư viện glibc sethostid (ghi vào tệp đọc theo bước (1) của thuật toán gethostid của glibc ở trên).

Về lấy các zoneid của một trường hợp KVM:

Không giống như khu Solaris (nơi mà tất cả các trường hợp chia sẻ các hạt nhân tương tự), mỗi thể hiện của KVM chạy bản sao riêng của hạt nhân Linux, tất cả đều không biết gì cho các trường hợp khác đang chạy. Theo như tôi biết, không có tương đương trực tiếp của một vùng Solaris, vì mỗi cá thể Linux không có cách nào cộng tác với các cá thể Linux khác.

Nếu bạn cần một định danh duy nhất cho mỗi trường hợp KVM chạy, một số tùy chọn là:

  • Chỉ cần giải quyết đối với các địa chỉ IP/hostid, như mô tả ở trên;

  • Khi thiết lập/khởi động các phiên bản của bạn, hãy tạo UUID cho hệ thống sử dụng uuidgen và lưu nó ở vị trí an toàn trên hệ thống tệp. UUID được tạo như vậy sẽ không bao giờ khớp với bất kỳ UUID nào khác với xác suất rất cao;

  • Khi khởi động từng phiên bản hệ thống của bạn, hãy truyền dòng lệnh hạt nhân một mã định danh duy nhất được tạo thủ công cho cá thể (sử dụng đối số dòng lệnh -append KVM). Điều này có thể được tìm nạp sau từ /proc/cmdline.

+0

Bạn giành được giải thưởng! :-) –

Các vấn đề liên quan