Chuẩn bị cho việc khắc phục thảm họa nhanh hơn: Triển khai cơ sở dữ liệu toàn cầu của Amazon Aurora với Terraform ( Phần 1 )

Các ứng dụng có phạm vi hoạt động toàn cầu cần phải có khả năng chịu được các lỗi cơ sở hạ tầng ở các khu vực có phạm vi rộng. Nếu các ứng dụng mà bạn cho phép sử dụng rộng rãi không khả dụng trong một thời gian dài, điều đó dẫn đến việc công ty của bạn có thể bị giảm doanh thu, độ hài lòng từ người dùng, lượng khách hàng càng lúc càng giảm và chắc chắn doanh nghiệp sẽ mất lợi thế cạnh tranh.

Ngày nay, Amazon Aurora Global Database có sẵn cho các ứng dụng được phổ biến trên toàn cầu với một cơ sở dữ liệu Aurora duy nhất và được trải dài ở nhiều AWS Regions. Cơ sở dữ liệu toàn cầu của Aurora (Aurora global database) sao chép dữ liệu của bạn mà không ảnh hưởng đến hiệu suất cơ sở dữ liệu, chúng cho phép đọc cục bộ với độ trễ thấp ở từng Region và cung cấp khả năng khôi phục khi gặp thảm họa như mất điện trên toàn Region và rút ngắn thời gian khôi phục dịch vụ (RTO –  recovery time objective) và thời gian mà dữ liệu bị mất (RPO –  recovery point objective).

Thông thường, các doanh nghiệp phải nỗ lực rất nhiều và phải tốn rất nhiều chi phí đầu tư nhằm nâng cao kỹ thuật để có thể thiết kế các ứng dụng có thể hoạt động liên tục và có khả năng phục hồi hệ thống nhanh chóng nếu các sự cố xảy ra.

Tuy nhiên, việc cung cấp và quản lý cơ sở hạ tầng multi-Region AWS theo cách thủ công  tốn rất nhiều thời gian và dễ xảy ra lỗi. Bạn cần phải thiết lập Region phụ giống với Region chính. Các Regions phải có cùng cấu trúc liên kết mạng, IAM roles, tham số cơ sở dữ liệu, giám sát, cấu hình sao lưu và tích hợp với các dịch vụ AWS khác. Sau khi thực hiện tất cả những điều này, bạn còn có thể triển khai Region phụ nhằm đảm nhận khối lượng công việc đọc và ghi nếu có lỗi trong Region chính. Tuy nhiên, bất kỳ lỗi nào trong quá trình thiết lập thủ công có thể dẫn đến các vấn đề về hiệu suất, sự không tương thích về ứng dụng và các hành vi bất thường khác khi bạn chuyển từ Region chính của mình.

Trong bài này, tôi sẽ hướng dẫn các bạn triển khai cơ sở dữ liệu toàn cầu Aurora tự động bằng cách sử dụng mô-đun Terraform Amazon Aurora. * Mô-đun này được xuất bản bởi nhóm Cơ sở hạ tầng và tự động hóa AWS, nhóm phát triển các triển khai tham chiếu tự động được gọi là AWS Quick Starts. Mô-đun Terraform Amazon Aurora cung cấp và quản lý cơ sở dữ liệu toàn cầu Aurora trên nhiều AWS Regions với khả năng tái sử dụng tốt.

Đối với những bạn đã có các cụm cơ sở dữ liệu toàn cầu Aurora được triển khai theo cách thủ công, chúng ta cũng sẽ thảo luận về cách chuyển việc quản lý cụm của bạn sang mô-đun Terraform này. Khi bạn thực hiện quá trình chuyển đổi này, các Regions chính và phụ sẽ được đồng bộ hóa nếu chúng chưa được đồng bộ trước đó, sau đó chúng sẽ được tự động đồng bộ hóa khi bạn thực hiện các thay đổi trong tương lai.

Trong một bài đăng sắp tới, tôi sẽ hướng dẫn cách quản lý cơ sở dữ liệu toàn cầu Aurora sau sự kiện chuyển đổi (failover event) dự phòng bằng cách sử dụng mô-đun Terraform này.

