์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๊ตฌ๋…์ž์— ๋Œ€ํ•ด ๊ฒŒ์‹œ์ž๋กœ ์ž‘๋™ํ•˜๋„๋ก Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ๋ณต์ œ๋ณธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์€ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ์š”์ฒญ์ด๋‚˜ ๋ถ„์„ ํŠธ๋ž˜ํ”ฝ์„ ์˜คํ”„๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์žฌํ•ด ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋ฆฌ์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์ด ๋ฆฌ์ „ ๊ฐ„ ๋ณต์ œ๋ณธ์ธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฆฌ์ „์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณต์ œ๋ณธ์„ ๋…๋ฆฝํ˜• ์ธ์Šคํ„ด์Šค๋กœ ์Šน๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ๊ธฐ์กด ๋ณต์ œ๋ณธ์€ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Œ).

๋ณต์ œ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud SQL์˜ ๋ณต์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ด ์ธ์Šคํ„ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ๋•Œ๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

  • ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋‹น ์ตœ๋Œ€ 8๊ฐœ์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Cloud SQL Enterprise ๋ฒ„์ „์ด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋˜๋Š” ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๊ฐ€ Cloud SQL Enterprise Plus ๋ฒ„์ „ ์ธ์Šคํ„ด์Šค์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๋ฒ„์ „๊ณผ ๋“ฑ๊ธ‰์„ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์€ ํ›„ ๋“ฑ๋ก์ •๋ณด ์˜†์— ์žˆ๋Š” more actions ๋ฉ”๋‰ด๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  3. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ํ•ด๋‹น ์„ ํƒ ์˜ต์…˜์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณต์ œ๋ณธ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์˜ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  4. ์ธ์Šคํ„ด์Šค ๋งž์ถค์„ค์ • ์„น์…˜์—์„œ ๋ณต์ œ๋ณธ์˜ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์˜ต์…˜ ํ‘œ์‹œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„ค์ • ๊ทธ๋ฃน์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์›ํ•˜๋Š” ๊ทธ๋ฃน์„ ํŽผ์ณ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋งž์ถค์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋ชจ๋“  ์˜ต์…˜์˜ ์š”์•ฝ์ด ์˜ค๋ฅธ์ชฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ๋งž์ถค์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋งž์ถค์„ค์ •์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ธฐ๋ณธ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

    ๊ฐ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์„ค์ • ์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  5. ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL์ด ๋ฐฑ์—…์„ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

gcloud

๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud sql instances create REPLICA_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME
  

ํ•„์š”ํ•œ ๊ฒฝ์šฐ --tier ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋“ฑ๊ธ‰ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--region ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฆฌ์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋‚ด๋ถ€ IP ์ฃผ์†Œ๋งŒ ์žˆ์œผ๋ฉด ๋ช…๋ น์–ด์— --no-assign-ip ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ์„ค์ •์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud sql instances create๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณต์ œ๋ณธ์„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์— ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด VPC ๋„คํŠธ์›Œํฌ์— allocated-ip-range-name์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋ณต์ œ๋ณธ์ด ๋ฌด์ž‘์œ„ ๋ฒ”์œ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Terraform

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด Terraform ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_sql_database_instance" "read_replica" {
  name                 = "sqlserver-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "SQLSERVER_2019_ENTERPRISE"
  root_password        = "INSERT-PASSWORD-HERE"
  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST v1beta4

์ธ์Šคํ„ด์Šค ๋ฆฌ์†Œ์Šค์˜ insert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. region๊ณผ databaseVersion ์†์„ฑ์ด ๋งˆ์Šคํ„ฐ์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • project-id: ํ”„๋กœ์ ํŠธ ID
  • database-version: Enum ๋ฒ„์ „ ๋ฌธ์ž์—ด(์˜ˆ: SQLSERVER_2017_ENTERPRISE)
  • primary-instance-name: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„
  • primary-instance-region: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-region: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-name: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • machine-type: ๋จธ์‹  ์œ ํ˜•์˜ ์—ด๊ฑฐํ˜• ๋ฌธ์ž์—ด (์˜ˆ: 'db-custom-1-3840')

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค์— ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด gcloud CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณต์ œ๋ณธ์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ๋ฆฌ์ „ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฆฌ์ „(๋ฆฌ์ „ ๊ฐ„ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ)์— ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์—ฐ๊ฒฐ ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค์—์„œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ Private Service Connect ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ IP ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์—์„œ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

