2010-11-05 33 views
16

Tôi đang sử dụng Capistrano để quản lý một ứng dụng web Java đang chạy trên một số máy chủ cân bằng tải. Một số tác vụ (chẳng hạn như thay đổi cấu hình) yêu cầu khởi động lại máy chủ hoặc triển khai lại ứng dụng, trong đó máy chủ không phản hồi.Capistrano có thể thực hiện các tác vụ trên máy chủ liên tục không?

Nếu Capistrano có thể thực hiện các tác vụ này trên máy chủ liên tục, so với đồng thời, chỉ có một máy trong trang trại sẽ giảm xuống một lúc và trình cân bằng tải sẽ đảm bảo không có yêu cầu nào bị mất. Tuy nhiên, từ những gì tôi có thể nói, Capistrano chỉ thực hiện các thao tác trên các máy chủ đồng thời.

Để rõ ràng, tôi không cố gắng thực hiện các tác vụ khác nhau liên tục. Tôi đang cố gắng thực hiện nhiệm vụ tương tự trên các máy chủ khác nhau liên tục.

Tôi có thể nghĩ ra một số cách hack này trong cấu hình của mình, nhưng có vẻ như có một lá cờ tôi có thể đặt ở đâu đó.

Mọi người đều biết cách thực hiện việc này?

Trả lời

19

tôi sử dụng để khởi động lại máy chủ của tôi trong loạt, thay vì song song:

task :my_task, :roles => :web do 
    find_servers_for_task(current_task).each do |server| 
    run "[task command here]", :hosts => server.host 
    end 
end 
+0

Điều này làm việc hoàn hảo. Cảm ơn bạn. – devinfoley

+0

Cảm ơn rất nhiều! Nó hoạt động hoàn hảo. – raskhadafi

+2

tuyệt vời! btw, có lẽ nắp nên thêm một chiến lược để thực hiện nhiệm vụ theo thứ tự. – DiveInto

-1

Xin chào, nó không có khả năng tạo đường may bằng giọng capistrano một cách dễ dàng, tất nhiên một số cách tiếp cận có thể được thực hiện.

1) bạn có thể chỉ định từng máy chủ trong vai trò khác nhau và thêm nhiệm vụ riêng biệt chịu trách nhiệm luân phiên vai trò và gọi nhiệm vụ thực sự yêu cầu tác vụ.

2) bạn có thể viết kịch bản riêng biệt làm xoay như trên nhưng sử dụng tên máy chủ khác nhau thay vì vai trò

3) nó cũng có thể để lọc hostname/máy chủ trong capistrano sử dụng biến môi trường, có thể bạn có thể sử dụng nó trong trong thuật toán xoay.

Thật không may là không có tài liệu tốt cho capistrano cho tôi đọc nguồn capistrano hoạt động khá tốt nhưng cũng phải mất rất nhiều thời gian.

+0

Cảm ơn thông tin.Không phải là câu trả lời tôi mong đợi, nhưng sự thật đau đớn. Tôi có thể thử ngã ba và thêm tính năng này. – devinfoley

16

Bạn có thể đặt :max_hosts cho nhiệm vụ để hạn chế xử lý song song của nó:

:max_hosts - xác định số lượng tối đa của các máy chủ nên được chọn tại một thời điểm. Nếu giá trị này nhỏ hơn số lượng máy chủ được chọn để chạy, thì máy chủ sẽ được chạy trong nhóm các max_host. Giá trị mặc định là 0, cho biết không có giới hạn lưu trữ tối đa. Xin lưu ý rằng điều này không giới hạn số lượng kênh SSH có thể mở, chỉ số lượng máy chủ mà trên đó sẽ được gọi.

Ví dụ:

desc "Say hello, one at a time" 
task :hello, :roles => :app, :max_hosts => 1 do 
    run "echo serial hello ; sleep 0 ; echo serial hello DONE" 
    # Note that task parameters do NOT get automatically passed on to 
    # other tasks, i.e. a call to "deploy:restart" would be 
    # unaffected by :max_hosts set here. Example: 
    self.send(:normal_hello) 
end 

desc "Say hello, everybody" 
task :normal_hello, :roles => :app do 
    run "echo 'normal (parallel) hello' ; sleep 10 ; echo normal hello DONE" 
end 
4

Capistrano 3 sử dụng SSHKit cung cấp để gửi liên tiếp các lệnh để nhiều máy chủ. Có một ví dụ trên SSHKit đọc tôi:

https://github.com/capistrano/sshkit

Note, Capistrano 3 là khá một sự thay đổi từ Capistrano 2.x.

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