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を呼び出して、ノードのパスワードを設定します。
コマンドラインで対応する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クラスタへの接続の詳細については、公式Webサイトの「OceanBaseデータベース」ドキュメントOceanBaseデータベースに接続するの章を参照してください。