本記事では、obshell-sdk-pythonを使用してノードを初期化する方法について説明します。目的は、OceanBaseデータベースのデプロイに必要なRPMパッケージ(oceanbase-ce、oceanbase-ce-libs、oceanbase-ce-utils、obshellを含む)を各ノードに送信し、ディレクトリの初期化を完了することです。
説明
まず、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メソッドを呼び出す方法については、ノードの初期化を参照してください。