Sao chép chính chủ không tốt như bạn nghĩ, tương tự với proxy vòng tròn và các giải pháp 'dễ dàng' tương tự. Nếu Bạn cam kết dữ liệu va chạm để phân tách máy chủ đủ nhanh (nhanh hơn độ trễ giữa các máy chủ, mà trên các máy chủ sản xuất có thể lên đến một giây *
), cả hai sẽ chấp nhận dữ liệu. Nếu bạn có một máy chủ đấu giá, bạn chỉ cần bán cùng một chiếc xe hai lần . Ai đã mua nó? Nó phụ thuộc vào DB mà bạn sẽ yêu cầu!
Ứng dụng phải nhận thức được rằng thực sự có 2 cơ sở dữ liệu ngoài đó và nó phải biết cả hai địa chỉ IP của chúng. Nếu bạn muốn "bán", bạn nên
DB_number = `auction_number` % `number_of_databases`
( %
dành cho modulo
)
... và cam kết nó với cơ sở dữ liệu DB_number. Nếu bạn gặp lỗi kết nối, thì có lẽ phải làm điều đó với một lỗi khác (nhưng trong trường hợp máy chủ đấu giá, tôi chỉ hiển thị lỗi).
Ngoài ra, các địa chỉ IP phải là wackamole -d giữa cả hai máy chủ. Trong trường hợp thảm họa, khi một máy chủ cơ sở dữ liệu ngừng hoạt động trong vài giờ trong thời gian sử dụng cao điểm, Bạn sẽ thấy rằng ứng dụng sẽ cố gắng kết nối với máy chủ vắng mặt và treo cho đến khi TIME, 3 giây. Đột nhiên một nửa các truy vấn của bạn chạy lâu hơn 3 giây (và cuối cùng tất cả chúng đều đi đến cùng một cơ sở dữ liệu - điều này không làm cho nó chạy nhanh hơn trước thảm họa). Điều này không làm cho httpd của bạn hài lòng, vì nó có thể có một nhóm kết nối hạn chế của các luồng xử lý yêu cầu đồng thời ...
*
độ trễ sao chép trên các máy chủ sản xuất có thể lên đến một giây - tôi đã thử nghiệm điều này trong một vị trí từ xa và trong trung tâm dữ liệu của chúng tôi và trong khoảng 99% thời gian là 0, nhưng đôi khi mysql hiển thị 1 giây. Trên lưu lượng truy cập lớn, tôi đã có nhiều xung đột do ứng dụng khách thực hiện hai yêu cầu dẫn đến hai truy vấn, chèn và chọn. Đối với một số trường hợp, hàng chỉ không có ở đó chưa , vì vậy Chúng tôi sử dụng hash của userID và nó cố định vấn đề
Tôi hy vọng bạn sẽ học hỏi từ những sai lầm của tôi ;-)