簡単にできる! データベースアプライアンスのバージョンアップ

はじめに

さくらのクラウドには、データベースのインストールやセットアップ作業が不要で即座に利用を開始できる「データベースアプライアンス」があります。この記事では、データベースアプライアンスで使用しているデータベースのバージョンアップ方法をご紹介します。

作業の概要

最新バージョンより古いバージョンのデータベースアプライアンスを作成して、1,000,000レコードのデータを投入した後に、クローン機能を使って最新バージョンのデータベースアプライアンスに移行します。

前提

  • さくらのクラウドのAPIキーは"作成・削除"の権限で作成済み
    後に必要になるのでアクセストークンとアクセストークンシークレットは控えておいてください。
    APIキーの作成がお済みでない方は -> [APIキーの作成方法]
  • データベースの操作はデータベースアプライアンスと同じローカルエリアネットワークにいるVMから行う
  • 構成を下図に示します。old_oneが古いデータベースアプライアンス、temp_usacloudが操作するVMです。
  • VMにはcurlがインストール済み
  • VMにはpsqlがインストール済み
  • データベースアプライアンスを接続するスイッチのリソースIDは取得済み
    リソースIDはコントロールパネルで該当のスイッチを表示すると確認できます。
  • 今回の例では、PostgreSQL 12.1 から 13.5 へ移行します。

準備

以降の作業はデータベースアプライアンスと同じローカルエリアネットワークにいるVMから行います。

旧バージョンのデータベースアプライアンスを作るためのjsonを書く

コントロールパネルからは最新バージョン以外は作成できませんが、APIからなら旧バージョンを作成できるので、APIにPOSTする時に必要なJSONを書きます。

{
  "Appliance": {
    "Class": "database",
    "Name": "アプライアンスの名前を指定",
    "Description": "",
    "Remark": {
      "Network": {
        "NetworkMaskLen": ネットマスクを数字で指定,
        "DefaultRoute": "デフォルトゲートウェイを指定"
      },
      "Servers": [
        {
          "IPAddress": "DBアプライアンスに設定したいIPアドレスを指定"
        }
      ],
      "DBConf": {
        "Common": {
          "DatabaseName": "PostgreSQLならpostgres, MariaDBならmariadbと指定",
          "DatabaseVersion": "データベースのバージョンを指定",
        }
      },
      "Switch": {
        "ID": "接続するスイッチのリソースIDを指定"
      },
      "Plan": {
        "ID": ディスクサイズを数字で指定する。10GBなら10と指定
      }
    },
    "Settings": {
      "DBConf": {
        "Common": {
          "WebUI": WEBUIが不要ならfalse、必要ならtrueを指定,
          "ServicePort": データベースが待ち受けるポート番号を数字で指定,
          "SourceNetwork": [],
          "DefaultUser": "データベースのデフォルトユーザ名を指定",
          "UserPassword": "デフォルトユーザのパスワードを指定"
        }
      }
    },
  },
}

---

// 入力例
{
  "Appliance": {
    "Class": "database",
    "Name": "old_one",
    "Description": "",
    "Remark": {
      "Network": {
        "NetworkMaskLen": 24,
        "DefaultRoute": "192.168.1.254"
      },
      "Servers": [
        {
          "IPAddress": "192.168.1.30"
        }
      ],
      "DBConf": {
        "Common": {
          "DatabaseName": "postgres",
          "DatabaseVersion": "12",
        }
      },
      "Switch": {
        "ID": "113100694982"
      },
      "Plan": {
        "ID": 10
      }
    },
    "Settings": {
      "DBConf": {
        "Common": {
          "WebUI": false,
          "ServicePort": 5342,
          "SourceNetwork": [],
          "DefaultUser": "oldone",
          "UserPassword": "superhimitsupassword"
        }
      }
    },
  },
}

書いたら"post_data.json"という名前で保存しておきます。

APIを使って旧バージョンのデータベースを作成する

今回は"石狩第2ゾーン"に作成します。
APIのエンドポイントはゾーンごとに存在するので他のゾーンに作る場合はURLを適宜変えてください。

以下のコマンドで作成します。

curl -X POST -H "Content-Type: application/json" -d "@./post_data.json" \
--user "アクセストークンを指定:アクセストークンシークレットを指定" \
"https://secure.sakura.ad.jp/cloud/zone/is1b/api/cloud/1.1/appliance"