gcloud

์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด gcloud sql instances create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST v1

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MACHINE_TYPE: ์ธ์Šคํ„ด์Šค์˜ ๋จธ์‹  ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MACHINE_TYPE: ์ธ์Šคํ„ด์Šค์˜ ๋จธ์‹  ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

์—ฐ์‡„ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ด ์„น์…˜์—์„œ๋Š” ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‡„ ๋ณต์ œ๋ณธ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—๋Š” ์—ฐ์‡„ ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ ๋‹จ๊ณ„

์—ฐ์‡„ ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ๋•Œ๋Š” ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋‹ค๋ฅธ ๋ฆฌ์ „์— ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. cascadable-replica ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

gcloud

--master-instance-name ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•˜๊ณ  --cascadable-replica ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --cascadable-replica \
   --region=REGION

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • REPLICA_NAME: ๋งŒ๋“ค๋ ค๋Š” ๋ณต์ œ๋ณธ์˜ ๊ณ ์œ  ID
  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • REGION: ์ƒˆ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋Š” ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค. ์ด ๋ฆฌ์ „์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „๊ณผ ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์— ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น VPC ๋„คํŠธ์›Œํฌ์—์„œ ํ• ๋‹น๋œ IP ๋ฒ”์œ„ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋ณต์ œ๋ณธ์ด ๋ฌด์ž‘์œ„ ๋ฒ”์œ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ์„ค์ •์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • --tier ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋จธ์‹  ๋“ฑ๊ธ‰ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋งŒ ์žˆ์œผ๋ฉด ๋ช…๋ น์–ด์— --no-assign-ip ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์„ค์ •์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud sql instances create๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์ด ์ƒ์„ฑ๋œ ํ›„ ๊ณ„์ธตํ™” ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

curl

  1. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์•„๋ž˜์— ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ JSON ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์ˆ˜์ •ํ•˜๊ณ  request.json ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
    • DATABASE_VERSION: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „์˜ ์—ด๊ฑฐํ˜• ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด SQLSERVER_2017_ENTERPRISE.์ž…๋‹ˆ๋‹ค.
    • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • PRIMARY_INSTANCE_REGION: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
    • REPLICA_REGION: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
    • REPLICA_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
    • MACHINE_TYPE: ๋จธ์‹  ์œ ํ˜•์˜ ์—ด๊ฑฐํ˜• ๋ฌธ์ž์—ด ์˜ˆ๋ฅผ ๋“ค๋ฉด db-custom-2-3840์ž…๋‹ˆ๋‹ค.
    {
      "masterInstanceName": "PRIMARY_INSTANCE_NAME",
      "project": "PROJECT_ID",
      "databaseVersion": "DATABASE_VERSION"
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
          "settingsVersion": 0,
        }
        "replicaConfiguration":
        {
         "cascadableReplica": true
        }
    }
  2. replicaConfiguration ์„น์…˜์—์„œ cascadadableReplica ํ•„๋“œ๊ฐ€ true๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์ด ์ƒ์„ฑ๋œ ํ›„ ๊ณ„์ธตํ™” ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ์‡„ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ ๋‹จ๊ณ„

