ユースケース4:データベース固有の負荷分散
-
負荷分散機能を有効にし、MSSQL または MySQL タイプの負荷分散仮想サーバーを構成します。
-
データベースをホストするサービスを構成し、サービスを仮想サーバーにバインドします。モニターがデータベースサーバーにログオンするには有効なユーザー認証情報が必要なので、各サーバーでデータベースユーザーアカウントを構成し、そのユーザーアカウントをNetScalerアプライアンスに追加する必要があります。
-
次に、MSSQL-ECV または MYSQL-ECV モニターを設定し、モニターを各サービスにバインドします。
-
最後に、構成をテストして、意図したとおりに機能することを確認する必要があります。これらの構成タスクを実行する前に、データベース固有の負荷分散の仕組みを理解しておいてください。
データベース固有の負荷分散の仕組み
負荷分散を有効にする
CLI を使用して負荷分散を有効にする
enable ns feature LB
show ns feature
> enable ns feature LoadBalancing
Done
> show ns feature
Feature Acronym Status
------- ------- ------
1) Web Logging WL OFF
2) Surge Protection SP ON
3) Load Balancing LB ON
.
.
.
24) NetScaler Push push OFF
Done
GUI を使用して負荷分散を有効にする
データベース固有の負荷分散用の負荷分散仮想サーバーの構成
CLIを使用してデータベース固有の負荷分散用の負荷分散仮想サーバーを構成する
add lb vserver <name> <serviceType> <ipAddress> <port> -dbsLb ENABLED
show lb vserver <name>
サービスを構成する
データベースユーザーを構成する
nsconfig に追加されたデータベースユーザー名とパスワードがファイルに追加されます。
CLI を使用してデータベースユーザーを追加する
add db user <username> - password <password>
add db user nsdbuser -password dd260427edf
GUI を使用してデータベースユーザーを追加する
CLI を使用してデータベースユーザーのパスワードをリセットする
set db user <username> -password <password>
set db user nsdbuser -password dd260538abs
GUI を使用してデータベースユーザーのパスワードをリセットする
CLI を使用してデータベースユーザーを削除する
rm db user <username>
rm db user nsdbuser
GUI を使用してデータベースユーザーを削除する
アクティブなデータベースの名前を取得するようにモニターを設定
select name from sys.databases where state=0
CLI を使用して、サービスでホストされているすべてのアクティブなデータベースの名前を取得するようにモニターを設定します
add lb monitor <monitorName> <type> -userName <string> -sqlQuery <text> -evalRule <expression> -storedb ENABLED
show lb monitor <monitorName>
GUI を使用して、サービスでホストされているすべてのアクティブなデータベースの名前を取得するようにモニターを構成します
MSSQL の可用性グループ展開サポート
| サービス | サービス上のアクティブなデータベースのリスト |
|---|---|
| S1 | DB1、DB2、DB3、DB4 |
| S2 | DB3、DB4 |
| S3 | DB3、DB4 |
| S4 | DB1、DB2 |
| S5 | DB1、DB2 |
| 可用性グループ | データベース | 可用性グループのサーバーを表すサービス |
|---|---|---|
| AV1 | DB1、DB2 | S1, S4, S5 |
| AV2 | DB3、DB4 | S1, S2, S3 |
-
AV1 の READ クエリは S4 と S5 の間で負荷分散されます。S1 は AV1 のプライマリです。
-
AV1 の書き込みクエリは L1 に送信されます。
-
AV2 の READ クエリは S1 と S3 の間で負荷分散されます。S2 は AV2 のプライマリです。
-
AV1 の書き込みクエリは L2 に送信されます。
設定例
-
負荷分散とコンテンツスイッチング仮想サーバーを設定します。
-
add lb vserver lbwrite -dbslb enabled -
add lbvserver lbread MSSQL -dbslb enabled -
add csvserver csv MSSQL 1.1.1.10 1433
-
-
可用性グループごとに 1 つずつ、合計 2 つのリスナーサービスと、データベース DB1 から DB4 を表す 5 つのサービス S1 ~ S5 を設定します。
-
add service L1 1.1.1.11 MSSQL 1433 -
add service L2 1.1.1.12 MSSQL 1433 -
add service s1 1.1.1.13 MSSQL 1433 -
add service s2 1.1.1.14 MSSQL 1433 -
add service s3 1.1.1.15 MSSQL 1433 -
add service s4 1.1.1.16 MSSQL 1433 -
add service s5 1.1.1.17 MSSQL 1433
-
-
サービスを負荷分散仮想サーバーにバインドします。
-
bind lbvserver lbwrite L1 -
bind lbvserver lbwrite L2 -
bind lbvserver lbread s1 -
bind lbvserver lbread s2 -
bind lbvserver lbread s3 -
bind lbvserver lbread s4 -
bind lbvserver lbread s5
-
-
データベースユーザーを設定します。
-
add db user nsdbuser1 -password dd260427edf -
add db user nsdbuser2 -password ccd1234xyzw
-
-
リスナーサービスごとに Monitor_L1 と Monitor_L2 の 2 つのモニターを構成して、その可用性グループ内のアクティブなデータベースのリストを取得します。モニター monitor1 を追加して、セカンダリデータベースサーバーインスタンスのデータベースのリストを取得します。
-
add lb monitor monitor_L1 MSSQL-ECV -userName user1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replica_states b ON a.replica_id=b.replica_id INNER JOIN sys.availability_group_listeners c on b.group_id = c.group_id INNER JOIN sys.availability_group_listener_ip_addresses d on c.listener_id = d.listener_id WHERE b.role = 1 and d.ip_address like '1.1.1.11'" -evalRule "MSSQL.RES.TYPE.NE(ERROR)” –storedb ENABLED -
add lb monitor monitor_L2 MSSQL-ECV -userNameuser1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replicca_states b ON a.replica_id=b.replica_id INNER JOIN sys.availability_group_listeners c on b.group_id = c.group_id INNER JOIN sys.availability_group_listener_ip_addresses d on c.listener_id = d.listener_id WHERE b.role = 1 and d.ip_address like '1.1.1.12'" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED -
add lb monitor monitor1 MSSQL-ECV -userNameuser1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replica_states b ON a.replica_id=b.replica_id WHERE b.role = 2" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED
-
-
読み取りポリシーと書き込みポリシーを設定します。
-
add cs policy pol_write -rule "MSSQL.REQ.QUERY.TEXT.CONTAINS("insert")" -
add cs policy pol_read -rule "MSSQL.REQ.QUERY.TEXT.CONTAINS("select")"
-
-
ポリシーをコンテンツスイッチング仮想サーバーにバインドします。
-
bind csvserver csv -targetLBVserver lbwrite -policyName pol_write -priority 11 -
bind csvserver csv -targetLBVserver lbread -policyName pol_read -priority 12
-
-
モニターをサービスにバインドします。モニターをサービス L1 と L2 にバインドして、リスナーとなる可用性グループのアクティブなデータベースのリストを取得します。読み取り専用仮想サーバーにバインドされているすべてのサービスにモニターをバインドします。
-
bind service L1 -monitorName monitor_L1 -
bind service L2 -monitorName monitor_L2 -
bind service s1 -monitorName monitor1 -
bind service s2 -monitorName monitor1 -
bind service s3 -monitorName monitor1 -
bind service s4 -monitorName monitor1 -
bind service s5 -monitorName monitor1
-
MSSQL 仮想サーバーの設定例
add lb vserver DBSpecificLB1 MSSQL 192.0.2.10 1433 -dbsLb ENABLED
Done
show lb vserver DBSpecificLB1
DBSpecificLB1 (192.0.2.10:1433) - MSSQL Type: ADDRESS
. . .
DBS_LB: ENABLED
Done
add lb monitor mssql-monitor1 MSSQL-ECV -userName user1 -sqlQuery "select name from sys.databases where state=0" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb EN
Done
show lb monitor mssql-monitor1
1) Name.......: mssql-monitor1 Type......: MSSQL-ECV
...
Special parameters: Database.....:""
User name.....:"user1"
Query..:select name from sys.databases where state=0 EvalRule...:MSSQL.RES.TYPE.NE(ERROR)
Version...:70 STORE_DB...:ENABLED
Done
MySQL 仮想サーバーの設定例
add lb vserver DBSpecificLB1 MYSQL 192.0.2.10 3306 -dbsLb ENABLED
Done
show lb vserver DBSpecificLB1
DBSpecificLB1 (192.0.2.10:3306) - MYSQL Type: ADDRESS
. . .
DBS_LB: ENABLED
Done
add service msservice1 5.5.5.5 MYSQL 3306
add lb monitor mysql-monitor1 MYSQL-ECV -userName user1 -sqlQuery "show databases" -evalRule "MYSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED
Done
show lb monitor mysql-monitor1
1) Name.......: mysql-monitor1 Type......: MYSQL-ECV State....: ENABLED
...
Special parameters: Database.....:""
User name.....:"user1" Query..:show databases
EvalRule...:MYSQL.RES.TYPE.NE(ERROR) STORE_DB...:ENABLED
Done