2012-03-05 21 views
6

Hiện tại và sau đó Trình cân bằng tải đàn hồi (ELB) khởi động một trong các máy chủ của tôi để không khả dụng. Đó là tốt - hầu như không bị gián đoạn.Làm thế nào để tạo một cá thể EC2 tự động khởi động lại khi ELB nói rằng nó không khả dụng?

Thông thường, chỉ cần khởi động lại phiên bản thông qua AWS Console sẽ khắc phục được sự cố.

Tôi muốn bản sao EC2 của mình tự động khởi động lại khi không khả dụng.

Cách tốt nhất để làm điều này là gì? (nó xảy ra là một cá thể Windows, nhưng lý tưởng là không quan trọng)

Trả lời

5

Tôi có một phiên bản EC2 giá rẻ và viết một kịch bản đơn giản liệt kê tất cả các máy chủ của tôi trên EC2 và thực hiện GET trên mỗi máy để đảm bảo rằng nó hoạt động đúng. Nếu máy chủ không hoạt động đúng, tập lệnh của tôi sẽ khởi động lại. Tôi có kịch bản chạy mỗi 10 phút một lần.

Sẽ dễ dàng hơn một chút nếu có dịch vụ ở đó để thực hiện việc này cho tôi, nhưng hệ thống dễ cài đặt và phiên bản vi mô rẻ.

+4

điều gì sẽ xảy ra nếu vi phạm của bạn gặp sự cố? –

+1

điều đó đã xảy ra. ngay bây giờ tôi nhận được một cảnh báo Pingdom. tuy nhiên, lý tưởng, tôi nên có các máy chủ sản xuất kiểm tra vi mô và vi kiểm tra sản xuất. thở dài. – pk1557

+1

Bạn có muốn chia sẻ tập lệnh này không? – Mike

3

Nói chung bạn nên có cân bằng tải của bạn được thiết lập với một nhóm nhân rộng tự động. Nhóm nhân rộng tự động sẽ có thông tin về cách cấu hình máy chủ của bạn. Ví dụ, nó sẽ có một tập tin dữ liệu người dùng và có thể cho phép nó được cấu hình mà không cần bất kỳ sự tương tác nào của người dùng. Khi bạn có hai dịch vụ này làm việc cùng nhau, bộ cân bằng tải sẽ kết thúc trường hợp không thành công của bạn và bắt đầu phiên bản mới ngay lập tức.

Thấy bạn đang sử dụng phiên bản cửa sổ, bạn có thể viết kịch bản PowerShell để định cấu hình máy chủ của mình và sử dụng CloudInit.NET để thực thi tập lệnh khi máy chủ khởi động. Phần cuối của kịch bản sẽ cho phép kiểm tra trên cân bằng tải.

+0

Đây là thông tin tốt, nhưng vì nhiều lý do tôi vẫn muốn rằng khởi động lại đơn giản xảy ra, vs một termination-> ví dụ mới. – pk1557

+1

Bạn có thể thử sử dụng lệnh ec2-describe-instance-status mới và viết một kịch bản lệnh sẽ khởi động lại cá thể khi nó xuống. Kịch bản này cũng sẽ cần thêm cá thể trở lại trình cân bằng tải. Kịch bản khá dễ viết.Khi kịch bản hoàn tất, hãy đặt nó trong crontab và nó sẽ hoạt động miễn là máy đang chạy. http://aws.typepad.com/aws/2012/01/ec2-instance-status-checks.html – bwight

6

Sử dụng nhóm tự động tính toán và đặt để giữ 1 phiên bản trực tiếp. Nếu thể hiện của bạn bị treo, nó sẽ sinh ra một hình mới từ hình ảnh thể hiện được xác định trước. Thật dễ dàng và thuận tiện.

+0

Trong khi điều này là đúng, thường khởi động lại cá thể trong câu hỏi khắc phục sự cố và khởi động lại * nhanh hơn nhiều so với khởi chạy một phiên bản mới… –

1

Viết hàm lambda!

Nó rẻ hơn so với chạy một phiên bản vi mô và bạn có thể đặt để chạy ở bất kỳ khoảng thời gian nào bạn muốn. Bạn cũng có thể theo dõi CloudWatch với nó để bạn không cần phải lo lắng về việc kiểm tra sức khỏe của cá thể vi mô của bạn một cách riêng biệt.

Tôi đang sử dụng ElasticBeanstalk, cung cấp điểm cuối describeInstancesHealth. Hoặc bạn có thể sử dụng điểm cuối describeInstanceStatus của ec2.

Sau đó, nếu bạn phát hiện trường hợp xấu, số rebootInstances của ec2 cho phép bạn khởi động lại một hoặc nhiều phiên bản.

2

Đồng ý với @agmin rằng hàm lambda là một cách tuyệt vời để thực hiện việc này. Bạn có thể định cấu hình báo thức CloudWatch để kích hoạt chức năng lambda thông qua chủ đề SNS.

Tôi thực hiện việc triển khai này cùng nhau và dường như hoạt động tốt. Nó có thể được thiết lập và cấu hình hoàn toàn thông qua dòng lệnh:

https://github.com/jcowley/elb-instance-reboot

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