์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ๋•Œ๋Š” ์—ฐ์‡„ ๋ณต์ œ๋ณธ๊ณผ ๋™์ผํ•œ ๋ฆฌ์ „์— ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€“master-instance-name ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์˜ ์ด๋ฆ„์„ ์ œ๊ณตํ•˜์—ฌ ๊ณ„์ธตํ™” ๋ณต์ œ๋ณธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ๋งŒ๋“ค๋ ค๋Š” ๋ณต์ œ๋ณธ์˜ ์ƒ์œ„ ์š”์†Œ ์—ญํ• ์„ ํ•  ๋ณต์ œ๋ณธ์˜ ๋ณต์ œ๋ณธ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€์—์„œ ์ธ์Šคํ„ด์Šค ID๋ฅผ ๋น„๋กฏํ•ด ์ด๋ฆ„, ๋ฆฌ์ „, ์˜์—ญ ๋“ฑ์˜ ๊ธฐํƒ€ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL์€ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ณต์ œ๋ณธ์˜ ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ๋งŒ๋“ค๋ ค๋Š” ์ƒˆ ์—ฐ์‡„ ๋ณต์ œ๋ณธ๋งˆ๋‹ค 4~6๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. --master-instance-name ํ”Œ๋ž˜๊ทธ์—์„œ ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ƒˆ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=CASCADABLE_REPLICA_NAME \
    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • REPLICA_NAME: ๋งŒ๋“ค๋ ค๋Š” ๋ณต์ œ๋ณธ์˜ ๊ณ ์œ  ID
    • CASCADABLE_REPLICA_NAME: ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ์˜ ์ด๋ฆ„
  3. ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“  ํ›„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ์ˆ˜ํ–‰๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—ฐ์‡„ ๋ณต์ œ ์ฒด์ธ์— ์žˆ๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ์— ๋ณต์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

curl

  1. ๊ณ„์ธตํ™” ๊ฐ€๋Šฅํ•œ ๋ณต์ œ๋ณธ ์•„๋ž˜์— ๊ณ„์ธตํ™” ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ JSON ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์ˆ˜์ •ํ•˜๊ณ  request.json ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    {
      "masterInstanceName": "CASCADABLE_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์ƒ์„ฑ ์‹œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์ด ๋ณต์ œ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.
์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - invalidFlagValue ์˜ค๋ฅ˜ ์š”์ฒญ์˜ ํ”Œ๋ž˜๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•œ ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ํ”Œ๋ž˜๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € max_connections ํ”Œ๋ž˜๊ทธ์˜ ๊ฐ’์ด ๊ธฐ๋ณธ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ํ™•์ธํ•˜์„ธ์š”.

max_connections ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •๋œ ๊ฒฝ์šฐ Cloud Logging์—์„œ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.

์˜ค๋ฅ˜๊ฐ€ set Service Networking service account as servicenetworking.serviceAgent role on consumer project์ด๋ฉด Service Networking API๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐธ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ๋””์Šคํฌ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋” ํฐ ๋””์Šคํฌ ํฌ๊ธฐ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์€ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ฝ๊ธฐ ์ž‘์—…์„ ์บ์‹œํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์Šคํ† ๋ฆฌ์ง€ ํ•œ๋„์— ๋„๋‹ฌํ–ˆ๊ณ  ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ์ฆ๊ฐ€๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ automatic storage increase๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธด ๋ณต์ œ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•จ ์“ฐ๊ธฐ ๋ถ€ํ•˜๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„ ๋ณต์ œ๋ณธ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์˜ SQL ์Šค๋ ˆ๋“œ๊ฐ€ IO ์Šค๋ ˆ๋“œ๋ฅผ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ฟผ๋ฆฌ ๋˜๋Š” ์›Œํฌ๋กœ๋“œ๋กœ ์ธํ•ด ํŠน์ • ์Šคํ‚ค๋งˆ์—์„œ ์ผ์‹œ์ ์ด๊ฑฐ๋‚˜ ์˜๊ตฌ์ ์ธ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ์˜ ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜์„ธ์š”.
  • DELETE ... WHERE field < 50000000๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— ๋‹ค์ˆ˜์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฏ€๋กœ ํ–‰ ๊ธฐ์ค€ ๋ณต์ œ์—์„œ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ณต์ œ๋ณธ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋А๋ฆฐ ์“ฐ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์ œํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์žฅ๊ธฐ ์‹คํ–‰ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ธํ•ด ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์ค‘์ง€ํ•œ ํ›„ ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„