簡単にできる! データベースアプライアンスのバージョンアップ
はじめに
さくらのクラウドには、データベースのインストールやセットアップ作業が不要で即座に利用を開始できる「データベースアプライアンス」があります。この記事では、データベースアプライアンスで使用しているデータベースのバージョンアップ方法をご紹介します。
作業の概要
最新バージョンより古いバージョンのデータベースアプライアンスを作成して、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であることが確認できました。
おわり
既存のアプライアンスと入れ替える場合
[クローン機能で既存の環境と入れ替える場合]の手順について記載したマニュアルがありますので、そちらを御覧ください。概要を記載すると、コントロールパネルから
- 移行元のデータベースアプライアンスの停止
- アクセス制限の実施
- バックアップ取得
- クローン作成(IPアドレスなどのパラメータは移行元と同じにする)
- アクセス制限の解除
の操作を行います。