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:アップグレードチェックAPIを呼び出す(オプション)
任意の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 アップグレードを参照してください。この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/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 // 本番環境では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;