本記事では、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メソッドのリクエスト方法については、ノードの初期化を参照してください。