LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

古典的な手法でAutonomous Database の スケジュールドスケールアップを行う

はじめに

最近、耳にするようになったOracle Cloud Infrastructure(以下、OCI)ですが、2017年の誕生からあっという間に世界各国にリージョンが拡がっているようです。今回の記事のAutonomous Database(以下、ADB) も、2018年の誕生からどれくらいの稼働数になっているのか、その数に興味深々です。

さて今回は、とある統合DB環境でこのADBの無停止オートスケールアップが活躍している内容を書きます。

どんなシステム?

こんな構成のシステムです。SNSへの一斉配信で、一瞬で反響がくるシステムです。

sample1.png

なぜ、ADB?

一言で言うと私が楽になりたいからです。

  • DBサーバのスケールアップ・ダウンの作業を深夜に実施したくない。(一般的なDBだと、停止が必要だから)
  • セキュリティパッチ適用のために週末をつぶしたくない。(パッチリリースが多い)
  • DBチューニングの時間を短縮したい。(ある程度は自動チューニング機能に任せたい)
  • ハードウェア障害での影響を最小化したい。(HA構成では不十分だから)
  • Standard Edition Twoでは利用できない便利なEnterprise Edition機能を、気にせず使いたい。
  • Oracleライセンス管理の手間を軽減したい。

本題のADBのスケジュールドスケールアップ

もちろん、Oracle EventsやOracle MonitoringやOracle Functionsを使って、今風に組むことはできそうですが、古典的な方法が一番、短時間でできたので、その方法を書きます。

oci cli環境のセットアップは、別のQiita記事や他ブログにもありますので、完了している前提です。
また、通常時は所有ライセンス数の制限により、Autoscaling=OFF, CPU数=3core, ライセンスモデル=BYOL で動いています。SNS配信直前に拡張をして、落ち着いた頃に元に戻します。

ライセンスモデルをBYOLから、ライセンス込みへ変更
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --license-model LICENSE_INCLUDED  --wait-for-state AVAILABLE
CPU数を10に拡張(20vcpu相当)
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --cpu-core-count 10 --wait-for-state AVAILABLE
オートスケーリングを有効化(10core~30coreの範囲で負荷に応じて無停止&高速スケールアップ可能な状態に)
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --is-auto-scaling-enabled true --wait-for-state AVAILABLE

このままのサイズ(10core)で動かし続けると、ランニングコストが半端なく増加するので、元に戻す方法も記載します。

オートスケーリングを無効化
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --is-auto-scaling-enabled false --wait-for-state AVAILABLE
CPU数を3にスケールダウン
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --cpu-core-count 3 --wait-for-state AVAILABLE
ライセンスモデルをライセンス込みからBYOLへ変更
$HOME/bin/oci db autonomous-database update --autonomous-database-id ocid1... --license-model BRING_YOUR_OWN_LICENSE --wait-for-state AVAILABLE

あとは、上記をそれぞれスクリプトにして、古典的な方法ですがcrondで実行します。SNS配信内容によりCPU拡張値が変わるため、引数として渡す構成にしています。

/var/spool/cron/oracle
30 18 01 12 * $HOME/script/IncLic_Up_ASon.bash 10 >> $HOME/clilog/scaleup.log 2>&1
30 01 02 12 * $HOME/script/BYOL_Down_ASoff.bash 3 >> $HOME/clilog/scaledown.log 2>&1

一応、ちゃんと処理が完了したかは、slackに通知するようにして、最低限の確認は実施するようにしています。

image.png

あとがき

なぜ、私がADBやOCIをオススメしているのかを書きます。

それは、ADBを含め、沢山のサービスをAlways Freeで無料で使えるからです。Oracle DBの学習用でも、検証用途でも、個人の趣味サイトでも使えるからです。(Autoscalingは無料では使えませんが)

ぜひ、Always Freeも試してみてください!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0