Có cách nào để phản chiếu hai sever trên Ubuntu không?


8

Tôi đã tự hỏi nếu có thể phản chiếu hai máy chủ, như bạn có thể tải tệp lên một máy chủ và họ sẽ đẩy sang máy chủ khác, v.v. thiết lập (Nhưng điều đó cũng sẽ rất tuyệt!)


Phản chiếu tệp: Gluster hoặc DRDB; Phản chiếu trang web: Varnish hoặc HAProxy; DB Mirroring: Bản sao thông tư MySQL hoặc Bản sao Postgres.; - Hầu hết các gói máy chủ đều có chế độ hoạt động theo cụm hoặc có các proxy ngược cho phép bạn thực hiện điều đó.
Tom O'Connor

Câu trả lời:


6

Nó phụ thuộc rất nhiều vào công việc trong tầm tay.

Tại sao bạn cần phản chiếu tập tin. Bạn có muốn cập nhật một cái gì đó như một trang web hoặc kho lưu trữ nội dung, nơi thường được cập nhật định kỳ. Hay bạn cần đồng bộ hóa dữ liệu theo thời gian thực?

Đối với phản chiếu không đồng bộ định kỳ của các tệp, thường cần có Khu vực tổ chức mà bạn tải lên tất cả dữ liệu của mình. Và từ nơi bạn phân phối nó cho Máy chủ. Trong trường hợp của bạn - với hai máy chủ - bạn có thể tạo một số tệp phân tầng trên srv1 đến nơi bạn chuyển dữ liệu (qua FTP, NFS, DAV, SFTP, v.v.) và sau đó có một cronjob rsync các tệp vào thư mục "trực tiếp" của srv1 và srv2. Cách dễ nhất để sử dụng rsync trong trường hợp đó là tạo cặp khóa ssh mà bạn sẽ sử dụng để truyền dữ liệu và được ủy quyền trên tất cả các máy chủ trong cụm của bạn.

Thí dụ:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

Điều này sẽ cung cấp cho bạn một ý tưởng cơ bản. Tất nhiên, bạn sẽ muốn bọc các cuộc gọi rsync trong một số tập lệnh và thực hiện khóa phù hợp để nó không chạy hai lần trong trường hợp đồng bộ hóa mất hơn 5 phút, v.v. Ngoài ra, không cần phải nói rằng khu vực tổ chức là không bắt buộc. Bạn cũng có thể đồng bộ hóa srv1: sản xuất thành srv2: sản xuất trực tiếp. Chỉ hơn srv2 có thể hiển thị dữ liệu cũ hơn srv1 tới 5 phút. Đó có thể là một vấn đề, tùy thuộc vào cách bạn cân bằng giữa hai.

Một cách khác để phân phối các tệp không đồng bộ là đóng gói chúng dưới dạng vòng / phút hoặc trong trường hợp tệp deb của bạn. Đặt chúng trong một kho lưu trữ trung tâm và để chúng cài đặt / cập nhật thông qua một cái gì đó như cfengine, khỉ hoặc một số giải pháp dựa trên bus tin nhắn tự làm. Điều này có tác dụng phụ tốt đẹp của phiên bản dữ liệu được triển khai nhưng chỉ phù hợp với lượng dữ liệu nhỏ hơn mà bạn tự sản xuất và triển khai (như các phiên bản phần mềm của riêng bạn). Bạn sẽ không muốn phân phối TB dữ liệu với điều này và cũng không phù hợp với nội dung phản chiếu thay đổi với tần suất cao, như mọi phút khác.

Nếu bạn cần sao chép dữ liệu trong thời gian gần nhưng không nhất thiết phải đồng bộ thay vì gọi cron thường xuyên, bạn có thể sử dụng một số phương pháp dựa trên inotify như incron đã đề cập để gọi các tập lệnh đồng bộ hóa của bạn. Một khả năng khác là sử dụng Gamin (cũng sử dụng inotify nếu có trong Kernel) và viết trình nền đồng bộ nhỏ của riêng bạn. Cuối cùng nhưng không kém phần quan trọng, nếu tất cả các tệp được tải lên một máy chủ thông qua SFTP, bạn có thể kiểm tra xem Máy chủ SFTP của bạn có cho phép bạn xác định các hook được gọi sau các sự kiện nhất định không, như tải tệp lên. Bằng cách đó, bạn có thể yêu cầu Máy chủ kích hoạt tập lệnh đồng bộ hóa của mình bất cứ khi nào dữ liệu mới được tải lên.

Nếu bạn cần phản chiếu đồng bộ dữ liệu theo thời gian thực, một hệ thống tệp cụm có thể theo thứ tự. DRDB đã được đặt tên. Nó rất hay để sao chép ở cấp độ khối và thường được sử dụng cho các thiết lập MySQL có sẵn cao. Bạn cũng có thể muốn xem GFS2, OCFS2, Luster và GlusterFS. Mặc dù Luster và GlusterFS không thực sự phù hợp cho thiết lập hai Máy chủ.