** Mô-đun Terraform Amazon Aurora ở giai đoạn alpha và sẽ trải qua những thay đổi đáng kể. Theo bài viết này, mô-đun này chủ yếu sử dụng AWS provider. Dự kiến sẽ thay đổi để sử dụng Terraform AWS Cloud Control Provider.

Tóm lược về bài blog này
Thời gian đọc10 phút
Thời gian hoàn thành60 phút (kể cả việc triển khai)
Chi phí hoàn thành2 USD
Trình độ học tậpNâng cao (300)
Các dịch vụ AWSAmazon Aurora Global DatabaseAmazon CloudWatchAWS Key Management Service (AWS KMS)

Tổng quan về kiến trúc

Sơ đồ sau đây sẽ cho thấy kiến trúc mà bạn sẽ thiết lập trong hướng dẫn này.

Mô-đun Terraform Amazon Aurora cung cấp và xác định cấu hình cơ sở hạ tầng mạng cũng như tất cả các thành phần được hiển thị trong sơ đồ, bao gồm các phần sau:

  • Một kiến trúc có tính khả dụng cao cần trải dài trên hai AWS Regions và trong mỗi Region sẽ hoạt động trên ba Availability Zones(AZ).
  • Trong mỗi Region, một virtual private cloud (VPC) được định cấu hình với các mạng con công khai và riêng tư, theo các phương pháp hay nhất của AWS, để cung cấp cho bạn mạng ảo của riêng bạn trên AWS.
  • Trong các mạng con công khai, các cổng dịch địa chỉ mạng (network address translation – NAT) được quản lý để cho phép truy cập internet ra ngoài đối với các tài nguyên trong mạng con riêng.
  • Trong các mạng con riêng tư, một cụm cơ sở dữ liệu toàn cầu Aurora (DB) trong một nhóm bảo mật bao gồm cả hai AWS Region. Cụm Aurora DB chính được thiết lập với một phiên bản DB chính và một bản sao Aurora trong AWS Region chính. Cụm Aurora DB thứ cấp được thiết lập với một bản sao Aurora trong AWS Region thứ cấp.
  • Các khóa do khách hàng quản lý được tạo bằng dịch vụ quản lý AWS Key (AWS Key Management Service – AWS KMS) để cho phép mã hóa ở trạng thái nghỉ cho nhóm Aurora DB.
  • Amazon CloudWatch sẽ cảnh báo nhằm để theo dõi các chỉ số chính của CloudWatch, chẳng hạn như CPUUtilization CPU Utilization,  FreeableMemory Freeable Memory, FreeLocalStorage  Free LocalStorage và gửi thông báo bằng Amazon Simple Notification Service (Amazon SNS).
  • Thông báo sự kiện của Amazon Relational Database Service (Amazon RDS) cho cụm Aurora DB nhằm để gửi thông báo bằng Amazon SNS khi một sự kiện quan trọng như chuyển đổi dự phòng hoặc lỗi được tạo ra.
  • Các nhóm tham số cụm Custom Aurora DB và các nhóm tham số DB cùng với một số cấu hình khác thường được sử dụng.

Mô-đun Terraform Amazon Aurora cung cấp hai tùy chọn để giúp triển khai là:

  • Triển khai cơ sở dữ liệu toàn cầu Aurora vào các VPC mới. Tùy chọn này xây dựng một môi trường AWS mới bao gồm các VPC, mạng con, NAT gateway, nhóm bảo mật và các thành phần cơ sở hạ tầng khác trên hai AWS Regions. Sau đó, nó triển khai cơ sở dữ liệu toàn cầu Aurora trong các VPC mới này.
  • Triển khai một cơ sở dữ liệu toàn cầu của Aurora vào các VPC hiện có. Tùy chọn này triển khai cơ sở dữ liệu toàn cầu Aurora trong cơ sở hạ tầng AWS hiện có của bạn trên hai Regions. Để sử dụng tùy chọn này, VPC của bạn cần phải có ít nhất ba mạng con riêng trong các Availability Zones khác nhau. Bạn cung cấp các ID mạng con riêng cho các AWS Regions chính và phụ của mình trực tiếp cho mô-đun con Aurora Terraform của bạn.

