Hoàn tất di chuyển cơ sở dữ liệu PostgreSQL chỉ với 11 giây downtime
(gds.blog.gov.uk)Cách di chuyển cơ sở dữ liệu PostgreSQL
- GOV.UK Notify hiện đang chuyển toàn bộ hạ tầng sang tài khoản AWS riêng do PaaS đang sử dụng bị ngừng cung cấp.
- Bài viết này giải thích cách họ di chuyển cơ sở dữ liệu PostgreSQL với mức downtime tối thiểu.
Di chuyển cơ sở dữ liệu
- Họ đang sử dụng cơ sở dữ liệu AWS RDS PostgreSQL do PaaS cung cấp và cần chuyển nó sang một cơ sở dữ liệu mới trong tài khoản AWS riêng.
- Thách thức chính là thiết lập cơ sở dữ liệu PostgreSQL mới và bảo đảm mọi ứng dụng giao tiếp với cơ sở dữ liệu mới.
Thông tin thêm về cơ sở dữ liệu nguồn
- Cơ sở dữ liệu nguồn có dung lượng khoảng 400GB, chứa 130 triệu hàng, 85 bảng, 185 chỉ mục và 120 khóa ngoại.
- Vào các ngày làm việc, có khoảng 1.000 thao tác chèn hoặc cập nhật mỗi giây, và GOV.UK Notify gửi hàng triệu thông báo quan trọng, cần đúng thời điểm mỗi ngày.
AWS Database Migration Service
- Họ sử dụng AWS Database Migration Service (DMS) để truyền dữ liệu từ cơ sở dữ liệu nguồn sang cơ sở dữ liệu đích.
- DMS dùng tác vụ 'full load' để sao chép toàn bộ dữ liệu đến một thời điểm nhất định, và ở chế độ replication, mọi giao dịch mới trên cơ sở dữ liệu nguồn sẽ được phản ánh sang cơ sở dữ liệu đích.
Quy trình di chuyển cơ sở dữ liệu
Thiết lập instance DMS
- Họ tạo một instance DMS trong tài khoản AWS nguồn và cấp thông tin xác thực PostgreSQL có thể truy cập cả cơ sở dữ liệu nguồn lẫn đích.
Thiết lập cơ sở dữ liệu đích
- Họ tạo một instance RDS đích trong tài khoản AWS riêng và nâng cấp phiên bản PostgreSQL lên 15.
- Dùng
pg_dumpđể dump schema của cơ sở dữ liệu nguồn, rồi áp dụng các khai báo bảng vào cơ sở dữ liệu đích.
Full load
- Sau khi tạo các bảng trên cơ sở dữ liệu đích, họ khởi động tác vụ DMS full load và hoàn tất trong khoảng 6 giờ.
- Sau khi tác vụ full load hoàn tất, họ thêm chỉ mục và các ràng buộc khóa.
Replication
- Sau khi tác vụ full load hoàn tất, họ khởi động tác vụ DMS continuous replication (change data capture) để đồng bộ cơ sở dữ liệu nguồn và cơ sở dữ liệu đích.
Chuẩn bị chuyển lưu lượng
- Họ lên kế hoạch cho quá trình để ứng dụng ngừng giao tiếp với cơ sở dữ liệu nguồn và chuyển sang giao tiếp với cơ sở dữ liệu đích.
Ngắt lưu lượng tới cơ sở dữ liệu nguồn
- Họ dùng script để dừng toàn bộ lưu lượng tới cơ sở dữ liệu nguồn.
Xác nhận replication
- Họ xác nhận rằng cơ sở dữ liệu đích đã được đồng bộ hoàn toàn.
Chuyển lưu lượng mượt mà
- Họ cung cấp vị trí, tên người dùng và mật khẩu mà ứng dụng cần để kết nối cơ sở dữ liệu thông qua biến môi trường, đồng thời chuyển đổi cơ sở dữ liệu nhanh chóng bằng thay đổi DNS.
Những gì đã xảy ra trong ngày di chuyển
- Họ chạy thành công script di chuyển để ứng dụng ngừng giao tiếp với cơ sở dữ liệu nguồn và bắt đầu giao tiếp với cơ sở dữ liệu đích mới.
- Trong quá trình di chuyển, đã xảy ra khoảng 11 giây downtime ngắn.
Bài học rút ra
- Lý do họ dùng DMS là vì công cụ này được hỗ trợ tốt trong GOV.UK PaaS, đồng thời họ cũng có thể nhận hỗ trợ từ AWS.
- Nếu thực hiện di chuyển cơ sở dữ liệu giữa các hệ PostgreSQL trong tương lai, họ sẽ dành thêm thời gian để thử các công cụ khác như pglogical.
Bước tiếp theo trong quá trình chuyển GOV.UK Notify sang AWS
- Sau khi hoàn tất di chuyển cơ sở dữ liệu, họ dự định chuyển ứng dụng sang AWS Elastic Container Service (ECS).
Ý kiến của GN⁺:
- Điều quan trọng nhất trong bài này là nhóm GOV.UK Notify đã di chuyển thành công cơ sở dữ liệu PostgreSQL bằng AWS Database Migration Service (DMS).
- Bài viết cung cấp hướng dẫn hữu ích qua một trường hợp thực tế cho các chuyên gia kỹ thuật đang lên kế hoạch di chuyển cơ sở dữ liệu.
- Bài viết mang lại góc nhìn về cách giảm thiểu downtime và duy trì tính nhất quán dữ liệu trong quá trình di chuyển, có thể hữu ích cho các tổ chức hoặc cá nhân gặp tình huống tương tự.
1 bình luận
Ý kiến Hacker News
Đặt câu hỏi vì sao chính phủ lại sử dụng AWS, và cho rằng việc xây dựng một đám mây cho khu vực công hoặc áp dụng cách tiếp cận on-premise có thể giúp giảm lãng phí tiền thuế về lâu dài.
Chia sẻ kinh nghiệm đã thực hiện thành công việc di chuyển cơ sở dữ liệu bằng AWS RDS Blue/Green Deployments với khoảng 20 giây downtime.
Nhắc đến nhiều cách khác nhau để tạm dừng truy vấn PostgreSQL, và giải thích rằng có thể giảm downtime bằng cách trì hoãn truy vấn cho đến khi quá trình replication bắt kịp.
Mô tả quá trình di chuyển cơ sở dữ liệu PostgreSQL tự lưu trữ từ phiên bản 12 lên 16, và chia sẻ rằng đã xảy ra khoảng 30 phút downtime do các vấn đề ngoài dự kiến.
Đề cập rằng sử dụng AWS Database Migration Service và chấp nhận 11 giây downtime để thay bản ghi DNS là cách để tránh sự phức tạp.
Chỉ ra rằng các truy vấn chạy lâu là kẻ thù của việc di chuyển với downtime thấp, và mô tả sự khó khăn trong việc xử lý các truy vấn như vậy.
Chia sẻ quá trình di chuyển từ PostgreSQL 14 lên 16, và nói rằng lần sau sẽ dùng AWS Blue/Green Deployments để tránh downtime.
Giải thích cách script di chuyển cơ sở dữ liệu dùng bản ghi DNS của AWS Route53 để cập nhật DNS weight và chờ TTL 1 giây hết hạn.
Đùa rằng đang chờ Amazon ra mắt sản phẩm 'government-as-a-service'.
Chia sẻ kinh nghiệm dùng AWS DMS để di chuyển dataset từ AWS RDS MySQL sang RDS PostgreSQL, và không khuyến nghị sử dụng công cụ chuyển đổi schema.