2009-02-18 43 views
6

Tôi có điều này trong tâm trí:Cơ sở dữ liệu sao chép để dự phòng sử dụng một cơ sở dữ liệu miễn phí và Java với mùa xuân & Hibernate ứng dụng web

On mỗi máy chủ: (họ tất cả được thiết lập hệt)

  • Cơ sở dữ liệu miễn phí như MySQL hoặc PostgreSQL.
  • Tomcat 6.x để lưu trữ Servlet ứng dụng dựa trên Java
  • Hibernate 3.x như công cụ ORM
  • Spring 2,5 cho lớp kinh doanh
  • Wicket 1.3.2 cho các lớp trình bày

Tôi đặt cân bằng tải ở phía trước máy chủ và bộ cân bằng tải thay thế trong trường hợp cân bằng tải chính của tôi bị hỏng.

Tôi sử dụng Terracotta để có thông tin phiên được sao chép giữa các máy chủ. Nếu một máy chủ bị hỏng, người dùng có thể tiếp tục công việc của họ tại một máy chủ khác, lý tưởng là nếu không có gì xảy ra. Những gì còn lại để "giải quyết" (như tôi đã không thực sự thử nghiệm này và ví dụ không biết những gì tôi nên sử dụng như là một cân bằng tải) là nhân rộng cơ sở dữ liệu đó là cần thiết.

Nếu người dùng tương tác với ứng dụng và cơ sở dữ liệu thay đổi, thì thay đổi đó phải được sao chép vào máy chủ cơ sở dữ liệu trên các máy chủ khác. Tôi nên làm thế nào? Tôi có nên sử dụng MySQL PostgreSQL hay cái gì khác (lý tưởng là miễn phí vì chúng tôi có ngân sách hạn chế)? Những thứ khác trên âm thanh có hợp lý không?

Làm rõ: Tôi cụm để có tính sẵn sàng cao đầu tiên và quan trọng nhất và tôi muốn có thể thêm máy chủ và sử dụng tất cả cùng một lúc để có khả năng mở rộng cao.

+0

Hehe, quan tâm đến việc này. Tôi đã xem xét gần như cùng một vòm (sans Hibernate/Wicket và không có đất nung). PostgreSQL + pgpool có vẻ là đặt cược tốt nhất của tôi, tôi cần chạy một số điểm chuẩn ... – alex

Trả lời

4

Vì bạn đã sử dụng Terracotta và bạn tin rằng DB thứ hai là một ý tưởng hay (đã đồng ý), bạn có thể xem xét mở rộng vai trò của Terracotta. Chúng tôi có những khách hàng sử dụng Terracotta để sao chép cơ sở dữ liệu. Dưới đây là một ví dụ ngắn gọn/mô tả nhưng tôi nghĩ rằng họ đã ngừng hỗ trợ khách hàng cho sản phẩm này .:

http://www.terracotta.org/web/display/orgsite/TCCS+Asynchronous+Data+Replication

+0

Xin lỗi vì bài đăng khó hiểu của tôi. Tôi chưa thực sự sử dụng Terracotta, tôi đã "ghi nhớ". :-) Tôi sẽ dành chút thời gian để đọc liên kết của bạn sớm, nghe có vẻ rất thú vị! –

+0

Liên kết không hoạt động nữa ... – ArunaFromLK

+0

bạn có thể vui lòng cập nhật liên kết thứ hai không – shareef

0

Đây là một ý tưởng. Đọc sách của Theo Schlossnagle Salable Internet Architectures.

Điều bạn đang đề xuất không phải là ý tưởng hay nhất.

Bộ cân bằng tải đắt và không có giá trị như chúng xuất hiện. Sử dụng một cái gì đó đơn giản hơn để phân phối tải giữa các máy chủ của bạn (giống như Wackamole).

Thay vì đánh lừa xung quanh với nhân rộng DB, hãy tiêu tiền của bạn trên một máy chủ DB đáng tin cậy tách biệt với máy chủ web mặt trước của bạn. Thực hiện sao lưu thường xuyên và trong rất sự kiện không chắc xảy ra lỗi DB, hãy chạy lại nhanh nhất có thể từ bản sao lưu thông thường.

+0

Việc máy chủ SQL của bạn thất bại không phải là không phổ biến như bạn nghĩ. Ví dụ, tôi đã thấy máy chủ Linux được quản lý của tôi thất bại hai lần chỉ vì các tệp nhật ký tràn. Trong trường hợp này, nếu bạn đang dựa vào một máy chủ SQL duy nhất, tất cả các máy chủ web của bạn đều bị hỏng. –

+0

@Adrian Grigore: đơn giản và rẻ hơn để theo dõi và ngăn chặn các tệp nhật ký tràn hơn là đầu tư một lượng lớn thời gian trong việc sao chép DB phức tạp (và dễ bị lỗi). –

