従来のロードバランス機能の課題
Vertica 9.2 の新機能として、接続ロードバランシングポリシーが追加されました。
従来のロードバランス機能は、データベースへのすべてのクライアント接続に対して単一のロードバランスしか設定することができませんでした。そのため以下図のような構成の場合、App Serverネットワークからの接続はロードバランスしますが、ETL Serverネットワークからの接続に対し、ロードバランスすることができませんでした。
従来のロードバランス設定
接続ロードバランシングポリシーでは、複数のロードバランス設定が行えるようになります。
そのため従来のロードバランス設定に比べてより柔軟に制御ができるようになりました。
接続ロードバランシングポリシーの設定(9.2新機能)
接続ロードバランシングポリシーの設定方法
ロードバランシングポリシーの構成
接続ロードバランシングポリシーは以下3つのオブジェクトより構成されます。
1.NETWORK ADDRESS
ノード上のIPアドレスとポート番号を紐づけたオブジェクト
2.LOAD BALANCE GROUP
複数のNETWORK ADDRESSをグループ化したオブジェクト
3.ROUTING RULE
LOAD BALANCE GROUPに対して接続元のネットワークセグメントを紐づけたオブジェクト
接続ロードバランシングポリシーの作成例
接続ロードバランシングポリシーを利用すれば、以下のような設定が可能です。
・アプリ接続を含めた一般的な接続は、ノードIPアドレス192.168.213.49~192.168.213.51でロードバランスを行う
・ETL処理が実行される内部ネットワーク(10.1.1.0/24)からの接続は、ノードIPアドレス10.1.1.81~10.1.1.83でロードバランスを行う
NETWORK ADDRESSの作成
NETWORK ADDRESSを作成し、ロードバランス対象のノードのIPアドレスとNETWORK ADDRESS名を紐付けます。
dbadmin=> CREATE NETWORK ADDRESS app_address01 ON v_vdb_node0001 WITH '192.168.213.49';
CREATE NETWORK ADDRESS
dbadmin=> CREATE NETWORK ADDRESS app_address02 ON v_vdb_node0002 WITH '192.168.213.50';
CREATE NETWORK ADDRESS
dbadmin=> CREATE NETWORK ADDRESS app_address03 ON v_vdb_node0003 WITH '192.168.213.51';
CREATE NETWORK ADDRESS
dbadmin=> CREATE NETWORK ADDRESS etl_address01 ON v_vdb_node0001 WITH '10.1.1.81';
CREATE NETWORK ADDRESS
dbadmin=> CREATE NETWORK ADDRESS etl_address02 ON v_vdb_node0002 WITH '10.1.1.82';
CREATE NETWORK ADDRESS
dbadmin=> CREATE NETWORK ADDRESS etl_address03 ON v_vdb_node0003 WITH '10.1.1.83';
CREATE NETWORK ADDRESSLOAD BALANCE GROUPの作成
NETWORK ADDRESSをグルーピングしたLOAD BALANCE GROUPを作成します。
ロードバランスはLOAD BALANCE GROUP単位で行われます。
dbadmin=> CREATE LOAD BALANCE GROUP app_group WITH ADDRESS app_address01,app_address02,app_address03;
CREATE LOAD BALANCE GROUP
dbadmin=> CREATE LOAD BALANCE GROUP etl_group WITH ADDRESS etl_address01,etl_address02,etl_address03;
CREATE LOAD BALANCE GROUPROUTING RULEの作成
LOAD BALANCE GROUPと接続元のIPアドレス(セグメント)を紐づけたROUTING RULEを作成します。
* 10.1.1.0/24セグメントからの接続はetl_groupに紐付けられているNETWORK ADDRESSでロードバランスされるようにする
dbadmin=> CREATE ROUTING RULE etl_rule ROUTE '10.1.1.0/24' TO etl_group;
CREATE ROUTING RULE
*その他のIPアドレスからの接続はapp_groupに紐付けられているNETWORK ADDRESSでロードバランスされるようにする
dbadmin=> CREATE ROUTING RULE app_rule ROUTE '0.0.0.0/0' TO app_group;
CREATE ROUTING RULEロードバランスのテスト
DESCRIBE_LOAD_BALANCE_DECISION関数を利用することで、指定したIPアドレスから接続した際にどのROUTING RULEに基づいてロードバランスされるかをテストすることができます。
dbadmin=> SELECT DESCRIBE_LOAD_BALANCE_DECISION('192.168.10.100');
DESCRIBE_LOAD_BALANCE_DECISION
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Describing load balance decision for address [192.168.10.100]
Load balance cache internal version id (node-local): [1]
Considered rule [etl_rule] source ip filter [10.1.1.0/24]... input address does not match source ip filter for this rule.
Considered rule [app_rule] source ip filter [0.0.0.0/0]... input address matches this rule ★このルールに合致することを確認
Matched to load balance group [app_group] the group has policy [ROUNDROBIN] number of addresses [3]
(0) LB Address: [192.168.213.49]:5433 ★ロードバランス対象ノードのIPアドレス
(1) LB Address: [192.168.213.50]:5433 ★ロードバランス対象ノードのIPアドレス
(2) LB Address: [192.168.213.51]:5433 ★ロードバランス対象ノードのIPアドレス
Chose address at position [2]
Routing table decision: Success. Load balance redirect to: [192.168.213.51] port [5433]
(1 row)
dbadmin=> SELECT DESCRIBE_LOAD_BALANCE_DECISION('10.1.1.100');
DESCRIBE_LOAD_BALANCE_DECISION
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Describing load balance decision for address [10.1.1.100]
Load balance cache internal version id (node-local): [1]
Considered rule [etl_rule] source ip filter [10.1.1.0/24]... input address matches this rule ★このルールに合致することを確認
Matched to load balance group [etl_group] the group has policy [ROUNDROBIN] number of addresses [3]
(0) LB Address: [10.1.1.81]:5433 ★ロードバランス対象ノードのIPアドレス
(1) LB Address: [10.1.1.82]:5433 ★ロードバランス対象ノードのIPアドレス
(2) LB Address: [10.1.1.83]:5433 ★ロードバランス対象ノードのIPアドレス
Chose address at position [0]
Routing table decision: Success. Load balance redirect to: [10.1.1.81] port [5433]
(1 row)接続ロードバランシングポリシーの設定は以上です。
注意点
障害発生時に正常にロードバランスができないため、9.3以降でご利用いただくことを推奨します。
参考情報
About Connection Load Balancing Policies
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/ManagingClientConnections/LoadBalancing/AboutConnectionLoadBalancingPolicies.htm
ロードバランスの概要
https://www.ashisuto.co.jp/cm/analytics-database/load-balance.html
ロードバランスの設定方法
https://www.ashisuto.co.jp/cm/analytics-database/load-balance_configuration.html
ロードバランスおよび接続時フェイルオーバー機能を使用したvsqlからの接続
https://www.ashisuto.co.jp/cm/analytics-database/vsql_lb_cf.html
リカバリ中の「ロードバランス」と「接続時フェイルオーバー」の動作について
https://www.ashisuto.co.jp/cm/analytics-database/recovery_action.html
検証バージョン
この記事の内容はVertica 9.3で確認しています。
更新履歴
2020/02/18 Vertica9.3の動作確認にともない、参考情報と検証バージョンを修正。障害発生時の注意点を追加
2019/06/14 本記事を公開

