์›๊ฒฉ ์„œ๋ฒ„์—์„œ ๋ฐฑ์—… ์˜ˆ์•ฝ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud Storage ์—†์ด Cassandra์— ๋Œ€ํ•ด ๋ฐฑ์—…์„ ์˜ˆ์•ฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ Cloud Storage ๋ฒ„ํ‚ท ๋Œ€์‹  ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์›๊ฒฉ ์„œ๋ฒ„์— ๋ฐฑ์—…์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Apigee๋Š” SSH๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์›๊ฒฉ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—…์„ cron ์ž‘์—…์œผ๋กœ ์˜ˆ์•ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—… ์ผ์ •์ด Hybrid ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ๋˜๋ฉด ๋Ÿฐํƒ€์ž„ ์˜์—ญ์˜ ์ผ์ •์— ๋”ฐ๋ผ Kubernetes ๋ฐฑ์—… ์ž‘์—…์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ Hybrid ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ Cassandra ํฌ๋“œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ๋ณด๊ด€ ํŒŒ์ผ(์••์ถ•)์„ ๋งŒ๋“ค๊ณ , ๋ณด๊ด€ ํŒŒ์ผ์„ overrides.yaml ํŒŒ์ผ์— ์ง€์ •๋œ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” SSH ํ‚ค ์Œ ๋งŒ๋“ค๊ธฐ์™€ ๊ฐ™์€ ํŠน์ • ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์‹œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜์— ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋ฐ SSH ์„ค์ •

  1. ๋ฐฑ์—…์„ ์œ„ํ•ด Linux ๋˜๋Š” Unix ์„œ๋ฒ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋Š” Apigee Hybrid ๋Ÿฐํƒ€์ž„ ์˜์—ญ์—์„œ SSH๋ฅผ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—…์—๋Š” ์ถฉ๋ถ„ํ•œ ์ €์žฅ์šฉ๋Ÿ‰์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„์— SSH ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์•ˆ์ „ํ•œ SSH ์„œ๋ฒ„๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. SSH ํ‚ค ์Œ์„ ๋งŒ๋“ค๊ณ  ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋Ÿฐํƒ€์ž„ ์˜์—ญ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์— ๋น„๊ณต๊ฐœ ํ‚ค ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ‚ค ์Œ์— ๋นˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐฑ์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+

    ์—ฌ๊ธฐ์„œ exampleuser@example.com์€ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ssh-keygen ๋ช…๋ น์–ด์—์„œ -C ๋’ค์— ์˜ค๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ์ƒˆ๋กœ ๋งŒ๋“  ssh ํ‚ค์— ํฌํ•จ๋œ ์ฃผ์„์ด ๋ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฌธ์ž์—ด์€ ์–ด๋–ค ๋ฌธ์ž์—ด์ด๋“  ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. exampleuser@example.com ํ˜•์‹์˜ ๊ณ„์ • ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๊ณ„์ •์„ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋ฐฑ์—… ์„œ๋ฒ„์— apigee์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒˆ apigee ์‚ฌ์šฉ์ž์˜ /home์— ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฑ์—… ์„œ๋ฒ„์˜ ์ƒˆ /home/apigee ๋””๋ ‰ํ„ฐ๋ฆฌ์— .ssh ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  6. ๊ณต๊ฐœ ํ‚ค(์ด์ „ ์˜ˆ์‹œ์˜ ssh_key.pub)๋ฅผ ์ƒˆ /home/apigee/.ssh ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ authorized_keys๋ผ๋Š” ํŒŒ์ผ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    cd /home/apigee
    mkdir .ssh
    cd .ssh
    vi authorized_keys
  7. ๋ฐฑ์—… ์„œ๋ฒ„์˜ /home/apigee/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” apigee ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฉด ๋ชจ๋‘ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    cd /home/apigee
    mkdir cassandra-backup

๋ฐฑ์—… ์ผ์ • ๋ฐ ์œ„์น˜ ์„ค์ •

overrides.yaml ํŒŒ์ผ์—์„œ ๋ฐฑ์—… ์ผ์ • ๋ฐ ๋Œ€์ƒ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. overrides.yaml ํŒŒ์ผ์— ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    ๋งค๊ฐœ๋ณ€์ˆ˜

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    ์˜ˆ

    cassandra:
      backup:
        enabled: true
        keyFile: "private.key"# path relative to apigee-datastore path
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    ์†์„ฑ ์„ค๋ช…
    backup:enabled ๋ฐฑ์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ true๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ SSH ๋น„๊ณต๊ฐœ ํ‚ค ํŒŒ์ผ(SSH ํ‚ค ์Œ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ssh_key๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ) ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” apigee-datastore ์ฐจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    backup:server

    BACKUP_SERVER_IP

    ๋ฐฑ์—… ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

    backup:storageDirectory

    BACKUP_DIRECTORY

    ๋ฐฑ์—… ์„œ๋ฒ„์˜ ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” home/apigee ๋‚ด์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์—ฌ์•ผ ํ•˜๋ฉฐ, ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„์€ ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  cassandra_backup์ž…๋‹ˆ๋‹ค.

    backup:cloudProvider

    HYBRID

    ์›๊ฒฉ ์„œ๋ฒ„ ๋ฐฑ์—…์˜ ๊ฒฝ์šฐ ์†์„ฑ์„ HYBRID๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    backup:schedule

    SCHEDULE

    ๋ฐฑ์—…์ด ์‹œ์ž‘๋˜๋Š” ์‹œ๊ฐ„์ด๋ฉฐ ํ‘œ์ค€ crontab ๊ตฌ๋ฌธ์— ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์ง€ ์‹œ๊ฐ„๋Œ€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: 0 2 * * *

  2. ๋ฐฑ์—… ๊ตฌ์„ฑ์„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์Šคํ† ๋ฆฌ์ง€ ๋ฒ”์œ„์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    ์—ฌ๊ธฐ์„œ OVERRIDES_FILE์€ ๋ฐฉ๊ธˆ ์ˆ˜์ •ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

  3. ๋ฐฑ์—… ์ž‘์—…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    kubectl get cronjob -n APIGEE_NAMESPACE
    NAME                      SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    apigee-cassandra-backup   33 * * * *   False     0        <none>          94s