+0

-1: Như tôi muốn biết TẠI SAO các giải pháp của tôi không phải là một ý tưởng hay, ít nhất là một gợi ý và sau đó tôi sẽ đọc cuốn sách. Trên thực tế tôi đang tìm kiếm làm thế nào tôi có thể nhân rộng data-base.I muốn có ít nhất hai máy chủ cơ sở dữ liệu để cảm thấy an toàn.Cân bằng tải có thể xảy ra theo nhiều cách, tôi chắc chắn sẽ kiểm tra Wackamole. –

1

Đối với trang web (Perl-driven) của tôi, tôi đang sử dụng MySQL trên hai máy chủ có nhân rộng cơ sở dữ liệu. Mỗi máy chủ MySQL là slave và master cùng một lúc. Tôi đã làm điều này cho redudancy, không cho hiệu suất, nhưng các thiết lập đã làm việc tốt cho 3 năm qua, chúng tôi đã gần như không có thời gian chết ở tất cả trong thời gian này.

Về câu hỏi/nhận xét của Kent: Tôi đang sử dụng bản sao chuẩn đi kèm với MySQL.

Về cơ chế chuyển đổi dự phòng: Tôi đang sử dụng DNSMadeEasy.chức năng chuyển đổi dự phòng của com. Tôi có một kịch bản Perl chạy mỗi 5 phút thông qua cron kiểm tra nếu nhân rộng vẫn đang chạy (và cũng có rất nhiều thứ khác như tải máy chủ, HDD sanity, sử dụng RAM, vv). Trong quá trình hoạt động bình thường, nhanh hơn của hai máy chủ cung cấp tất cả các trang web. Nếu kịch bản phát hiện thấy có sự cố với máy chủ (hoặc nếu máy chủ chỉ đơn giản là xuống), DNSMadeEasy chuyển các mục DNS sao cho máy chủ phụ trở thành chính. Khi máy chủ chính "thực" được sao lưu, MySQL sẽ tự động bắt kịp các thay đổi cơ sở dữ liệu bị thiếu và DNSMadeEasy sẽ tự động chuyển trở lại.

+0

Bạn có đang sử dụng bản sao được tích hợp sẵn hoặc giải pháp của bên thứ ba không? Làm thế nào để bạn phát hiện nếu một máy chủ đi xuống và làm thế nào để bạn quyết định sử dụng máy chủ nào từ ứng dụng của bạn? –

2

Bạn đang cố gắng để tạo ra một bản sao multi-master, đó là một ý tưởng rất xấu, như bất kỳ thay đổi bất kỳ cơ sở dữ liệu nào phải sao chép vào mọi cơ sở dữ liệu khác. Điều này là cực kỳ chậm - trên một máy chủ bạn có thể nhận được vài trăm giao dịch mỗi giây bằng cách sử dụng một vài đĩa nhanh và RAID1 hoặc RAID10. Nó có thể được nhiều hơn nữa nếu bạn có một bộ điều khiển RAID tốt với bộ nhớ đệm được hỗ trợ pin. Nếu bạn thêm chi phí liên lạc với tất cả các máy chủ của mình, bạn sẽ nhận được tối đa hàng chục giao dịch mỗi giây.

Nếu bạn muốn tính sẵn sàng cao, bạn nên sử dụng giải pháp dự phòng ấm, nơi bạn có máy chủ được sao chép nhưng không được sử dụng - khi máy chủ chính chết thay thế. Bạn có thể mất một số giao dịch gần đây nếu máy chủ chính của bạn bị chết.

Bạn cũng có thể thực hiện một bản sao chính, nhiều bản sao không đồng bộ. Mọi thay đổi đối với một cơ sở dữ liệu sẽ phải được thực hiện trên một máy chủ chủ. Nhưng bạn có thể có một số nô lệ, máy chủ chỉ đọc. Dữ liệu trên máy chủ nô lệ này có thể là một số giao dịch phía sau máy chủ để bạn cũng có thể mất một số giao dịch gần đây trong trường hợp máy chủ chết.

PostgreSQL không có cả hai loại sao chép - chế độ chờ ấm bằng cách sử dụng tính năng vận chuyển nhật ký và một bản chính, nhiều lần sử dụng dấu gạch chéo.

Chỉ khi bạn có số lượng ghi rất nhỏ, bạn có thể thực hiện sao chép đồng bộ. Điều này cũng có thể được thiết lập cho PostgreSQL bằng cách sử dụng PgPool-II hoặc Sequoia.

Vui lòng đọc High Availability, Load Balancing, and Replication chương trong tài liệu Postgres để biết thêm.

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