Blog này hướng dẫn quy trình triển khai cơ sở dữ liệu toàn cầu Aurora vào các VPC mới. Một số tài nguyên AWS được triển khai bởi mô-đun phải chịu chi phí nhưng chúng sẽ được tận dụng tối đa.

Prerequisites (Điều kiện tiên quyết)

Blog này giả định rằng rằng bạn đã quen thuộc với Terraform, GitHub, và Git commands.

Đối với hướng dẫn này, bạn cần chuẩn bị :

  • Một tài khoản AWS. Nếu bạn chưa có tài khoản, hãy đăng ký một tài khoản tại  http://aws.amazon.com.
  • Một tài khoản Terraform Cloud. Nếu bạn chưa có tài khoản, hãy đăng ký cấp miễn phí tại https://www.terraform.io/cloud.

One-time setup (Thiết lập một lần)

Không gian làm việc Terraform Cloud chứa mọi thứ mà Terraform cần để quản lý một tập hợp cơ sở hạ tầng nhất định, bao gồm cấu hình, tệp trạng thái, giá trị biến, thông tin xác thực và bí mật. Các không gian làm việc riêng biệt trong Terraform Cloud có chức năng như các thư mục làm việc riêng biệt khi làm việc với Terraform cục bộ.

Thực hiện thiết lập một lần (one-step setup) sau để thiết lập không gian làm việc Terraform để sau này bạn có thể triển khai mô-đun Terraform Amazon Aurora.

  1. Tạo Terraform organization, là không gian chung để các teams cộng tác trong Terraform Cloud.
  2. Cài đặt Terraform (Install Terraform) trên máy trạm của bạn.
  3. Định cấu hình quyền truy cập Terraform Cloud API (Configure Terraform Cloud API access) trên máy trạm của bạn bằng cách chạy terraform login  trong cửa sổ terminal.
  4. Cài đặt (Install) và định cấu hình (configure) Giao diện dòng lệnh AWS (AWS Command Line Interface – AWS CLI ) trên máy trạm của bạn.
  5. Cài đặt git (Install git) trên máy trạm của bạn.
  6. Sao chép kho lưu trữ aws-ia/terraform-aws-rds-aurora vào máy trạm của bạn bằng cách chạy lệnh sau trong cửa sổ terminal của bạn.

git clone https://github.com/aws-ia/terraform-aws-rds-aurora.git

Lệnh này tạo một thư mục có tên terraform-aws-rds-aurora trong thư mục hiện tại của bạn, được gọi là  <TF_STAGING_DIR> trong Blog này.

  1. Thiết lập không gian làm việc Terraform bằng cách chạy các lệnh sau trong cửa sổ terminal của bạn.
cd <TF_STAGING_DIR>/terraform-aws-rds-aurora/setup_workspace

terraform init

terraform apply

Hướng dẫn: Triển khai cơ sở dữ liệu toàn cầu Aurora bằng Terraform

  1. Đầu tiên hãy quyết định công cụ Aurora DB nào bạn muốn sử dụng và trong AWS Regions nào mà có thể hỗ trợ cho tính năng này khác nhau tùy theo phiên bản và công cụ cơ sở dữ liệu Aurora. Để biết danh sách đầy đủ các tính năng được hỗ trợ, hãy xem cơ sở dữ liệu toàn cầu của Aurora (Aurora global databases).
  2. Mở tệp <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy/variables.tf và xem lại các biến Terraform và giá trị mặc định của chúng. Theo mặc định, mô-đun Terraform Amazon Aurora triển khai một cụm được cung cấp tương thích với Aurora PostgreSQL không được mã hóa trong một Regionduy nhất.
  3. Ghi đè các giá trị mặc định bằng cách tạo tệp có phần mở rộng .auto.tfvars trong thư mục <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy/ và chỉ định các giá trị biến. Đối với bài Blog này, bạn sẽ tạo tệp <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy/terraform.auto.tfvars như sau:
$ cat <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy/terraform.auto.tfvars

#set setup_globaldb to true if you want to create an Aurora global DB cluster spread across 2 AWS Regions

setup_globaldb = true

# Set up aws_rds_cluster.primary Terraform resource as secondary Aurora cluster after an unplanned Aurora global DB failover (detach and promote of the secondary Region)

