obshellのアップグレードには、次の2つの方法があります。
APIを呼び出してアップグレードする
obshellコマンドを使用してアップグレードする
本記事では、3レプリカのOceanBaseクラスタを例に、obshellのアップグレード方法を説明します。
前提条件
OceanBaseクラスタはobshellによって運用管理されていること。詳細な判断方法および接続操作については、obshell以外でデプロイされたクラスタの接続を参照してください。
OceanBaseクラスタのすべてのOBServerノードとobshellが正常に動作していること。
デプロイメントモード
本記事では、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 インターフェースを呼び出してパッケージをアップロードします。obshellのアップグレード時には obshell パッケージをアップロードする必要があります。
コマンドラインで対応するAPIインターフェースを呼び出す方法の説明については、RPMパッケージのアップロードを参照してください。
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X POST -F "file=@/data/upgrade/obshell-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_package("/data/upgrade/obshell-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/obshell-x.x.x.x-xxx.el7.x86_64.rpm") // /api/v1/upgrade/packageを呼び出す
dag, err := client.V1().UploadPkgWithRequest(req)
···
ステップ2:アップグレードチェックインターフェースを呼び出す(オプション)
任意のobshellの /api/v1/agent/upgrade/check を呼び出してアップグレードチェックを行います。対象バージョンのパッケージがアップロードされているか、アップグレードに必要な製品が揃っているかなどを確認します。
コマンドラインで対応するAPIを呼び出す方法の説明については、obshell アップグレードチェックを参照してください。このインターフェースは非同期タスクを作成します。タスクの進捗状況を確認するには、タスクの詳細情報を取得するを参照してください。タスクが完了すると、アップグレードチェックも完了します。
[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/agent/upgrade/check
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の紹介については、obshell アップグレードチェックを参照してください。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_agent_check_sync("x.x.x.x", "xxx.el7") # /api/v1/agent/upgrade/checkを呼び出す
···
obshell-sdk-goを使用して対応するAPIメソッドを呼び出す方法の紹介については、obshell アップグレードチェックを参照してください。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeAgentCheckRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeAgentCheckSyncWithRequest(req) // /api/v1/agent/upgrade/checkを呼び出す
···
ステップ3:アップグレードインターフェースを呼び出す
任意のobshellの/api/v1/agent/upgradeを呼び出してアップグレードします。
コマンドラインで対応するAPIを呼び出す方法の説明については、obshell アップグレードを参照してください。このインターフェースは非同期の運用保守タスクを作成します。タスクの進捗状況を確認するには、タスクの詳細情報を取得するを参照してください。タスクが完了すると、アップグレードも完了します。
[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/agent/upgrade
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の紹介については、obshell アップグレードを参照してください。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_agent_sync("x.x.x.x", "xxx.el7") # /api/v1/agent/upgradeを呼び出す
···
obshell-sdk-goによる対応するAPIメソッドのリクエストについては、obshell アップグレードを参照してください。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeAgentRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeAgentSyncWithRequest(req) // /api/v1/agent/upgradeを呼び出す
···
ステップ4:アップグレードが正常に完了したことを確認する
rootユーザーでOceanBaseデータベースのsysテナントにログインし、以下のコマンドを実行して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/obshell-x.x.x.x-xxx.el7.x86_64.rpm")
# アップグレード前のチェック。
client.v1.upgrade_agent_check_sync("x.x.x.x", "xxx.el7")
# obshellのアップグレード
client.v1.upgrade_agent_sync("x.x.x.x", "xxx.el7")
package main
import (
"github.com/oceanbase/obshell-sdk-go/services"
)
func main() {
var err error // 本番環境ではエラー処理が必要です。
// クライアントインスタンスを作成します。ノードのアドレスは '10.10.10.1'、ポートは2886です。
// 所在クラスタのroot@sysパスワードは '****' です。
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "***")
// クラスタにRPMパッケージをアップロードします。
req1 := client.V1().NewUploadPkgRequest("/data/upgrade/obshell-x.x.x.x-xxx.el7.x86_64.rpm")
dag1, err := client.V1().UploadPkgWithRequest(req1)
// アップグレード前のチェック。
req2 := client.V1().NewUpgradeObCheckRequest("x.x.x.x", "xxx.el7")
dag2, err := client.V1().UpgradeObCheckSyncWithRequest(req2)
// obshellのアップグレード。
req3 := client.V1().NewUpgradeObRequest("x.x.x.x", "xxx.el7")
dag3, err := client.V1().UpgradeObSyncWithRequest(req3)
}
obshellコマンドによるアップグレード
ステップ1:アップグレードコマンドを実行してアップグレードを開始する
任意のノードで obshell agent upgrade コマンドを実行し、-d オプションで対象バージョンパッケージの保存先パスを指定します。コマンドの詳細は obshell agent upgrade を参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell agent upgrade -d /data/upgrade/
ステップ2:アップグレードの成功を確認する
rootユーザーでOceanBaseデータベースのsysテナントにログインし、以下のコマンドを実行してobshellのバージョンを確認します。
obclient [oceanbase]> select version from ocs.all_agent;