Bây giờ này được một chút bối rối vì bạn nói:
Tôi muốn bắt đầu myapp_api trên 3 nút, tôi muốn toàn bộ ứng dụng (myapp_api + myapp) để được làm việc chỉ một nút cùng một lúc .
và bạn thêm:
Các ứng dụng chính (myapp_api) hoạt động như mong đợi: chỉ một nút với failover và thâu tóm. Nhưng đối với một số lý do phụ thuộc myapp luôn luôn bắt đầu ở mỗi nút.
Trong đoạn đầu tiên bạn nói myapp_api
nên chạy ở mọi nơi, trên báo giá thứ hai bạn nói nó hoạt động như dự định bằng cách khởi động trên một nút tại một thời điểm.
Tôi sẽ giả định ở đây rằng bạn muốn toàn bộ thiết lập là chuyển đổi dự phòng, không chỉ ứng dụng cấp cao nhất và tôi vừa bị nhầm lẫn trong đoạn đầu tiên.
Các tập tin cấu hình bạn sử dụng cho thấy những gì xảy ra:
[{kernel,
[{distributed, [{myapp_api,
1000,
['[email protected]', {'[email protected]', '[email protected]'}]}]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
Các bit quan trọng là myapp_api
có các nút ['[email protected]', {'[email protected]', '[email protected]'}]
xác định. Thứ tự này có nghĩa là nó chạy trên [email protected]
ở mức ưu tiên hàng đầu và sau đó trên các nút khác có mức độ ưu tiên bằng nhau nếu có chuyển đổi dự phòng.
Vấn đề là không có phụ thuộc nào được phân phối theo cùng một cách, và do đó có thể được dự kiến sẽ chạy ở mọi nơi.
Bạn chỉ cần mở rộng trên tệp cấu hình đó để nó hoạt động. Ở đây tôi đã thực hiện nó và reindented nó để hiển thị cấu trúc của nó tốt hơn:
[{kernel,
[{distributed, [
{myapp_api, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
{myapp, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
Tôi chưa thử nghiệm trực tiếp, nhưng tôi khá chắc chắn điều này sẽ làm việc.
Nếu những gì bạn muốn là myapp_api
được ở khắp mọi nơi nhưng đối với myapp
để chạy ở một nơi, bạn có thể sử dụng global registration, đặt tên cho quá trình công phải đối mặt với myapp
's, có myapp_api
gọi này. myapp_api
sau đó sẽ có thể giao thông đường đến bất cứ nơi nào myapp
được khi được hỗ trợ với các cấu hình sau:
[{kernel,
[{distributed, [
{myapp, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
(Xem cách myapp
là ứng dụng chỉ nhận được một hồ sơ phân phối các ứng dụng khác sẽ nhận được để chạy trên tất cả các nút?)
Vâng, cảm ơn, bạn đã làm đúng, tôi muốn toàn bộ thiết lập là chuyển đổi dự phòng. Và có, thêm myapp vào cấu hình phân tán làm việc là tốt. Thật kỳ lạ đối với tôi rằng tôi phải làm điều này bằng tay. – user2461860
Nó chỉ lạ nếu bạn có các thiết lập đơn giản. Bạn có thể có các cụm không đồng nhất trong đó ứng dụng A và C cần chạy trên các nút 1,2,3,4 và sau đó là ứng dụng B chỉ có thể chạy trên nút 4 và 5 vì lý do phần cứng hoặc hệ điều hành. Với các chiến lược khác nhau cho các ứng dụng khác nhau, một cách tiếp cận linh hoạt hơn như phương pháp trên có ý nghĩa. –