obshellを使用してOceanBaseデータベースをアップグレードするには、2つの方法があります。
API呼び出しによるアップグレード
obshellコマンドによるアップグレード
本記事では、3リプリカのOceanBaseクラスタを例に、obshellを使用してOceanBaseクラスタをアップグレードする方法を説明します。
前提条件
OceanBaseクラスタはobshellによって運用管理されていること。詳細な判断方法および引き継ぎ操作については、obshell以外でデプロイされたクラスタの引き継ぎを参照してください。
OceanBaseクラスタのすべてのOBServerノードとobshellが正常に稼働していること。
アップグレード前に、OceanBaseクラスタがテナントコンパクション中でないことを確認してください。
デプロイメントモード
本記事では、3台のマシンを以下のように使用します(obshellはデフォルトポート2886を使用します):
| ロール | マシン | 備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
APIによるアップグレード
説明
obshellは呼び出されるAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、APIハイブリッド暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化後のリクエストヘッダー(${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
ステップ1:対象バージョンのRPMパッケージをアップロードする
obshellのいずれかの /api/v1/upgrade/package APIを呼び出して、パッケージをアップロードします。OceanBaseクラスタのアップグレード時には、oceanbase-ce と oceanbase-ce-libs の2つのパッケージをアップロードする必要があります。
コマンドラインで対応するAPIを呼び出す方法については、RPMパッケージのアップロードを参照してください。
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X POST -F "file=@/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm" http://10.10.10.1:2886/api/v1/upgrade/package
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X POST -F "file=@/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm" http://10.10.10.1:2886/api/v1/upgrade/package
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、RPMパッケージのアップロードを参照してください。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm") # /api/v1/upgrade/packageを呼び出す
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm") # /api/v1/upgrade/packageを呼び出す
···
obshell-sdk-goを使用して対応するAPIメソッドをリクエストする方法の詳細については、RPMパッケージのアップロードを参照してください。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
dag, err := client.V1().UploadPkgWithRequest(req) // /api/v1/upgrade/packageを呼び出す
req = client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
dag, err = client.V1().UploadPkgWithRequest(req) // /api/v1/upgrade/packageを呼び出す
···
ステップ2:アップグレードチェックAPIを呼び出す(オプション)
任意のobshellの/api/v1/ob/upgrade/checkを呼び出してアップグレードチェックを実行します。環境の確認、ターゲットバージョンのパッケージがアップロードされているかどうか、アップグレードに必要なプロダクトが揃っているかどうかなどを含みます。
コマンドラインで対応するAPIを呼び出す方法については、OceanBaseデータベースのアップグレードチェックを参照してください。このAPIは非同期タスクを作成し、タスクの進捗状況を確認するにはタスクの詳細情報を取得するを参照してください。タスクが完了するまで待機すると、アップグレードチェックが完了します。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/ob/upgrade/check
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、OceanBaseデータベースのアップグレードチェックを参照してください。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_ob_check_sync("x.x.x.x", "xxx.el7") # /api/v1/ob/upgrade/checkを呼び出す
···
obshell-sdk-goを使用して対応するAPIメソッドをリクエストする方法の詳細については、OceanBaseデータベースのアップグレードチェックを参照してください。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeObCheckRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeObCheckSyncWithRequest(req) // /api/v1/ob/upgrade/checkを呼び出す
···
ステップ3:アップグレードAPIを呼び出す
任意のobshellの/api/v1/ob/upgradeを呼び出してアップグレードを実行します。
コマンドラインで対応するAPIを呼び出す方法の説明については、OceanBaseデータベースのアップグレードを参照してください。このAPIは非同期のO&Mタスクを作成します。タスクの進捗状況を確認するには、タスクの詳細情報を取得するを参照してください。タスクが完了するまで待機すると、アップグレードも完了します。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/ob/upgrade
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、OceanBaseデータベースのアップグレードを参照してください。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_ob_sync("x.x.x.x", "xxx.el7") # /api/v1/ob/upgradeを呼び出す
···
obshell-sdk-goを使用して対応するAPIメソッドをリクエストする方法の詳細については、OceanBaseデータベースのアップグレードを参照してください。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeObRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeObSyncWithRequest(req) // /api/v1/ob/upgradeを呼び出す
···
ステップ4:アップグレードが成功したことを検証する
rootユーザーでOceanBaseデータベースのsysテナントにログインし、以下のコマンドを実行してデータベースのバージョンを確認します。
obclient [oceanbase]> select build_version from oceanbase.dba_ob_servers;以下のコマンドを実行して、obshellのバージョンを確認します。
obclient [oceanbase]> select version from ocs.all_agent;
全コード例
from obshell import ClientSet
from obshell.auth import PasswordAuth
client = ClientSet("10.10.10.1", PasswordAuth("****"))
# アップグレードに必要なパッケージをアップロードします。
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
# アップグレード前のチェックを実行します。
client.v1.upgrade_ob_check_sync("x.x.x.x", "xxx.el7")
# OceanBaseデータベースをアップグレードします。
client.v1.upgrade_ob_sync("x.x.x.x", "xxx.el7")
package main
import (
"github.com/oceanbase/obshell-sdk-go/services"
)
func main() {
var err error // 本番環境では、errorを処理する必要があります。
// クライアントインスタンスを作成します。ノードのアドレスは'10.10.10.1'、ポートは2886です。
// 所属クラスタのroot@sysパスワードは'****'です。
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "***")
// クラスタにRPMパッケージをアップロードします。
req1 := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
dag1, err := client.V1().UploadPkgWithRequest(req1)
req2 := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
dag2, err := client.V1().UploadPkgWithRequest(req2)
// アップグレード前のチェック。
req3 := client.V1().NewUpgradeObCheckRequest("x.x.x.x", "xxx.el7")
dag3, err := client.V1().UpgradeObCheckSyncWithRequest(req3)
// OceanBaseデータベースをアップグレードします。
req4 := client.V1().NewUpgradeObRequest("x.x.x.x", "xxx.el7")
dag4, err := client.V1().UpgradeObSyncWithRequest(req4)
}
obshellコマンドによるアップグレード
ステップ1:アップグレードコマンドを実行してアップグレードを実行する
任意のノードで obshell cluster upgrade コマンドを実行し、-d でターゲットバージョンパッケージの保存パスを指定します。コマンドの詳細については、obshell cluster upgradeを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster upgrade -d /home/admin/oceanbase/upgrade/
ステップ2:アップグレードが成功したことを確認する
rootユーザーでOceanBaseデータベースのsysテナントにログインし、以下のコマンドを実行してデータベースのバージョンを確認します。
obclient [oceanbase]> select build_version from oceanbase.dba_ob_servers;以下のコマンドを実行して、obshellのバージョンを確認します。
obclient [oceanbase]> select version from ocs.all_agent;