本記事では、obshell-sdk-goを使用してノードを初期化する方法について説明します。OceanBaseデータベースのデプロイに必要なRPMパッケージ(oceanbase-ce、oceanbase-ce-libs、oceanbase-ce-utils、obshellを含む)を各ノードに送信し、ディレクトリの初期化を完了することを目標とします。
説明
まずは、obshell-sdk-goクイックスタートを参照して、obshell-sdk-goの使用方法を確認することを推奨します。
注意事項
初期化ノードを実行する前に、必要なRPMパッケージをマシンにダウンロードしておいてください。手動でダウンロードすることも、obshell-sdk-goを使用してダウンロードすることもできます。obshell-sdk-goを使用したダウンロード方法の詳細については、RPMパッケージのダウンロードを参照してください。
サンプルコード
ターゲットディレクトリを強制クリア
クリアしない
package main
import (
"github.com/oceanbase/obshell-sdk-go/util"
)
func initNode() error {
pkgs := []string{
"/root/download/oceanbase-ce-libs-4.2.5.0-100000052024102022.el7.x86_64.rpm",
"/root/download/oceanbase-ce-4.2.5.0-100000052024102022.el7.x86_64.rpm",
// 上記の2つのソフトウェアパッケージだけでOceanBaseクラスタの初期化は十分ですが、今後の運用保守を容易にするため、以下の2つのソフトウェアパッケージも同時にインストールすることを推奨します。
// utilsはob_adminを提供し、今後の復旧時に復旧ウィンドウの解析機能を提供できます。
"/root/download/oceanbase-ce-utils-4.2.5.0-100000052024102022.el7.x86_64.rpm",
// 上記の構成で設定したOceanBaseデータベースバージョン4.2.5.0にはすでにobshellが含まれていますが、最新バージョンのobshellを使用することを推奨されているため、ここでは最新バージョンのobshellを個別にインストールしています。
"/root/download/obshell-4.2.4.3-12024110711.el7.x86_64.rpm",
}
ips := []string{
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
}
workDir := "/data/ob" // OceanBaseデータベースの作業ディレクトリ。事前に作成する必要はありません。OBServerノードの初期化時に自動的に作成されます。
nodeConfigs := make([]util.NodeConfig, 0)
for _, ip := range ips {
nodeConfigs = append(nodeConfigs, util.NewNodeConfig(ip, workDir, 2886))
}
// // util.UseRsyncは、rsyncを使用してファイルを転送するかどうかを示します。デフォルトはfalseです。
// // rsyncを使用してファイルを転送する場合、SDK実行マシンとターゲットマシン間で秘密鍵なしログインを設定する必要があり、両方にrsyncをインストールする必要があります。
// // デフォルトでは、scpと並列sftpを使用してファイルを転送します。速度はrsyncとほぼ変わりません。
// // util.UseRsync = trueを設定すると、rsync転送を有効にできます。
// util.UseRsync = false
// // util.CHUNK_SIZEは、並列sftpによるファイル転送のチャンクサイズを制御します。デフォルトは64MBです。
// // util.CHUNK_SIZEが小さいほど並列度が高く、転送速度が速くなりますが、より多くのSSHチャネルを占有します。
// // 現在のOceanBaseデータベースでは、単一ファイルの最大サイズは約450MBであり、そのうち64MBは7~8個のブロックに分割できます。
// // これには7~8個の同時接続が必要となります。sshd設定のデフォルトMaxSessionsは10なので、この値64MBは妥当なデフォルト値です。
// // sftpブロック転送のパフォーマンスを向上させたい場合は、この値を小さくして同時接続数を増やすことができます。
// // ただし、ターゲットマシン上のsshd configのMaxSessions設定をそれに応じて増やす必要があります。
// // 同時に、util.PARALLEL_SFTP_MAXの値も大きくする必要があります。これにより、並列度の上限を保証します。
// // util.PARALLEL_SFTP_MAXは、並列sftpの最大同時接続数がターゲットマシンのMaxSessionsを超えないように保護するために使用されます。デフォルトは8です。
// util.CHUNK_SIZE = 64 * 1024 * 1024
// util.PARALLEL_SFTP_MAX = 8
// // util.SCP_THRESHOLDは、scpによるファイル転送サイズを制御します。この値より大きいファイルはscpを使用して転送されます。デフォルトは1MBです。
// // 小さなファイルはメモリバックアップを使用した一括転送の方が効率が高いため、util.SCP_THRESHOLDより大きいファイルのみがscpを使用して転送されます。
// // util.SCP_THRESHOLD = 0を設定すると、scpを無効にできます。
// util.SCP_THRESHOLD = 1 * 1024 * 1024
// ノードの初期化
// パラメータの説明:
// rpmPackagePaths: インストールするソフトウェアパッケージのパス
// forceClean: OBServerノードの作業ディレクトリを強制的にクリーンアップするかどうか。Trueの場合、作業ディレクトリはクリーンアップされ、関連するすべてのプロセスがkillされます。
// configs: ノードの設定情報
err := util.InitNodes(pkgs, true, nodeConfigs...)
if err != nil {
return err
}
// 初期化完了
}
package main
import (
"github.com/oceanbase/obshell-sdk-go/util"
)
func initNode() error {
pkgs := []string{
"/root/download/oceanbase-ce-libs-4.2.5.0-100000052024102022.el7.x86_64.rpm",
"/root/download/oceanbase-ce-4.2.5.0-100000052024102022.el7.x86_64.rpm",
// 上記の2つのソフトウェアパッケージだけでOceanBaseクラスタの初期化に十分ですが、今後の運用保守を容易にするために、以下の2つのソフトウェアパッケージも同時にインストールすることを推奨します。
// utilsはob_adminを提供し、今後の復旧時に復旧ウィンドウの解析機能を提供できます。
"/root/download/oceanbase-ce-utils-4.2.5.0-100000052024102022.el7.x86_64.rpm",
// 上記の構成で設定されているOceanBaseデータベースバージョン4.2.5.0にはすでにobshellが含まれていますが、最新バージョンのobshellを使用することを推奨しているため、ここでは最新バージョンのobshellを個別にインストールしています。
"/root/download/obshell-4.2.4.3-12024110711.el7.x86_64.rpm",
}
ips := []string{
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
}
workDir := "/data/ob" // OceanBaseデータベースの作業ディレクトリは、事前に作成する必要はありません。OBServerノードの初期化時に自動的に作成されます。
nodeConfigs := make([]util.NodeConfig, 0)
for _, ip := range ips {
nodeConfigs = append(nodeConfigs, util.NewNodeConfig(ip, workDir, 2886))
}
// // util.UseRsyncは、rsyncによるファイル転送を使用するかどうかを示します。デフォルトはfalseです。
// // rsyncによるファイル転送を使用する場合、SDK実行マシンとターゲットマシン間で秘密鍵なしログインを設定する必要があり、両方にrsyncをインストールする必要があります。
// // デフォルトでは、scpと並列sftpを使用してファイルを転送します。速度はrsyncとほぼ同じです。
// // util.UseRsync = trueを設定すると、rsync転送を有効にできます。
// util.UseRsync = false
// // util.CHUNK_SIZEは、並列sftpによるファイル転送のチャンクサイズを制御します。デフォルトは64Mです。
// // util.CHUNK_SIZEが小さいほど並列度が高く、転送速度が速くなりますが、より多くのsshチャネルを占有します。
// // 現在のOceanBaseデータベースでは、単一ファイルの最大サイズは約450Mであり、そのうち64Mは7~8個のブロックに分割できます。
// // これには7~8個の同時接続が必要です。sshd設定のデフォルトMaxSessionsは10なので、この値64Mは合理的なデフォルト値です。
// // sftpブロック転送のパフォーマンスを向上させたい場合は、この値を小さくして同時接続数を増やすことができます。
// // ただし、ターゲットマシン上のsshd configのMaxSessions設定をそれに応じて増やす必要があります。
// // 同時に、util.PARALLEL_SFTP_MAXの値を大きくして、並列度の上限を保証する必要があります。
// // util.PARALLEL_SFTP_MAXは、並列sftpの最大同時接続数がターゲットマシンのMaxSessionsを超えないように保護するために使用されます。デフォルトは8です。
// util.CHUNK_SIZE = 64 * 1024 * 1024
// util.PARALLEL_SFTP_MAX = 8
// // util.SCP_THRESHOLDは、scpによるファイル転送サイズを制御します。この値を超えるファイルはscpで転送されます。デフォルトは1Mです。
// // 小さなファイルはメモリバックアップを使用した一括転送の方が効率が高いため、util.SCP_THRESHOLDを超えるファイルのみがscpで転送されます。
// // util.SCP_THRESHOLD = 0を設定すると、scpを無効にできます。
// util.SCP_THRESHOLD = 1 * 1024 * 1024
// ノードの初期化
// パラメータの説明:
// rpmPackagePaths: インストールするソフトウェアパッケージのパス
// forceClean: OBServerノードの作業ディレクトリを強制的にクリーンアップするかどうか。Trueの場合、作業ディレクトリはクリーンアップされ、関連するすべてのプロセスがkillされます。
// configs: ノードの設定情報
err := util.InitNodes(pkgs, false, nodeConfigs...)
if err != nil {
return err
}
// 初期化完了
}
関連ドキュメント
obshell-sdk-pythonを使用したAPIメソッドのリクエスト方法については、ノードの初期化を参照してください。