本記事では、obshell-sdk-goを使用して初期化されていないクラスタにノードを追加する方法を紹介します。
説明
まずは obshell-sdk-goクイックスタート を参照し、obshell-sdk-goの使用方法を確認することを推奨します。
注意事項
初期化されていないクラスタにノードを追加する前に、以下の要件に注意する必要があります:
リクエストのクライアントに対応するノードは、初期化待ちのクラスタ内に存在している必要があります(自己追加は除く)。
追加するノードがこれまでにどのクラスタにも参加したことがないことを確認する必要があります。
自己ノードを追加する場合、そのノードがこれまでにどのクラスタにも参加したことがなく、かつobshellが正常に実行されていることを確認する必要があります。
サンプルコード
以下のコードは、10.10.10.1マシンに自己ノードを追加してマスターとし、さらに他のノード(10.10.10.2)を追加してフォロワーとするために使用されます。
タスクの同期実行
package main
import (
"github.com/oceanbase/obshell-sdk-go/services"
)
func main() {
// クライアントインスタンスを作成します。ノードアドレスは '10.10.10.1'、ポートは2886です。
client, err := services.NewClient("10.10.10.1", 2886)
if err != nil {
panic(err)
}
// 自分自身にjoinします。
req := client.V1().NewJoinRequest("10.10.10.1", 2886, "zone1")
if _, err = client.V1().JoinSyncWithRequest(req); err != nil {
panic(err)
}
// '10.10.10.1' が存在するクラスタに、ノード '10.10.10.2:2886' を追加します。
req = client.V1().NewJoinRequest("10.10.10.2", 2886, "zone1")
if _, err = client.V1().JoinSyncWithRequest(req); err != nil {
panic(err)
}
}
タブ タスクの非同期実行
package main
import (
"github.com/oceanbase/obshell-sdk-go/services"
)
func main() {
// clientインスタンスを作成します。ノードアドレスは'10.10.10.1'、ポートは2886です。
client, err := services.NewClient("10.10.10.1", 2886)
if err != nil {
panic(err)
}
// 自分自身にjoinします。
req := client.V1().NewJoinRequest("10.10.10.1", 2886, "zone1")
dag, err := client.V1().JoinWithRequest(req)
if err != nil {
panic(err)
}
// タスクが成功するまで待機します
if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil {
panic(err)
}
// '10.10.10.1'が存在するクラスタに、ノード'10.10.10.2:2886'を追加します。
req = client.V1().NewJoinRequest("10.10.10.2", 2886, "zone1")
dag, err = client.V1().JoinWithRequest(req)
if err != nil {
panic(err)
}
// タスクが成功するまで待機します
if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil {
panic(err)
}
}
関連ドキュメント
クラスタ初期化前にノードを追加するAPIの説明については、クラスタ初期化前にノードを追加するを参照してください。
obshell-sdk-pythonを使用したAPIメソッドのリクエスト方法の紹介については、クラスタ初期化前にノードを追加するを参照してください。