admin

  • 在开始创建Compute/Database资源之前,需要先完成认证,再将需要的基础资源准备好。基础资源包括VCN/Subnet等相关的网络基础组件。本文将通过简单的示例展示这些基础组件的创建。

    区域/Compartment/AD

    和所有的Provider一样,我们会在Oracle Cloud的provider基础配置中配置好region。在资源创建的时候,核心资源都需要配置compartment_id,可以简单理解为,该资源属于哪个逻辑组(关于Compartment)。例如,一个典型的、简单的VCN的创建代码如下:

    provider "oci" {
      region           = var.region
    }
    
    # 创建一个新的compartment,他的parent compartment是tenancy_id
    resource "oci_identity_compartment" "oic" {
        #Required
        compartment_id = var.tenancy_id
        description = "for database benchmark"
        name = var.naming
    }
    
    resource "oci_core_vcn" "ocv" {
        #Required
        compartment_id = oci_identity_compartment.oic.id
        cidr_block = "172.17.0.0/16"
        display_name = var.naming
    }

    创建一个具备“公网”能力的子网

    这里说的“公网”能力,包括了两个方面:

    • 一个是可以被公网访问,这样就可以ssh登录并管理
    • 一个是可以访问公网,这样就可以通过wget/git/yum等工具安装软件

    这里配置要求比较严谨,与AWS有一些类似。分为以下几个步骤:

    • 创建一个VCN(oci_core_vcn),创建一个对应的子网(oci_core_subnet)
      • 需要注意的是,在创建了VCN之后,OCI Terraform会默认的创建一组:默认的安全组(default_security_list_id)、默认的路由表(default_route_table_id)、默认的dhcp(default_dhcp_options_id)
    resource "oci_core_vcn" "ocv" {
        #Required
        compartment_id = oci_identity_compartment.oic.id
        cidr_block = "172.17.0.0/16"
        display_name = var.naming
        dns_label    = var.naming
    }
    
    # Creates a subnet
    resource "oci_core_subnet" "subnet_primary" {
      availability_domain = data.oci_identity_availability_domain.oad.name
      cidr_block          = "172.17.1.0/24"
      display_name        = "domain_primary"
      dns_label           = "tfsubnet"
      security_list_ids   = [oci_core_vcn.ocv.default_security_list_id]
      compartment_id      = oci_identity_compartment.oic.id
      vcn_id              = oci_core_vcn.ocv.id
      route_table_id      = oci_core_vcn.ocv.default_route_table_id
      dhcp_options_id     = oci_core_vcn.ocv.default_dhcp_options_id
    }
    • 创建一个具备互联网访问规则的网关
    resource "oci_core_internet_gateway" "internet_gateway" {
      compartment_id = oci_identity_compartment.oic.id
      display_name   = "InternetGateway"
      vcn_id         = oci_core_vcn.ocv.id
    }
    
    resource "oci_core_default_route_table" "route_table_for_internet" {
      manage_default_resource_id = oci_core_vcn.ocv.default_route_table_id
      display_name               = "RouteTableForInternet"
    
      route_rules {
        destination       = "0.0.0.0/0"
        destination_type  = "CIDR_BLOCK"
        network_entity_id = oci_core_internet_gateway.internet_gateway.id
      }
    }
    • 最后,添加合适的端口访问规则:
    resource "oci_core_security_list" "osl" {
      compartment_id = oci_identity_compartment.oic.id
      vcn_id         = oci_core_vcn.ocv.id
      display_name   = "${var.naming}SecurityList"
    
      ingress_security_rules {
        protocol  = "6" // tcp
        source    = "0.0.0.0/0"
        stateless = false
    
        tcp_options {
        #   source_port_range {
        #     min = 100
        #     max = 100
        #   }
    
        #  // These values correspond to the destination port range.
          min = 22
          max = 22
        }
      }
    }

    Availability Domains

    和Compartment一样,这是另一个Oracle Cloud上必须得,但是似乎必要性并不强的概念。在Oracle Cloud上,整体的资源位置从大到小:region -> Availability Domains -> Fault Domain。其中,Fault Domain可以理解为其他云的zone的概念,代表了一个IDC机房(可能是相邻的多个building),通常,3个Fault Domain构成一个Availability Domains。在一个Region通常只有一个Availability Domains,也有部分Region有2~3个Availability Domains

    在Terraform中,如果确定了Region,我们需要使用data.oci_identity_availability_domain获取对应availability_domain的信息:

    data "oci_identity_availability_domain" "oad" {
        #Required
        compartment_id = oci_identity_compartment.oic.id
        ad_number = 1
    }

    创建计算资源(Compute)

    选择合适的image

    这里参考了example public_ip.tf@GitHub,使用了较为“直接”的方式(缺乏扩展性)获取需要镜像:

    variable "instance_image_ocid" {
      type = map(string)
    
      default = {
        # See https://docs.oracle.com/en-us/iaas/images/image/abf452f1-bf22-4837-b47b-79945ed26bee/
        # CentOS-7
        ap-tokyo-1  = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaa4hzluwszvbv3m3m27pvly5qm6ldnjgibjxrexuhe4ky5ncijjsra"
      }
    }

    这里的ocid则是根据 Images@Oracle Cloud Infrastructure Documentation 列出的所有镜像选择而来。更具扩展性的做法应该是通过terraform data对象去获取。

    计算实例的配置

    在OCI中,计算实例的配置,相对来说是比较简单的:

    # Creates an instance (without assigning a public IP to the primary private IP on the VNIC)
    resource "oci_core_instance" "oi" {
      availability_domain = data.oci_identity_availability_domain.oad.name
      compartment_id      = oci_identity_compartment.oic.id
      display_name        = var.naming
      fault_domain        = var.zone_primary
      shape               = var.vm_instance_type
      shape_config {
        memory_in_gbs = 2
        ocpus = 1
      }
    
      source_details {
        source_type = "image"
        source_id   = var.instance_image_ocid[var.region]
        boot_volume_size_in_gbs = 50
      }
    
      create_vnic_details {
        assign_public_ip = true
        display_name     = "Vnic${var.naming}"
        subnet_id        = oci_core_subnet.subnet_primary.id
        hostname_label   = var.naming
      }
      metadata = {
        ssh_authorized_keys = var.publickey
      }
      preserve_boot_volume = false
    }

    上面通过:

    • source_details描述了使用的镜像以及启动盘的大小
    • create_vnic_details描述了VNIC的主要配置,包括所属子网、是否有绑定公网IP等
    • metadata则描述了ssh的公钥信息,实现秘钥对登录

    创建数据库实例

    在OCI上创建MySQL实例比较简单,选项也不多,实际在通过Terraform配置也比较简单和顺利:

    resource "oci_mysql_mysql_db_system" "om" {
    
      display_name = var.naming
      compartment_id = oci_identity_compartment.oic.id
    
      availability_domain = data.oci_identity_availability_domain.oad.name
      fault_domain = var.zone_primary
      is_highly_available = true
    
      admin_password = var.db_pass
      admin_username = var.db_user
    
      shape_name = var.rds_instance_type
      data_storage_size_in_gb = 100
    
      subnet_id = oci_core_subnet.subnet_primary.id
    
      ## this appear as optional in documentation
      ## but it is a must to add it
    
      deletion_policy {
        #Optional
        # automatic_backup_retention = false
        final_backup = "SKIP_FINAL_BACKUP"
        is_delete_protected = false
      }
    }

    问题

    400-InvalidParameter

    参数值错误有很多,根据报错这里是automaticBackupRetention相关的参数值错误,对应在Terraform中是deletion_policy中的automatic_backup_retention配置项,该选项并不是必须的,暂时删除解决。

    ╷
    │ Error: 400-InvalidParameter, Request contains an invalid value for 'com.oracle.oci.mysql.model.CreateDbSystemDetails$Builder["deletionPolicy"]->com.oracle.oci.mysql.model.CreateDeletionPolicyDetails$Builder["automaticBackupRetention"]'
    │ Suggestion: Please update the parameter(s) in the Terraform config as per error message Request contains an invalid value for 'com.oracle.oci.mysql.model.CreateDbSystemDetails$Builder["deletionPolicy"]->com.oracle.oci.mysql.model.CreateDeletionPolicyDetails$Builder["automaticBackupRetention"]'
    │ Documentation: https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/mysql_mysql_db_system
    │ API Reference:
    │ Request Target: POST https://mysql.ap-tokyo-1.ocp.oraclecloud.com/20190415/dbSystems
    │ Provider version: 5.42.0, released on 2024-05-19.
    │ Service: Mysql Db System
    │ Operation Name: CreateDbSystem
    │ OPC request ID: ...
    │
    │
    │   with oci_mysql_mysql_db_system.om,
    │   on rds.mysql.tf line 6, in resource "oci_mysql_mysql_db_system" "om":
    │    6: resource "oci_mysql_mysql_db_system" "om" {
    │

    参考链接

  • 标题:腾讯TDSQL-C灰度发布列存索引; Azure Copilot集成支持Azure上各种托管数据库;

    重要更新

    Copilot for Azure新增了对Azure SQL、 Azure Database for MySQL的支持[8] [14]。Copilot for Azure是微软云提供的基于大模型技术的助手工具,主要能力包括了:该大模型可以获得最新的文档,以及客户的Azure资源情况,可以作为最为有用的咨询助手、故障排查与诊断、产品架构咨询 。目前来看,功能还不是很强大,但是看到了微软在全面拥抱AI上的执行力 [6]

    最近ICDE(三大数据库学术会议之一)在荷兰举行,国内厂商们卷的很厉害,算是非常高水平的卷了,感兴趣可以去看看大家都共享了什么成果:

    更新详情

    腾讯云
    • TDSQL-C MySQL 版8.0内核版本更新3.1.14,发布列存索引功能(地域级灰度中)[58]
    阿里云
    • RDS MySQL数据库代理支持了可用区迁移[5]
    Azure(微软云)
    • 托管MySQL(FS)正式支持 32TB 存储[7]
    • Microsoft Copilot 现可在 Azure Database for MySQL 中提供支持(Public Preview)[8]
    • PostgreSQL 16 提供了大版本升级支持(Public preview) [12]
    • Microsoft Copilot 支持了新的 Azure SQL 数据库知识(Public Preview)[14]
    • 托管 PostgreSQL支持索引建议(Public Preview) [16]
    • 托管 PostgreSQL 支持了 Azure AI 扩展(GA) [18]
    AWS(亚马逊云)
    • 中国地区支持 Zero-ETL 集成能力[49]
    • RDS Performance Insights支持了更细粒度的访问权限控制 [51]

    参考链接

  • 概述

    不同的sysbench参数可能对测试结果有一定的影响,如果不注意的话,可能会影响我们对于测试结果的分析,甚至可能会得出错误的测试结论。本文较为详细的介绍sysbench中的--rand-type参数。

    –rand-type 的含义

    --rand-type是sysbench中控制随机数据分布的参数,主要的选项包括了uniform,gaussian,special,pareto,在最新的版本,新增了zipfian。具体的各个随机分布类似介绍如下:

    • uniform 是均匀分布
    • gaussian是正态分布,也叫高斯分布(常见的标准正态分布是其特殊形式)
    • pareto 是帕累托分布,“二八分布”是其特殊形态。该分布在经济学中使用较多,最为常见的例子是认为20%的人拥有80%的财富,即财富在人群中的分布情况。zipfian分布与该分布有一些类似。
    • special 这个是一个奇怪的分布,并不是某个标准分布。应该是Sysbench作者自己定义的某个分布,该分布下取值几乎完全落在中间值附近。

    关于这些分布的讨论可以参考Sysbench在GitHub Issue上的讨论(Use the uniform distribution by default @GitHub Issue),也可以参考Percona相关的讨论文章(Sysbench and the Random Distribution Effect@Percona)。这里使用GitHub Issue中提到的方法,来对这些分布做一个测试,从而大家可以非常好的从可视化的角度去理解这些分布:

    (more…)
  • 版本现状

    终于,在8.0版本发布大概8年后,新的稳定版MySQL 8.4(LTS)终于发布了。按计划,8.0版本将在两年后(2026年04月)终止其生命周期,8.4将成为下一个主流的稳定版本。

    参考

    历史版本更新

    之前的每个大版本都会伴随着一些新的功能发布,参考:MySQL版本历史与主要特性。例如:

    • 5.0支持了存储过程、触发器、视图等功能;
    • 5.1支持了分区、行复制、API架构;
    • 5.6版本支持了半同步(5.5版本)、GTID、online DDL;
    • 5.7支持了Group Replication、原生JSON支持、多源复制;
    • 8.0支持了CTE、Hash Join、角色系统等

    MySQL 8.4(LTS)支持的改进

    包括如下(完整列表参考):

    • 复制相关的命令、状态,不再兼容master/slave语法,全部更新为source/replica
    • mysql_native_password authentication plugin默认不在启动,如还需要,则需手动配置
    • 删除了工具mysql_ssl_rsa_setup,如果openssl可用,则会再启动时候自动的生成需要的文件
    • 删除了mysqlpump,该场景建议使用mysqldump或者MySQL Shell dump
    • 支持直方图统计信息的自动、手动更新:参考
    • 新增了独立的FLUSH PRIVILEGES权限
    • 对于Group Replication做了较多的改进
    • 改变了大量的InnoDB参数的默认值:参考,以提升MySQL在默认情况下的性能表现

    整体上,当前的版本现状可以参考下图(来自Wikipedia):

    版本点评:最大的改进大概就是版本迭代模式

    这是一个让人失望的版本,甚至来说,过去的8.1/8.2/8.3版本都是让人失望的。最大的改进,大概就是版本迭代方式本身了。过去几年,MySQL市场发展较为稳定,兼容生态中,没有能够挑战其地位的产品。曾经,MariaDB、Percona版本都曾经试图与之竞争,不过目前情况,都难以撼动MySQL的位置。这也让这个产品失去了一定的活力。

    在全球范围内,云计算已经改变了企业使用基础技术的模式。云计算也在次基础上,开始一定程度的重塑基础软件、甚至基础硬件。开源数据库领域,前两把交椅一直是MySQL与PostgreSQL,从Google Trend和DB-Engines的数据来看,过去十年以来,PostgreSQL一直在缓慢的增长,而MySQL则在巨大领先的空间下,逐步的开始下降。而这让人想起了,浏览器市场的IE和FireFox,以及后来的Chrome。MySQL则很像曾经的IE浏览器,PostgreSQL则很像FireFox,至于Chrome,似乎在开源数据库领域还没有出现这样的产品。

    参考链接

  • 这是一个系列,记录了在不同的云厂商中使用Terraform的一些注意事项与常见的问题,以供参考。

    认证

    概述

    Oracle的认证相比其他云要稍微复杂一些,需要的认证信息包括:

    • 租户ID:tenancy_ocid
    • 用户ID:user_ocid
    • API访问需要的秘钥对的私钥
    • API访问需要的秘钥对的指纹(fingerprint)

    这些信息可以参考:API Key Authentication@Configuring the Provider@Oracle Cloud Infrastructure Documentation。也注意到,在Oracle Cloud的文档中,有较为完整的Terraform文档,其目录为:Developer Resouces -> DevOps Tools and Plug-ins -> Terraform Provider

    在Terraform中的认证

    在Terraform中认证,有两种常见的形式,一种是在provider提供完整的信息,如下:

    provider "oci" {
      tenancy_ocid     = var.tenancy_ocid
      user_ocid        = var.user_ocid
      fingerprint      = var.fingerprint
      private_key_path = var.private_key_path
      region           = var.region
    }

    也可以在Bash中使用全局变量:

    export TF_VAR_tenancy_ocid="......"
    export TF_VAR_user_ocid="......"
    export TF_VAR_fingerprint="......"
    export TF_VAR_private_key_path="......"
    (more…)
  • This content is password protected. To view it please enter your password below: