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 インターフェースを呼び出して、パッケージをアップロードします。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:アップグレードチェックインターフェースを呼び出す(オプション)
任意のobshellの/api/v1/ob/upgrade/checkを呼び出してアップグレードチェックを行います。環境の確認、対象バージョンのパッケージがアップロードされているかどうか、アップグレードに必要な製品が揃っているかどうかなどをチェックします。
コマンドラインで対応するAPIを呼び出す方法の説明については、OceanBaseデータベースのアップグレードチェックを参照してください。このインターフェースは非同期タスクを作成します。タスクの進捗状況を確認するには、タスクの詳細情報を取得するを参照してください。タスクが完了すると、アップグレードチェックも完了します。
[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;