零基础5分钟上手亚马逊云科技AWS核心云开发/云架构 - 创建高可用数据库集群

简介:

欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,让大家零基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构方案。

我将每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术基础解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次我将介绍如何设计一个高可用的数据库RDS集群,包括数据库和只读副本实现读写分离,保证系统服务的高可用性,提升数据库查询性能。

方案所需基础知识

什么是 Amazon RDS?

Amazon RDS(Relational Database Service)是亚马逊云科技提供的一项托管关系型数据库服务。它简化了数据库的设置、操作和扩展,使用户能够专注于应用程序开发,而无需担心数据库的维护和管理。RDS 支持多种数据库引擎,包括 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle 和 SQL Server。

为什么要创建高可用只读副本?

在 RDS 集群中创建高可用只读副本(Read Replica)有助于提高应用程序的性能、可用性和扩展性。

分担读负载

只读副本可以分担主实例的读请求,减少主实例的压力,提高整体读性能和效率。

提升可用性

只读副本可以在不同可用区或区域中创建,增强系统的容灾能力。如果主实例发生故障,只读副本可以迅速接管读请求,确保服务不中断。

数据库扩展性

通过增加只读副本数量,可以轻松应对不断增长的读请求需求。只读副本的数量可以根据实际需求进行调整。

简化管理

RDS 自动管理只读副本的备份、软件补丁和硬件维护,用户无需手动操作,降低运维成本。

本方案包括的内容:

1. 创建一个亚马逊云科技RDS数据库实例

2. 为RDS数据库实例配置只读副本,创建RDS集群

3. 为数据库集群进行数据备份

项目搭建具体步骤:

  1. 首先我们进入亚马逊云科技控制台,打开RDS服务。
  1. 点击左侧Database选项,点击"Create Database"创建一个数据库
  1. 选择MariaDB数据库引擎
  1. 选择需要的MariaDB版本,点击数据库部署模式为测试/开发模型
  1. 为数据库起名为"my-database",为数据库配置username和密码,用户名默认为admin
  1. 为数据库选择计算资源类型: 突增式资源类型"db.t3.xlarge",并配置硬盘存储类型为gp2,大小为20GiB。
  1. 为数据库的存储配置自动扩展功能,存储最大值扩展值1000GiB。并且选择部署模式为双区高可用,包括跨可用区只读副本。
  1. 选择RDS实例部署的defaultVPC网络环境和default子网,只允许数据库内网访问No Public Access,并且添加Security Group安全组防火墙。
  1. 添加MariaDB初始数据库名字"my_database",添加默认MariaDB数据库配置参数组。
  1. 开启RDS磁盘加密,添加KMS秘钥对其加密。
  1. 取消数据库集群自动更新维护,配置数据库更新维护窗口。我们在这里也可以看到我们将要创建的数据库实例每个月的价格为401.72美元。

12. 点击末尾的Create创建后,我们就可以看到我们的创建好的RDS数据库集群了。

如何通过cdk代码创建一个RDS数据库集群?

我们也可以利用亚马逊云科技提供的IaC(代码定义基础设施)的方式,用cdk代码创建一个RDS数据库集群,实例代码如下。

python 复制代码
import * as cdk from 'aws-cdk-lib';
import { CfnOutput, Stack, StackProps } from 'aws-cdk-lib';
import * as rds from 'aws-cdk-lib/aws-rds';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
import { Construct } from 'constructs';

export class RdsStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    // Create a VPC
    const vpc = new ec2.Vpc(this, 'Vpc', {
      maxAzs: 2
    });

    // Create a secret for the DB credentials
    const dbCredentialsSecret = new secretsmanager.Secret(this, 'DBCredentialsSecret', {
      generateSecretString: {
        secretStringTemplate: JSON.stringify({ username: 'admin' }),
        generateStringKey: 'password',
        excludeCharacters: '"@/\\',
      }
    });

    // Create the RDS cluster
    const cluster = new rds.DatabaseCluster(this, 'Database', {
      engine: rds.DatabaseClusterEngine.auroraMysql({
        version: rds.AuroraMysqlEngineVersion.VER_2_09_1
      }),
      credentials: rds.Credentials.fromSecret(dbCredentialsSecret),
      instanceProps: {
        vpc,
        instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.XLARGE),
        vpcSubnets: {
          subnetType: ec2.SubnetType.PRIVATE_WITH_NAT
        }
      },
      instances: 1,
      storageEncrypted: true,
      storageType: rds.StorageType.GP2,
      allocatedStorage: 20,
      defaultDatabaseName: 'MyDatabase'
    });

    // Create a read replica
    const replica = new rds.DatabaseInstanceReadReplica(this, 'ReadReplica', {
      sourceDatabaseInstance: cluster.instanceIdentifiers[0],
      instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.XLARGE),
      vpc,
      storageEncrypted: true
    });

    new CfnOutput(this, 'DatabaseEndpoint', {
      value: cluster.clusterEndpoint.socketAddress
    });

    new CfnOutput(this, 'ReadReplicaEndpoint', {
      value: replica.dbInstanceEndpointAddress
    });
  }
}

const app = new cdk.App();
new RdsStack(app, 'RdsStack');
app.synth();

以上就是在亚马逊云科技上创建高可用数据库集群的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案!

相关推荐
潜龙在渊灬43 分钟前
纯CSS实现无限轮播banner,这道题你解出来了吗?
前端·css·程序员
河北小田1 小时前
基于 Java 注解实现 WebSocket 服务器端
后端·websocket·程序员
WujieLi2 小时前
独立开发沉思录周刊:vol21.概率的误区:重复不等于必然
程序员·产品·设计
GAOJ_K3 小时前
产业用机器人中的旋转花键若损伤有何影响?
科技·机器人·自动化·制造
ZOMI酱3 小时前
【AI系统】GPU 架构回顾(从2018年-2024年)
人工智能·架构
Kika写代码3 小时前
【基于轻量型架构的WEB开发】课程 第14章 SSM框架整合 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis
前端·架构·java-ee
凡人的AI工具箱3 小时前
40分钟学 Go 语言高并发实战:高性能缓存组件开发
开发语言·后端·缓存·架构·golang
爱喝奶茶的企鹅4 小时前
使用 AI 助手提升前端代码质量:自动代码审查实战
程序员
shuxunAPI4 小时前
营业执照 OCR 识别 API 的应用前景
大数据·云计算·ocr·csdn开发云
云计算DevOps-韩老师5 小时前
【网络云计算】CentOS7.9 基于fdisk和parted磁盘分区
服务器·网络·云计算·网络云运维·网络云计算·fdisk磁盘分区·parted磁盘分区