# If you are setting up a brand new Aurora global cluster, set the setup_as_secondary variable to false

setup_as_secondary = false

#set storage_encrypted to true to enable Aurora storage encryption using AWS KMS

storage_encrypted = true

# Number of instances to set up for primary Aurora cluster

primary_instance_count = 2

Các biến này tạo ra một cơ sở dữ liệu toàn cầu tương thích với Aurora PostgreSQL được mã hóa với hai bản sao ở Vùng chính (theo mặc định là us-East-2) và một trường hợp ở Vùng thứ cấp (us-west-2 theo mặc định). Nếu bạn muốn thiết lập hai bản sao trong Vùng phụ tương tự như Vùng chính, bạn có thể nối thêm secondary_instance_count = 2 vào tệp của mình.

  1. Tạo VPC và triển khai mô-đun Terraform Amazon Aurora bằng cách chạy các lệnh sau trong cửa sổ terminal của bạn:
cd <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy

terraform init

terraform apply --auto-approve

Mất khoảng 35 phút để Terraform tạo tất cả các tài nguyên AWS trên hai AWS Regions. Sau khi lệnh hoàn thành, bạn sẽ thấy kết quả tương tự như sau:

  1. Đăng nhập vào Bảng điều khiển quản lý AWS và mở bảng điều khiển Amazon RDS (Amazon RDS console). Chọn Databases trong thanh điều hướng bên trái. Xác minh rằng cơ sở dữ liệu toàn cầu của Aurora được thiết lập với cụm chính chạy ở us-East-2 và cụm thứ cấp chạy ở us-west-2, như được hiển thị dưới đây:

Chuyển việc quản lý cơ sở dữ liệu toàn cầu Aurora sang Terraform

Nếu bạn đã có một cụm cơ sở dữ liệu toàn cầu Aurora được triển khai theo cách thủ công, thì bạn có thể chuyển việc quản lý cụm của mình sang Terraform. Khi bạn thực hiện quá trình chuyển đổi này, bạn có thể kiểm tra xem Region phụ có được thiết lập giống hệt với Region chính hay không và bạn cũng có thể khắc phục bất kỳ xung đột nào bằng cách đẩy các bản cập nhật và chúng bắt buộc phải có để làm cho các Region giống hệt nhau. Sau đó, khi bạn thực hiện các thay đổi trong tương lai, Terraform sẽ tự động triển khai các thay đổi của bạn một cách nhất quán trên các AWS Regions để giữ cho các Regions được đồng bộ hóa.

Bạn có hai tùy chọn để chuyển quản lý cơ sở dữ liệu toàn cầu Aurora của mình sang Terraform: thực hiện từ từ hoặc tất cả cùng một lúc.

Tùy chọn 1: Chuyển đổi chậm

Với chuyển đổi chậm, bạn có thể quản lý cơ sở dữ liệu toàn cầu Aurora của mình bằng Terraform mà không phải dừng hoạt động cho quá trình chuyển đổi.

Mô-đun Terraform Amazon Aurora tạo ra một số tài nguyên AWS. Thực hiện theo quy trình nhập tài nguyên Terraform (importing Terraform resources) để nhập tài nguyên AWS của bạn vào Terraform state cho tất cả các cấu hình tài nguyên được chỉ định trong mô-đun Terraform Amazon Aurora.

Tùy chọn 2: Chuyển đổi tất cả cùng một lúc

  1. Tạo một maintenance window ( thời gian bảo trì ) cho ứng dụng của bạn, tắt tất cả các writes vào cơ sở dữ liệu toàn cầu Aurora của bạn và tạo một snapshot với cụm DB (create a DB cluster snapshot)
  2. Triển khai cụm cơ sở dữ liệu toàn cầu Aurora mới bằng cách sử dụng mô-đun Terraform Amazon Aurora. Chỉ định tên snapshot hoặc ARN bằng cách sử dụng biến snapshot_identifier Terraform. Thao tác này khôi phục snapshot cụm Aurora của bạn trong khi tạo cụm cơ sở dữ liệu toàn cầu Aurora mới.
  3. Trỏ ứng dụng của bạn đến cụm mới này.
  4. (Tùy chọn) Xóa cụm cơ sở dữ liệu toàn cầu Aurora cũ.

