Cách chạy di chuyển cơ sở dữ liệu trong một nhóm tự động thu nhỏ


8

Chúng tôi sắp chuyển từ một kiến ​​trúc nguyên khối sang một nhóm tự động thu nhỏ và tôi không chắc mình nên chạy di chuyển cơ sở dữ liệu của mình như thế nào (Laravel).

Tôi nghĩ rằng một kịch bản sẽ chạy khi một hộp mới xuất hiện trực tuyến, điều này sẽ git kéo mã mới nhất của tôi xuống. Kịch bản này cũng nên thực hiện di chuyển cơ sở dữ liệu của tôi? Tôi không chắc làm thế nào tôi có thể làm cho nó chạy trên chỉ một hộp?


Tôi giả sử bằng cách chuyển từ nguyên khối sang tự động thu nhỏ, bạn đang đề cập đến cơ sở dữ liệu của bạn một cách cụ thể. Bạn đang sử dụng AWS RDS? Nếu không, bạn đã nhìn vào nó? aws.amazon.com/bloss/database/ cấp
PrestonM

1
Có, chúng tôi đang sử dụng RDS. Không tôi đang mở rộng và tải cân bằng các trường hợp EC2 nơi ứng dụng chạy.
Mick

1
Một giải pháp là sử dụng một cái gì đó như flyway hoặc liquidibase có thể chạy các cập nhật idempotent trên DB, theo cách này, mỗi nút bắt đầu có thể cố gắng cập nhật DB và không làm gì nếu việc di chuyển đã xảy ra.
Tensibai

Cảnh báo công bằng, Flyway đánh dấu việc di chuyển chỉ hoàn thành sau khi chúng được chạy. nếu bạn kích hoạt Flyway đồng thời từ một số nút, rất có thể họ sẽ cố gắng thực hiện cùng một lần di chuyển, điều này có thể gây ra sự cố.
maplebird

Câu trả lời:


1

Làm thế nào bạn đang làm triển khai của bạn? Nuke + xây dựng lại ASG (cho dù một nút tại một thời điểm, hoặc bằng cách thay thế toàn bộ nhóm cùng một lúc) hoặc bạn có một tập lệnh sắp xếp lại tất cả các nút hoạt động của mình không?

Và ngoài ra, làm thế nào bạn kích hoạt triển khai của bạn?

Lý tưởng nhất là bạn muốn được chạy / kích hoạt triển khai từ một số dạng máy chủ CI như Tre hoặc Jenkins. Nếu bạn đang làm điều này, bạn có thể chạy di chuyển DB của mình từ máy chủ xây dựng (hoặc các phiên bản tác nhân xây dựng thành phần của nó).

Điều này sẽ cho phép bạn kiểm soát tốt hơn môi trường của mình, ví dụ như bạn có thể khôi phục DB từ ảnh chụp nhanh nếu việc triển khai thất bại.


Hiện tại chúng tôi chỉ cần SSH vào hộp sản xuất và kéo mã. Trong thực tế tôi nghĩ rằng hầu hết thời gian chúng ta sẽ chỉ có một nút. Tôi đã nghĩ rằng chúng tôi sẽ sử dụng Code Deployment. Chúng tôi chưa có nhiều kinh nghiệm về AWS / Devops và chỉ đang cố gắng tìm một cách đơn giản để bắt đầu với cân bằng tải và ASG.
Mick

AWS CodeDeploy là tuyệt vời và mở rộng quy mô lâu dài khi bạn lớn hơn và bắt đầu sử dụng nhiều máy chủ hơn. Nếu hiện tại, bạn đang SSH thủ công để triển khai, bạn luôn có thể có một tập lệnh riêng để chạy di chuyển DB. Tức là bạn sẽ chạy tập lệnh triển khai bình thường thông qua CodeDeploy và di chuyển cơ sở dữ liệu theo cách thủ công khỏi một nút. Nếu bạn không xây dựng máy chủ CI có thể chạy Liquibase bất cứ lúc nào, bạn cũng có thể xem xét các phần mềm khác như Datical: aws.amazon.com/bloss/devops/ Lỗi
maplebird

1

Nhiều trạng thái di chuyển lưu trữ của orm trong chính DB, nhưng nếu bạn thực hiện 'thủ công' thì cũng không khó để tự xây dựng. Chỉ cần có một bảng "di chuyển" nơi lưu trữ tất cả các di chuyển đã thực hiện được lưu trữ. Theo cách đó, khi một nút trực tuyến, nó có thể chỉ cần kiểm tra bảng đó dựa vào thư mục "di chuyển" cục bộ của nó và thực hiện những gì còn thiếu - điều này sẽ chỉ khiến nút đầu tiên của bạn sau khi một phiên bản bị lỗi để thực hiện di chuyển.

Như một lưu ý phụ: CloudFoundry giải quyết điều này bằng cách cho phép từng phiên bản (nút) trong thang đo của bạn được đặt để truy cập vào định danh của nó. Cái đầu tiên nhận được 0, 1 tiếp theo, v.v ... Bằng cách đó, một nút biết nếu đó là nút đầu tiên và có thể thực hiện di chuyển. Tôi không nghĩ ASG có cùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.