Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Những gì chúng ta sẽ nói về:
Cách triển khai nhanh bộ nhớ dùng chung cho hai máy chủ dựa trên giải pháp drbd+ocfs2.

Điều này sẽ hữu ích cho ai:
Hướng dẫn này sẽ hữu ích cho quản trị viên hệ thống và bất kỳ ai chọn phương pháp triển khai lưu trữ hoặc muốn thử giải pháp.

Chúng tôi đã từ chối những quyết định nào và tại sao?

Chúng ta thường phải đối mặt với tình huống cần triển khai bộ nhớ dùng chung với hiệu suất đọc-ghi tốt trên một cụm web nhỏ. Chúng tôi đã thử nhiều phương án khác nhau để triển khai bộ nhớ dùng chung cho các dự án của mình, nhưng rất ít phương án có thể làm chúng tôi hài lòng về một số chỉ số cùng một lúc. Bây giờ chúng tôi sẽ cho bạn biết lý do tại sao.

  • Glusterfs không làm chúng tôi hài lòng về hiệu suất đọc và ghi; có vấn đề với việc đọc đồng thời một số lượng lớn tệp và CPU phải chịu tải cao. Vấn đề với việc đọc tệp có thể được giải quyết bằng cách truy cập chúng trực tiếp từ cục gạch, nhưng điều này không phải lúc nào cũng có thể áp dụng được và nói chung là không chính xác.

  • Ceph không thích sự phức tạp quá mức, điều này có thể gây hại cho các dự án có 2-4 máy chủ, đặc biệt nếu dự án được bảo trì sau đó. Một lần nữa, có những hạn chế nghiêm trọng về hiệu suất buộc chúng tôi phải xây dựng các cụm lưu trữ riêng biệt, như với glusterf.

  • Việc sử dụng một máy chủ NFS để triển khai bộ nhớ dùng chung đặt ra câu hỏi về khả năng chịu lỗi.

  • s3 là một giải pháp phổ biến tuyệt vời cho một loạt tác vụ nhất định, nhưng nó không phải là một hệ thống tệp khiến phạm vi của nó bị thu hẹp.

  • lsyncd. Nếu chúng ta đã bắt đầu nói về “hệ thống không phải tệp”, thì bạn nên xem xét giải pháp phổ biến này. Nó không những không phù hợp để trao đổi hai chiều (mà nếu bạn thực sự muốn thì có thể), nó còn không hoạt động ổn định trên một số lượng lớn tệp. Một bổ sung thú vị cho toàn bộ điều này là nó là một luồng. Lý do là ở kiến ​​trúc của chương trình: nó sử dụng inotify để giám sát các đối tượng công việc mà nó chỉ định khi khởi động và trong quá trình quét lại. rsync được sử dụng làm phương tiện truyền tải.

Hướng dẫn: cách triển khai bộ nhớ dùng chung dựa trên drbd+ocfs2

Một trong những giải pháp thuận tiện nhất cho chúng tôi là liên kết ocfs2+drbd. Bây giờ chúng tôi sẽ cho bạn biết cách bạn có thể nhanh chóng triển khai bộ nhớ dùng chung cho hai máy chủ dựa trên cơ sở dữ liệu giải pháp. Nhưng trước tiên, một chút về các thành phần:

DRBD - một hệ thống lưu trữ từ bản phân phối Linux tiêu chuẩn cho phép bạn sao chép dữ liệu giữa các máy chủ theo khối. Ứng dụng chính là xây dựng bộ lưu trữ có khả năng chịu lỗi.

OCFS2 - một hệ thống tệp cung cấp việc sử dụng chung cùng một bộ lưu trữ cho một số hệ thống. Được bao gồm trong bản phân phối Linux và là mô-đun hạt nhân cũng như các công cụ không gian người dùng để làm việc với FS. OCFS2 có thể được sử dụng không chỉ trên DRBD mà còn trên iSCSI với nhiều kết nối. Trong ví dụ của chúng tôi, chúng tôi sử dụng DRBD.

Tất cả các hành động được thực hiện trên máy chủ Ubuntu 18.04 với cấu hình tối thiểu.