DRBD trông đẹp. Có phải là xấu khi sử dụng điều này với một máy chủ đang hoạt động? Giống như nó sẽ ảnh hưởng đến máy chủ trực tiếp như thế nào?
Kyle

Phụ thuộc - Máy chủ trực tiếp đang làm gì? Nó có phải là một máy chủ web, máy chủ cơ sở dữ liệu, máy chủ tập tin, vv? DRBD thực hiện sao chép đồng bộ, với tất cả các hàm ý đi kèm với nó. Tùy thuộc vào việc bạn có kế hoạch thực hiện các hạn chế bộ nhớ đệm I / O (và hệ thống tập tin) đơn chính hay chính mà sẽ ảnh hưởng đến các ứng dụng của bạn. Để biết chi tiết, tôi khuyên bạn nên đọc Hướng dẫn sử dụng DRBD drbd.org/users-guide-emb được viết rất tốt và giải thích tất cả các hàm ý rất chi tiết.
Lukas Loesche

5

Về cơ bản bạn có 3 khả năng:

  1. Hãy để ứng dụng của bạn đẩy các tập tin đến cả hai máy chủ.
  2. Sao chép không đồng bộ, ví dụ rsync cứ sau 15 phút (hoặc ít hơn) với công việc định kỳ
  3. Sao chép đồng bộ trên hệ thống tệp (ví dụ: GlusterFS ) hoặc chặn cấp thiết bị (ví dụ DRBD ). Nếu bạn sử dụng sao chép ở cấp thiết bị khối, bạn cần một hệ thống tệp hỗ trợ khóa phân tán (ví dụ OCFS2 hoặc GFS2 ) nếu bạn muốn có quyền truy cập r / w vào các tệp từ cả hai máy chủ cùng một lúc.



1

Nếu bạn đang cố gắng xây dựng một giải pháp sao lưu ở đây (mà cá nhân tôi đã thực hiện trong khá nhiều thiết lập tương tự) thì hãy cẩn thận. Có rất nhiều thứ khác nhau mà bạn cần sao lưu, một trong những (được cho là lớn nhất) bị xóa vô tình - bất kỳ hệ thống sao chép trực tiếp nào cũng sẽ sao chép xóa và chứng minh không an toàn. Đối với công việc nhân rộng hàng ngày này, nhưng là một câu trả lời khá yếu. Hãy thử RSnapshot.

Unison có thể làm việc tốt cho bạn, nhưng tôi không có kinh nghiệm cá nhân.

Chạy Rupync theo cả hai hướng với các cờ aproprate có thể hoạt động, nhưng vấn đề khá khó khăn là làm thế nào để xử lý các tệp bị xóa, không cần xử lý đặc biệt, nó chỉ cần khôi phục các tệp, sẽ ổn nếu bạn không bao giờ xóa bất cứ thứ gì như tôi, nhưng một chút nghèo thì không. Nó cũng làm những điều kỳ lạ nếu một tập tin được di chuyển.

Bất cứ điều gì bạn đang làm, nếu bất kỳ tình huống nào có thể xảy ra trong đó các tập tin có thể được chỉnh sửa đồng thời ở cả hai đầu, bạn có một vấn đề. unison là giải pháp duy nhất tôi biết có thể xử lý vấn đề này thậm chí gần với thỏa đáng.


Lưu ý rằng các vòng lặp được đề cập dưới đây sẽ không phải là vấn đề với Rupync, vì nó duy trì ngày sửa đổi của các tệp mà nó chuyển nếu được đặt chính xác.
Thingomy

0

Nếu đó là một chiều (ý tôi là, luôn luôn từ một máy chủ này sang một máy chủ khác, nhưng không phải là ngược lại) bạn có thể sử dụng incron. Nó giống như cron nhưng dựa trên các sự kiện hệ thống tập tin.

Mỗi khi một tệp được tạo hoặc thay đổi, nó sẽ kích hoạt scp hoặc rsync đến máy chủ khác.

Bi-directional có vấn đề về các vòng lặp :).


0

nó phụ thuộc vào nhu cầu của bạn ..... tôi có một thiết lập rất "rẻ và dễ dàng" cho các máy chủ web cụm.

tôi chỉ cần có một "máy chủ tệp" (NFS) trong đó tất cả các máy chủ web gắn kết các thư mục sau:

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

chết đơn giản và làm việc


0

clonezilla cũng có thể xem xét sử dụng rsync


Không chắc chắn clonezilla áp dụng ở đây ... mặc dù, nó là một tiện ích tốt đẹp.
HoplessN00b
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.