Cleanup ( Dọn dẹp tài nguyên )

Một số tài nguyên AWS được tạo bởi mô-đun Terraform Amazon Aurora sẽ phát sinh chi phí miễn là chúng còn được sử dụng. Khi bạn không cần tài nguyên nữa, hãy dọn dẹp chúng như sau.

  1. Xóa cụm cơ sở dữ liệu toàn cầu Aurora cùng với các VPC bằng cách chạy các lệnh sau trong cửa sổ terminal của bạn:
cd <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy

terraform destroy --auto-approve

Việc xóa tài nguyên AWS KMS không thành công sẽ gặp lỗi sau:

 cửa sổ terminal của

Bạn gặp lỗi này vì chính sách vòng đời prevent_destroy được chỉ định cho các tài nguyên AWS KMS này trong tệp cấu hình Aurora Terraform. Tất cả các bản sao lưu cho một cụm Aurora được mã hóa cũng được mã hóa bằng cùng một AWS KMS key. Vì vậy, trong môi trường Production, hãy giữ lại các AWS KMS key này ngay cả sau khi xóa cụm DB. Sau đó, bạn có thể khôi phục các bản sao lưu đã mã hóa nếu cần trong tương lai.

  1. Xóa các tài nguyên AWS KMS này ở Terraform state để làm cho Terraform “quên” các đối tượng này. Thực hiện việc này bằng cách chạy các lệnh sau trong cửa sổ terminal của bạn.
cd <TF_STAGING_DIR>/terraform-aws-rds-aurora/deploy

for i in `terraform state list | grep kms`

do

terraform state rm $i

done

  1. Chạy lại terraform destroy –auto-approve. Lệnh này sẽ xóa tất cả các tài nguyên AWS được thiết lập bởi mô-đun Terraform Amazon Aurora.

Kết luận

Trong bài đăng này, tôi đã hướng dẫn cách sử dụng mô-đun Terraform Amazon Aurora (Terraform Amazon Aurora module) để tự động hóa việc triển khai cơ sở dữ liệu toàn cầu Aurora trên nhiều Regions. Tôi cũng đã giải thích cách thức và lý do bạn có thể chuyển việc quản lý cơ sở dữ liệu toàn cầu Aurora hiện có sang mô-đun Terraform này. Bằng cách sử dụng phần mềm cơ sở hạ tầng dưới dạng code, chẳng hạn như Terraform, bạn có thể tiết kiệm thời gian triển khai AWS của mình và tài nguyên trên nhiều AWS Region được thiết lập nhất quán, với khả năng lặp lại và có thể dự đoán được. Nếu có sự cố trên toàn Region, AWS Region phụ của bạn có thể đảm nhận khối lượng công việc đọc và ghi khi bạn chuyển từ Region chính của mình. Kiến trúc này có thể cung cấp khả năng phục hồi sau thảm họa do mất điện trên toàn Region với RTO và RPO thấp.

Đừng quên theo dõi bài tiếp theo , trong đó tôi sẽ hướng dẫn cách quản lý cơ sở dữ liệu toàn cầu Aurora sau sự kiện chuyển đổi dự phòng bằng cách sử dụng mô-đun Terraform Amazon Aurora.

Tôi khuyến khích bạn xem qua bài viết về Khôi phục khối lượng công việc trên AWS: Khôi phục trong Cloud (Disaster Recovery of Workloads on AWS: Recovery in the Cloud) và có thể đọc các tài liệu trong phần Đọc thêm (Further reading) để tìm hiểu thêm về lập kế hoạch và thử nghiệm các phương pháp hay nhất liên quan đến khắc phục thảm họa cho bất kỳ khối lượng công việc nào được triển khai trên AWS.

Nếu bạn có nhận xét hoặc câu hỏi về bài đăng trên blog này, hãy để lại bên dưới phần bình luận. Để gửi các bản sửa lỗi hoặc yêu cầu cải tiến, hãy mở một pull request hoặc mở một issue trong Terraform Amazon Aurora module GitHub repository.


Bài được dịch từ bài viết trên AWS Blogs, bạn có thể xem bài viết gốc tại đây.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: