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 APIを呼び出して、パッケージをアップロードします。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アップグレードチェックを参照してください。この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/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:アップグレードAPIを呼び出す
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;