Bước 1. Cấu hình DRBD:

Trong tệp /etc/drbd.d/drbd0.res, chúng tôi mô tả thiết bị khối ảo /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

siêu đĩa nội bộ — sử dụng cùng một thiết bị khối để lưu trữ siêu dữ liệu
thiết bị/dev/drbd0 — sử dụng /dev/drbd0 làm đường dẫn đến ổ đĩa drbd.
đĩa/dev/vdb1 - sử dụng/dev/vdb1
bộ đồng bộ hóa {tốc độ 1000M; } - sử dụng băng thông kênh gigabit
cho phép hai bầu cử sơ bộ - một tùy chọn quan trọng cho phép các thay đổi được chấp nhận trên hai máy chủ chính
sau-sb-0pri, sau-sb-1pri, sau-sb-2pri — các tùy chọn chịu trách nhiệm về hành động của nút khi phát hiện ra bộ não chia tách. Thông tin chi tiết có thể được tìm thấy trong tài liệu.
trở thành chính trên cả hai - đặt cả hai nút thành nút chính.

Trong trường hợp của chúng tôi, chúng tôi có hai máy ảo hoàn toàn giống hệt nhau, với mạng ảo chuyên dụng có thông lượng 10 gigabit.

Trong ví dụ của chúng tôi, tên mạng của hai nút cụm là drbd1 và drbd2. Để hoạt động chính xác, bạn cần khớp tên và địa chỉ IP của máy chủ trong /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Bước 2. Thiết lập các nút:

Trên cả hai máy chủ, chúng tôi chạy:

drbdadm create-md drbd0

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Chúng tôi nhận được những điều sau đây:

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Bạn có thể bắt đầu đồng bộ hóa. Trên nút đầu tiên bạn cần thực thi:

drbdadm primary --force drbd0

Chúng ta hãy nhìn vào trạng thái:

cat /proc/drbd

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Tuyệt vời, quá trình đồng bộ hóa đã bắt đầu. Chúng ta đợi đến cuối và xem hình:

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Bước 3. Bắt đầu đồng bộ hóa trên nút thứ hai:

drbdadm primary --force drbd0

Chúng tôi nhận được những điều sau đây:

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Bây giờ chúng ta có thể ghi vào drbd từ hai máy chủ.

Bước 4. Cài đặt và cấu hình ocfs2.

Chúng tôi sẽ sử dụng một cấu hình khá đơn giản:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Nó cần phải được viết ra trong /etc/ocfs2/cluster.conf trên cả hai nút.

Chúng tôi tạo FS trên drbd0 trên bất kỳ nút nào:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Ở đây chúng tôi đã tạo một hệ thống tệp có nhãn testVol trên drbd0, sử dụng các tham số mặc định.

Lưu trữ cụm cho các cụm web nhỏ dựa trên drbd+ocfs2

Trong /etc/default/o2cb bạn cần đặt (như trong tệp cấu hình của chúng tôi)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

và thực thi trên mỗi nút:

o2cb register-cluster ocfs2cluster

Sau đó, chúng tôi bật và thêm tất cả các đơn vị chúng tôi cần để tự động chạy:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Một số trong số này sẽ chạy trong quá trình thiết lập.

Bước 5. Thêm điểm gắn kết vào fstab trên cả hai nút:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Danh mục /phương tiện/được chia sẻ nó phải được tạo trước.

Ở đây chúng tôi sử dụng các tùy chọn noauto, có nghĩa là tệp sẽ không được gắn khi khởi động (tôi thích gắn các tệp mạng qua systemd) và heartbeat=local, nghĩa là sử dụng dịch vụ nhịp tim trên mỗi nút. Ngoài ra còn có nhịp tim toàn cầu, phù hợp hơn cho các cụm lớn.

Tiếp theo bạn có thể gắn kết /phương tiện/được chia sẻ và kiểm tra đồng bộ hóa nội dung.

Xong! Kết quả là, chúng tôi ít nhiều nhận được bộ lưu trữ có khả năng chịu lỗi với khả năng mở rộng và hiệu suất tốt.

Nguồn: www.habr.com

Thêm một lời nhận xét