レスポンスに "is_ok": true が含まれていたら成功です。
アプライアンスが利用可能になるまでには1~2分(サイズによる)ほど必要なので少し待ちましょう。

データをインサートする

アプライアンスが利用可能になったら、以下のようなコマンドで作成したDBアプライアンスに接続します。

psql -h 192.168.1.31 -p 5342 -U oldone -d oldone

以下のSQLを実行してデータをインサートします。

; テーブルを作る
CREATE TABLE testtable
  (num SERIAL, name VARCHAR(250), a INT, b INT, PRIMARY KEY (name))
;

---
; 作ったテーブルにデータを入れる
INSERT INTO testtable (name, a, b)
 SELECT
     format('水族館へ行こう%s', i) as name,
     10 + i as a,
     20 + i as b
 FROM
     generate_series(1,1000000) as i
;

---
; レコードを確認する
ubuntu@temp-usacloud:~$ psql -h 192.168.1.30 -p 5342 -U oldone -d oldonedone
Password for user oldone:
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1), server 12.1)
Type "help" for help.

oldone=>
oldone=> select * from testtable limit 5;
 num |          name          | a  | b
-----+------------------------+----+----
   1 | 水族館へ行こう1 | 11 | 21
   2 | 水族館へ行こう2 | 12 | 22
   3 | 水族館へ行こう3 | 13 | 23
   4 | 水族館へ行こう4 | 14 | 24
   5 | 水族館へ行こう5 | 15 | 25
(5 rows)

oldone=> select count(*) from testtable;
  count
---------
 1000000
(1 row)

oldone=>

---
; 接続を切る
\q

コントロールパネルからバックアップを取得する

バージョンアップ時はバックアップデータから新しいバージョンのデータベースアプライアンスを作成するので、このタイミングでバックアップを取得します。コントロールパネルから2クリックくらいで取得できます。

手順は[こちら]にありますが、手短に記載すると、コントロールパネルにてデータベースアプライアンスを表示させ、バックアップタブにて追加ボタンをクリックして取得します。

クローン機能を使って移行する

準備ができたのでいよいよ移行します!

クローン機能を使ってデータベースアプライアンスを作成する

コントロールパネルから旧バージョンのデータベースアプライアンスを表示すると、クローンというボタンがあります。

これをクリックするとデータベースアプライアンスの作成画面が表示され、"クローン元データベース"の欄に作成した旧バージョンのデータベースアプライアンスが指定されています。あとは"データベースバージョン" の項で最新バージョンを指定し、他の項目も適宜入力しデータベースアプライアンスを作成する事で、新しいバージョンのデータベースアプライアンスにデータを移行することができます。

レコードの確認をする

クローン先のアプライアンスと同じ数のレコードがあることやPostgreSQLのバージョンが13.5であることを確認します。

ubuntu@temp-usacloud:~$ psql -h 192.168.1.111 -p 5342 -U oldone -d oldone
Password for user oldone:
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1), server 13.5) <- 13.5と表示されている
Type "help" for help.

;; レコードの内容を簡単に確認する
oldone=> select * from testtable limit 5;
 num |          name          | a  | b
-----+------------------------+----+----
   1 | 水族館へ行こう1 | 11 | 21
   2 | 水族館へ行こう2 | 12 | 22
   3 | 水族館へ行こう3 | 13 | 23
   4 | 水族館へ行こう4 | 14 | 24
   5 | 水族館へ行こう5 | 15 | 25
(5 rows)

;; レコード数を確認する
oldone=> select count(*) from testtable;
  count
---------
 1000000
(1 row)

oldone=>

レコードの内容やレコード数がクローン元と同じであることや、PostgreSQLのバージョンが13.5であることが確認できました。

おわり

既存のアプライアンスと入れ替える場合

[クローン機能で既存の環境と入れ替える場合]の手順について記載したマニュアルがありますので、そちらを御覧ください。概要を記載すると、コントロールパネルから

  1. 移行元のデータベースアプライアンスの停止
  2. アクセス制限の実施
  3. バックアップ取得
  4. クローン作成(IPアドレスなどのパラメータは移行元と同じにする)
  5. アクセス制限の解除

の操作を行います。