obshellは現在、obshellコマンドを使用したOBProxyのデプロイをサポートしていません。本記事では、3レプリカのOceanBaseクラスタを例に、APIを呼び出してOBProxyをデプロイし、そのOceanBaseクラスタに関連付ける方法を紹介します。
説明
本記事の操作は、OBProxyが関連付けるOceanBaseクラスタがobshellによって管理されているかどうかに制限されません。
obshell V4.2.6からOBProxyのデプロイがサポートされています。
デプロイメントモード
本記事では、4台のマシンの使用状況は以下のとおりです。obshellはデフォルトポート2886を使用します。
ロール |
マシン |
備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
| OBProxyサービスをデプロイするノード | 10.10.10.4 | このノードにはobshellがデプロイ済みです |
手順
説明
コマンドラインでAPIを呼び出す場合、obshellは呼び出されるAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、まずAPI混合暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化されたリクエストヘッダー(${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
ステップ1:obshellを起動する
OBProxyサービスをデプロイするノードでobshellを起動します。コマンドの詳細については、obshell agent startを参照してください。
[admin@test004 ~]$ /home/admin/oceanbase/bin/obshell agent start --ip 10.10.10.4 -P 2886
ステップ2:ノードのパスワードを設定する
obshellの /api/v1/agent/password インターフェースを呼び出して、ノードのパスワードを設定します。
コマンドラインで対応するAPIを呼び出す方法の説明については、ノードパスワードの設定を参照してください。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.4:2886/api/v1/agent/password
暗号化前のリクエストボディの内容例は以下のとおりです:
{
"password": "*****"
}
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、ノードパスワードの設定を参照してください。
...
client = ClientSet("10.10.10.4", 2886)
client.v1.set_agent_password("*****")
# このobshellノードが管理するOceanBaseクラスタがある場合、clientの作成時にクラスタのroot@sysパスワードを指定する必要があります。
# client = ClientSet("10.10.10.4", 2886, PasswordAuth "***"))
...
ステップ3:proxyro@sysユーザーを作成する
OBProxyはproxyro@sysユーザーを使用して関連付けられたOceanBaseクラスタに接続する必要があります。対象クラスタでsysテナント内にproxyroユーザーが作成されていない場合は、まず手動でproxyroユーザーを作成する必要があります。
対象クラスタがobshellによって運用管理されていない場合は、ユーザーの作成の内容を参照してproxyro@sysユーザーを作成してください。対象クラスタがobshellによって運用管理されている場合は、クラスタ内の任意のobshellの/api/v1/tenant/{name}/userインターフェースを呼び出してproxyro@sysユーザーを作成し、適切な権限を付与します。例は以下のとおりです。
コマンドラインで対応するAPIを呼び出す方法については、ユーザーの作成を参照してください。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/tenant/sys/user
暗号化前のリクエストボディの内容例は以下のとおりです:
{
"user_name": "proxyro",
"password": "*****",
"global_privileges": [
"CREATE",
"DELETE"
],
"db_privileges": [
{
"db_name": "oceanbase",
"privileges": [
"DROP"
]
}
],
"host_name": "%"
}
obshell-sdk-pythonで対応するAPIメソッドを呼び出す方法の詳細については、ユーザーの作成を参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
db_priv = {
"db_name": "oceanbase",
"privileges": ["SELECT"]
}
client.v1.create_user(user_name="proxyro", password="*****", db_privileges=[db_priv])
...
ステップ4:OBProxyのデプロイ
OceanBaseソフトウェアダウンロードセンターにアクセスして、OBProxyのインストールパッケージを手動でダウンロードします。その後、デプロイ対象のマシンにコピーし、作業ディレクトリに解凍します。次に、ターゲットのobshellで /api/v1/obproxy インターフェースを呼び出してOBProxyをデプロイし、ターゲットクラスタに関連付けます。
コマンドラインで対応するAPIを呼び出す方法の説明については、OBProxyのデプロイを参照してください。
説明
APIを呼び出すと非同期のO&Mタスクが作成されます。タスクの進捗状況を確認する方法については、タスクの詳細情報を取得するを参照してください。タスクが完了すると、OBProxyのデプロイも完了します。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Agent-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.4:2886/api/v1/obproxy
暗号化前のリクエストボディの内容例は以下のとおりです:
{
"home_path": "/data/obproxy",
"name": "myobproxy",
"sql_port": 2883,
"exporter_port": 2884,
"rpc_port": 2885,
"rs_list": "10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881",
"proxyro_password": "********",
"obproxy_sys_password": "********",
"parameters": {
"server_tcp_keepidle": "5",
"enable_strict_kernel_release": "false"
}
}
obshell-sdk-pythonで対応するAPIメソッドをリクエストする方法の詳細については、OBProxyの作成を参照してください。
...
client = ClientSet("10.10.10.4", 2886, PasswordAuth(agent_password="****"))
client.v1.add_obproxy_sync(
home_path="/data/obproxy",
app_name="myobproxy",
rs_list="10.10.10.1:2881;10.10.10.2:2881:10.10.10.3:2881",
proxyro_password="********",
obproxy_sys_password="********",
)
...
ステップ5:デプロイが成功したかどうかを確認する
以下のコマンドを実行して、OBProxyプロセスが存在するかどうかを確認します。
[admin@test001 ~]$ ps -ef | grep obproxy
また、このOBProxyプロキシを介してOceanBaseクラスタにアクセスし、接続が成功するかどうかを確認することもできます。
obclient -h10.10.10.4 -uroot@sys#obdemo -P2883 -p -c -A
OceanBaseクラスタへの接続の詳細については、公式サイトの「OceanBaseデータベース」ドキュメントOceanBaseデータベースへの接続の章を参照してください。