零基础5分钟上手谷歌云GCP核心云开发技能 - 搭建和维护高可用数据库集群

news2024/11/15 18:42:51

简介:

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

我将每天介绍一个基于全球三大云计算平台(AWS, Azure, GCP)的全球前沿云开发/架构技术基础解决方案,帮助大家快速了解国际上最热门的云计算平台上的最佳实践和前沿技术,并应用到自己的日常工作里。本次我将介绍如何在谷歌云上利用Cloud SQL服务搭建高可用数据库集群。示范架构图如下:

方案所需基础知识 

什么是谷歌云 GCP Cloud SQL 服务?

谷歌云 GCP Cloud SQL 是一项完全托管的关系型数据库服务。它支持多种数据库引擎,支持包括 MySQL、PostgreSQL 和 SQL Server多种数据引擎。Cloud SQL 旨在简化数据库的部署、管理和维护,使开发者能够专注于应用程序开发,而无需担心底层数据库的基础设施管理。

使用 GCP Cloud SQL 作为数据库的优势

完全托管

无需处理数据库的安装、配置、补丁和备份,谷歌云会自动管理这些任务,节省运维时间和成本。

高可用性

通过自动故障转移和跨区域复制,确保数据库的高可用性和数据持久性,提升业务连续性。

安全性

提供内置的加密功能、自动更新和合规性认证,确保数据安全和隐私保护。

弹性扩展

支持按需扩展数据库的计算和存储资源,灵活应对业务需求变化,避免资源浪费。

性能优化

提供自动调优和性能监控工具,帮助优化查询性能,确保应用始终运行在最佳状态。

简便的集成

与 GCP 的其他服务(如 Compute Engine、App Engine 和 BigQuery)无缝集成,简化开发流程,增强应用的功能和性能。

本方案包括的内容:

1. 创建一个谷歌云Cloud SQL数据库实例

2. 通过Cloud Shell命令行方式与数据库交互

3. 在服务器内部创建一个数据库,并导入数据

项目搭建具体步骤:

1.  我们在搜索栏搜索Cloud SQL, 进入Cloud SQL服务主页。点击“Create Instance”创建数据库实例。

2. 选择MySQL数据库引擎

 

3.  选择MySQL企业级数据库版本,并且为数据库实例设置环境为开发环境,数据库版本为MySQL 8,为数据库起名为myinstance,并且点击"Generate"自动创建密码。

4. 接下来我们为数据库集群配置高可用,选择地理区域“europe-west4”,选择多可用区部署的模式,主可用区为“europe-west4-c”,最后点击创建数据库集群。

5. 接下来我们打开Cloud Shell命令行,与数据库实例交互进行维护操作。

 

6. 在Cloud Shell控制台命令行如下命令连接到数据库集群

gcloud sql connect myinstance --user=root

 7. 在弹出密码输入框后,复制创建数据库集群时设置的密码

8. 接下来我们通过SQL语句,在MySQL里创建一个数据库“guestbook”。 

CREATE DATABASE guestbook;

9.  接下来我们为数据库导入测试数据

USE guestbook;
CREATE TABLE entries (guestName VARCHAR(255), content VARCHAR(255),
    entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));
    INSERT INTO entries (guestName, content) values ("first guest", "I got here!");
INSERT INTO entries (guestName, content) values ("second guest", "Me too!");

10. 接下来我们对导入数据进行查询,得到查询结果。

SELECT * FROM entries;

 

如何利用谷歌云GCP Python SDK,通过代码方式创建数据库?

from google.cloud import sql_v1
from google.cloud.sql_v1.types import CloudSqlInstance, SqlInstanceSettings, SqlDatabaseVersion, SqlSettings, SqlAvailabilityType
from google.protobuf.field_mask_pb2 import FieldMask

