5

Chúng tôi có 2 trường hợp đằng sau bộ cân bằng tải chạy cùng ứng dụng đường ray với hành khách. Khi chúng tôi triển khai, thời gian khởi động của máy chủ sẽ khiến yêu cầu hết thời gian chờ. Do đó, chúng tôi có một tập lệnh cập nhật từng máy chủ web riêng lẻ bằng cách lấy một máy chủ ra khỏi LB, triển khai với giới hạn, kiểm tra tải trang động, đưa nó trở lại LB.Làm thế nào để bạn thực hiện triển khai cán với capistrano?

Làm thế nào chúng ta có thể nhận được capistrano để làm điều này cho chúng tôi với một lệnh? Tôi đã có thể thiết lập nó để triển khai cho tất cả các trường hợp đồng thời nhưng tất cả chúng đều khởi động lại cùng một lúc và khiến trang web không khả dụng trong 20 giây.

Tôi thiếu gì ở đây? Có vẻ như đây là một mô hình chung.

+0

Bạn có thể thêm các chi tiết khác trong ghi chú "tất cả khởi động lại cùng một lúc" không? Chính xác bạn có ý gì ở đây? –

Trả lời

0

Nó không thực sự đơn giản để triển khai tuần tự hóa trong capistrano, thích song song tất cả các hoạt động của nó giữa các máy chủ. Để giải quyết vấn đề này, có vẻ như bạn có một số máy chủ và muốn thực hiện từng máy chủ ngoại tuyến để cập nhật triển khai.

Bí quyết là để ghi đè lên các nhiệm vụ deploy:create_symlink trong cấu hình triển khai của bạn:

def perform_task_offline options 
    sudo "take_this_server_offline", options 
    yield 
    sudo "put_this_server_online", options 
end 

def create_symlink_task options 
    # does what your existing deploy:create_symlink did, something like: 
    run "rm -f /web/current && ln -s #{release_path} /web/current", options 
end 

namespace :deploy do 

    task :create_symlink, {once: true, except: {no_release: true}} do 
    deployed_servers = Array.new 

    roles[:app].servers.each do |current_server| 
     options = {hosts: current_server} 
     deployed_servers.push current_server 
     perform_task_offline(options) { create_symlink_task options } 
    end 
    end 
end 

Trong trường hợp này perform_task_offline bao gồm các lệnh thực thi trên máy chủ theo quy định tại options đó loại bỏ nó ra khỏi cân bằng tải trong khi nó yield s các khối bao gồm create_symlink_task, tạo liên kết tượng trưng triển khai.

Sau đó, bạn có thể chạy lệnh cap tiêu chuẩn để triển khai và bạn sẽ thấy các máy chủ liên tục chuyển sang ngoại tuyến, tạo liên kết tượng trưng "hiện tại", sau đó quay lại.

Lưu ý rằng mã trên theo dõi các máy chủ đã được triển khai thành công với deployed_servers. Nếu bạn muốn có thể khôi phục triển khai không hoạt động không thành công (có nghĩa là sự cố xảy ra trong khi tự triển khai) trên các máy chủ đã được triển khai trước đó, bạn sẽ cần một vòng lặp tương tự bên trong khối on_rollback do, nhưng chỉ trên số deployed_servers.

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