本記事では、obshell-sdk-pythonを使用してノードを初期化する方法について説明します。OceanBaseデータベースのデプロイに必要なRPMパッケージ(oceanbase-ce、oceanbase-ce-libs、oceanbase-ce-utils、obshellを含む)を各ノードに送信し、ディレクトリの初期化を完了することを目的としています。
説明
まずは、obshell-sdk-pythonクイックスタートを参照して、obshell-sdk-pythonの使用方法を確認することを推奨します。
注意事項
初期化ノードを実行する前に、必要なRPMパッケージをマシンにダウンロードしておいてください。手動でダウンロードすることも、obshell-sdk-pythonを使用してダウンロードすることもできます。obshell-sdk-pythonを使用したダウンロード方法の詳細については、RPMパッケージのダウンロードを参照してください。
サンプルコード
ターゲットディレクトリを強制的にクリーンアップ
ターゲットディレクトリを強制的にクリーンアップしません。
from obshell import initialize_nodes, start_obshell, NodeConfig
def init_nodes():
pkgs = [
"/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 = [
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
]
work_dir = "/data/ob" # OceanBaseデータベースの作業ディレクトリ。事前に作成する必要はありません。OBServerノードの初期化時に自動的に作成されます。
nodes_config = []
for _, ip in enumerate(ips):
node = NodeConfig(ip, work_dir)
nodes_config.append(node)
## SDKはrsyncを使用するかどうかを自動的に判断します。rsyncを使用しない場合、転送効率は比較的低くなります。
## rsyncを使用してファイルを転送する場合、SDK実行マシンとターゲットマシン間で秘密鍵なしログインを設定する必要があり、両方にrsyncをインストールする必要があります。
## 以下の方法でrsync転送を無効にできますが、推奨されません。
# from obshell.ssh import USE_RSYNC
# USE_RSYNC = False
# ノードの初期化
# パラメータの説明:
# rpm_packages: インストールするソフトウェアパッケージのパス
# force_clean: OBServerノードの作業ディレクトリを強制的にクリーンアップするかどうか。Trueの場合、作業ディレクトリはクリーンアップされ、関連するすべてのプロセスがkillされます。
# configs: クラスタ構成パラメータ。NodeConfig型のリストである必要があります。
initialize_nodes(rpm_packages=pkgs, force_clean=True, configs=nodes_config)
# 初期化完了
from obshell import initialize_nodes, start_obshell, NodeConfig
def init_nodes():
pkgs = [
"/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 = [
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
]
work_dir = "/data/ob" # OceanBaseデータベースの作業ディレクトリ。事前に作成する必要はありません。OBServerノードの初期化時に自動的に作成されます。
nodes_config = []
for _, ip in enumerate(ips):
node = NodeConfig(ip, work_dir)
nodes_config.append(node)
## SDKはrsyncを使用するかどうかを自動的に判断します。rsyncを使用しない場合、転送効率は比較的低くなります。
## rsyncを使用してファイルを転送する場合、SDK実行マシンとターゲットマシン間で秘密鍵なしログインを設定する必要があり、両方にrsyncをインストールする必要があります。
## 以下の方法でrsync転送を無効にできますが、推奨されません。
# from obshell.ssh import USE_RSYNC
# USE_RSYNC = False
# ノードの初期化
# パラメータの説明:
# rpm_packages: インストールする必要があるソフトウェアパッケージのパス
# force_clean: OBServerノードの作業ディレクトリを強制的にクリーンアップするかどうか。Trueの場合、作業ディレクトリはクリーンアップされ、関連するすべてのプロセスがkillされます。
# configs: クラスタ構成パラメータ。NodeConfig型のリストである必要があります。
initialize_nodes(rpm_packages=pkgs, force_clean=False, configs=nodes_config)
# 初期化完了
関連ドキュメント
obshell-sdk-goによるAPIメソッドのリクエスト方法の詳細については、ノードの初期化を参照してください。