def create_mysql_instance():
    # 创建 SQL Admin 客户端
    client = sql_v1.SqlInstancesServiceClient()

    # 定义实例的 ID 和项目 ID
    instance_id = "myinstance"
    project_id = "your-project-id"  # 替换为您的项目 ID

    # 配置实例的设置
    instance_settings = SqlInstanceSettings(
        tier="db-n1-standard-2",  # 对应 4 vCPU, 16 GB RAM
        availability_type=SqlAvailabilityType.REGIONAL,  # 设置多区域支持 (Highly available)
        data_disk_size_gb=100,  # 数据盘大小 100 GB
        activation_policy=SqlInstanceSettings.ActivationPolicy.ALWAYS,
        database_version=SqlDatabaseVersion.MYSQL_8_0,
        ip_configuration=SqlSettings.IpConfiguration(
            ipv4_enabled=True
        ),
        location_preference=SqlSettings.LocationPreference(
            zone="europe-west4-c"  # 设置主区域
        )
    )

    # 创建 Cloud SQL 实例
    instance = CloudSqlInstance(
        name=instance_id,
        project=project_id,
        settings=instance_settings,
        database_version=SqlDatabaseVersion.MYSQL_8_0
    )

    # 发送请求以创建实例
    operation = client.insert(
        project=project_id,
        instance_id=instance_id,
        body=instance
    )

    print(f"Creating instance {instance_id} in project {project_id}...")

    # 等待操作完成
    response = operation.result()

    print("Instance created successfully.")
    return response

if __name__ == "__main__":
    create_mysql_instance()
代码解释:

google.cloud.sql_v1: 使用 Google Cloud SQL Admin SDK 的 Python 客户端库。

instance_settings: 配置实例的设置,包括计算资源、磁盘大小、可用性类型等。

create_mysql_instance: 函数用于创建 MySQL 实例。

SqlAvailabilityType.REGIONAL: 表示多区域设置,提供更高的可用性。

SqlInstanceSettings: 包含实例的配置详细信息,例如计算资源、磁盘大小、数据库版本和可用性设置。

以上就是在谷歌云GCP上搭建MySQL高可用数据库集群的全部步骤。欢迎大家关注零基础5分钟上手谷歌云系列,未来获取更多国际前沿的谷歌云GCP云开发/云架构方案!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT解逻辑数学题之8个8变1000的故事

目录 初试正解 我: GPT4: 再问思索 我: GPT4: 提醒错误 我: GPT4: 给出正解提示 我: GPT4: 不愿放弃 我: GPT4: 再次尝试 我: …

Web开发:web服务器-Nginx的基础介绍(含AI文稿)

目录 一、Nginx的功能: 二、正向代理和反向代理的区别 三、Nginx负载均衡的主要功能 四、nginx安装目录下的各个文件(夹)的作用: 五、常用命令 一、Nginx的功能: 1.反向代理:例如我有三台服务器&#x…

Linux源码阅读笔记20-PCI设备驱动详解

PCI基础 PCI总线为高性能局部总线,主要解决外部设备之间以及外部设备与主机之间高速数据传输。在数字图形、图像等处理,以及告诉实时数据采集与处理等队数据传输速率要求高的应用中,采用PCI总线进行数据传输。PCI规范能够实现32位并行数据传…

我在高职教STM32——I2C通信入门(3)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助CSDN平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分…

STM32G070KBT6的RTC HAL库使用

*配置问题 首先使能时钟源,这里在时钟配置中选择LSI,为什么后面会说,然后使能Calender结构体,保证可以对RTC的年月日时分秒等进行写入和读取;alarmA和alarmB是闹钟,这里不用就Disable; Tam…

突破•指针六

听说这是目录哦 数组和指针笔试题解析🫧一维数组1🍕🍕🍕🍕🍕🍕🍕 字符数组1🍔🍔🍔🍔🍔🍔🍔2&#…

高并发下的分布式缓存 | Read-Through缓存模式

缓存系列文章链接如下: 高并发下的分布式缓存 | 缓存系统稳定性设计 高并发下的分布式缓存 | 设计和实现LRU缓存 高并发下的分布式缓存 | 设计和实现LFU缓存 高并发下的分布式缓存 | Cache-Aside缓存模式 Read-Through 模式的缓存操作 Read-Through模式的一个关键…

