obshellによる非obshellデプロイメントのOceanBaseクラスタの引き継ぎには、2つの方法があります。
SDKメソッドによる引き継ぎ
obshellコマンドによる引き継ぎ
本記事では、OCPでデプロイされた3レプリカのOceanBaseクラスタを例に、obshellを使用してOceanBaseクラスタを引き継ぐ方法について説明します。OceanBaseクラスタがどのような状態であっても、obshellによる引き継ぎは可能です。
デプロイメントモード
本記事では、3台のマシンの使用状況は以下のとおりです:
| ロール | マシン | 備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
SDKメソッドによるオーバーテイク
例は以下のとおりです。obshell-sdk-pythonを使用してクラスタを取得する方法については、クラスタの取得を参照してください。
from obshell import takeover, NodeConfig
def init_nodes():
ips = [
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
]
work_dir = "/data/ob" # OceanBaseデータベースの作業ディレクトリ
nodes_config = []
for _, ip in enumerate(ips):
node = NodeConfig(ip, work_dir)
nodes_config.append(node)
takeover("pwd", nodes_config) # pwdは取得対象のクラスタのroot@sysユーザーのパスワードを表します。実際のパスワードに置き換える必要があります。
例は以下のとおりです。obshell-sdk-goを使用してクラスタを引き継ぐ方法については、クラスタの引き継ぎを参照してください。
func main() {
ips := []string{
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
}
workDir := "/data/ob" // OceanBaseデータベースの作業ディレクトリ
nodeConfigs := make([]util.NodeConfig, 0)
for _, ip := range ips {
nodeConfigs = append(nodeConfigs, util.NewNodeConfig(ip, workDir, 2886))
}
// pwdは引き継がれるクラスタのroot@sysユーザーのパスワードを表します。実際のパスワードに置き換える必要があります。
if err := util.Takeover("pwd", nodeConfigs...); err != nil {
panic(err)
}
}
obshellコマンドによるオーバーテイク
ステップ1:パスワード環境変数の設定
現在のOceanBaseクラスタのsysテナントのrootユーザーにパスワードが設定されている場合、任意のOBServerノードで以下のコマンドを実行して、obshellがパスワードを取得できるようにする必要があります。ここでは、10.10.10.1ノードで実行する例を示します。pwdは、オーバーテイク対象のクラスタのroot@sysユーザーのパスワードを表し、実際のパスワードに置き換える必要があります。
[admin@test001 ~]$ export OB_ROOT_PASSWORD="pwd"
ステップ2:クラスタのオーバーテイク
ステップ1のノード(10.10.10.1)で以下のコマンドを実行すると、現在のOceanBaseクラスタ内の各OBServerノードに属するobshellが起動され、オーバーテイクが実行されます。obshellは、OceanBaseデータベースのインストールディレクトリ内のbinディレクトリにあります(/home/admin/oceanbase/bin/obshell)。コマンドの詳細については、obshell cluster startを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -a
オーバーテイクの成功確認
任意のobshellの/api/v1/ob/infoインターフェースを呼び出すと、agent_infoのidentityがCLUSTER AGENTの場合、現在のOceanBaseクラスタはobshellによって運用管理されています。インターフェースの詳細については、OceanBase情報のクエリを参照してください。
説明
obshellは呼び出されたAPIに対してセキュリティチェックを行います。そのため、APIを呼び出す前に、APIハイブリッド暗号化の記事に従ってリクエストを暗号化し、curlコマンドで暗号化済みのリクエストヘッダー(${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
呼び出し
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X GET http://10.10.10.1:2886/api/v1/ob/infoレスポンス
{ ....... "agent_info": [ { "ip": "10.10.10.1", "identity": "CLUSTER AGENT", ...... }, { "ip": "10.10.10.2", "identity": "CLUSTER AGENT", ...... }, { "ip": "10.10.10.3", "identity": "CLUSTER AGENT", ...... } ], ...... }
説明
OceanBaseクラスタがobshellによって運用管理される場合、オーバーテイクが成功したことを意味します。