Scanner类、String类和StringBuffer类的相关使用

一、Scanner: 主要用于键盘录入的 构造方法: Scanner(InputStream source) 构造一个新的 Scanner ,产生从指定输入流扫描的值。 1、next()和nextLine()区别: String line sc.next(); // 不会接收特殊字符,比如空格回…

高效的编程学习方法和技巧

编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…

基于单片机的智能空气净化系统

【摘 要】 设计了一种基于单片机的智能空气净化系统。通过传感器实时采集空气中 PM2.5 、甲醛等有害健康物质的浓度,将各项数据显示到液晶显示屏,当浓度超过设置的警戒值时,控制蜂鸣器发出警报。根据浓度大小控制空气净化器电机转速&#xf…

04.C++类和对象(中)

1.类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重…

Selenium + Python 自动化测试04(操作方法1)

上一篇我们讲述了webdriver 元素定位方法。我们对如何定位元素有了一个基本的认识。接着我们详细讲述对元素常见的一些基本操作方法,以便我们可以做很多功能操作的测试。这一篇侧重最基本的操作方面。 1、send_keys 方法 此方法类似于模拟键盘输入。还是以下面网站…

React项目中引用视频播出插件 easyPlayer.js 部署趟坑日志

目录 前文记录背景问题摸排:第一天前端打包失败?远程打包逻辑与本地打包逻辑不一致?远程入口页被篡改?再次排查本地webpack打包逻辑 问题摸排:第二天确认本地与远程打包一致排查远程nginx代理定位问题 index.html 的所…

AI10-PaddleDetection2.7安装测试

1、下载PaddleDetect-release-2.7开源项目 https://github.com/PaddlePaddle/PaddleDetection https://github.com/PaddlePaddle/PaddleDetection/releases PaddleDetection: PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型 2、安装 环境要求 * Paddl…

[Qt][QWidget]详细讲解

目录 1.概述2.QWidget核心属性1.简介2.核心属性概览 3.QWidget常用属性1.enabled2.geometry1.是什么?2.Window Frame的影响3.相关API4.注意 3.windowTitile4.windowIcon5.windowOpacity6.cursor8.font9.toolTip10.focusPolicy11.styleSheet 1.概述 Widget是Qt中的核…

2024新版ChatGPT系统源码SparkAi系统,支持GPT4.0全模型,AI绘画,AI换脸+自定义智能体GPTs应用+AI视频+文档分析

一、文章序言 人工智能技术正迅猛发展,AI语言模型、AI绘画和AI视频已经在许多领域得到广泛应用。这些技术不仅在科技创新方面表现出色,还在艺术创作、内容生成和商业应用中展现出巨大的潜力。 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能…

【Linux】系列入门摘抄笔记-4-查看文件内容命令cat/more/less/tail

cat 查看文件内容 cat [选项] [参数] cat 命令可以用来显示文本文件的内容(类似于 DOS 下的 type 命令),也可以把几个文件内容附加到另一个文件中,即连接合并文件。 tac 反向显示文件内容 tac [选项] [参数] 将文件全部内容从…

玩转Docker:Lsky pro图床+私有化部署大模型(Ollama+Openwebui)

最近搞了一个测试服务器,捣鼓了下一键搭建dnmp集成环境,然后还搭建了一个Lysk pro图床服务,后面又看到了开源大模型,也试着搭建了一下,中间出了一点小插曲。不过也算搭建成功了。做一个小结汇总。 1.前情回顾 DNMP:基…

探索list与iterator的区别及yield的用法

1 问题 探索list与iterator的区别探索yield的用法 2 方法 通过网上学习后了解到 List返回的类型是list,list只会查询一级缓存。list()中返回的List中每个对象都是原本的对象。查询的时候没遍历一个对象会产生一条sql;而iterator这个迭代器返回的类型是it…

Apache HTTPD 换行漏洞(CVE-2017-15715)

Vulhub - Docker-Compose file for vulnerability environment Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一…