Citrix ADC

用例 4: 特定于数据库的负载平衡

数据库服务器场不仅必须根据服务器的状态进行负载平衡,还必须根据每台服务器上数据库的可用性进行负载平衡。服务可能已启动,并且负载平衡设备可能会显示它处于 向上的状态,但请求的数据库在该服务上可能不可用。如果查询被转发到数据库不可用的服务,则不会满足请求。因此,负载平衡设备必须了解每个服务上的数据库的可用性。在做出负载平衡决策时,它必须仅考虑数据库可用的那些服务。

例如,请考虑数据库服务器server1, Server2和server3托管数据库mydatabase1和mydatabase2。如果mydatabase1在server2上变得不可用,则负载平衡设备必须意识到状态更改。它必须仅在server1与server3之间对mydatabase1的请求进行负载平衡。mydatabase1在server2上变为可用后,负载平衡设备必须在负载平衡决策中包含server2。同样,如果mydatabase2在server3上变得不可用,则设备必须仅在server1和server2之间对mydatabase2的请求进行负载平衡。仅当mydatabase2变为可用时,它必须在其负载平衡决策中包含server3。此负载平衡行为必须在服务器场上托管的所有数据库中保持一致。

Citrix ADC设备通过检索服务上处于活动状态的所有数据库的列表来实现此行为。要检索活动数据库的列表,设备使用配置了适当 SQL查询的监视器。如果请求的数据库在服务上不可用,则设备将服务排除在负载平衡决策中,直到服务变为可用。此行为确保不间断地向客户端提供服务。

注意

仅 MSSQL和 MySQL服务类型支持特定于数据库的负载平衡。此支持也适用于 Microsoft SQL Server 2012高可用性部署。

要设置特定于数据库的负载平衡,必须配置以下内容:

  • 启并配置mssql或mysql的负载平衡器。
  • 配置配置数据的服务,并将服务绑定绑定到虚拟仪。监视仪需要有象的用途凭据才登录登录资料器,因此您必须在每个个服务配置配置配置配置配置配置配置配置配置配置配置配置配置配置ADC制备。
  • 然后,配置mssql-ecv或mysql-ecv监视器,并并监视器绑定到每个服务。
  • 最后,您必须测试配置以确保其按预期工作。在执行这些配置任务之前,请确保了解特定于数据库的负载平衡的工作原理。

数量特定平等的工作

对于特定于数据库的负载平衡,您可以配置一个监视器,该监视器定期查询每个数据库服务器上的所有活动数据库的名称。Citrix ADC设备存储结果,并根据通过监控检索到的信息定期更新记录。当客户端查询特定数据库时,设备使用配置的负载平衡方法选择服务,然后检查其记录以确定该服务上是否可用数据库。如果记录表明数据库不可用,则会使用配置的负载平衡方法选择下一个可用服务,然后重复检查。设备将查询转发到数据库处于活动状态的第一个可用服务。

启用负载平衡

禁用负载平衡功能时,可以配置负载平衡实体,如服务和虚拟服务器。在启用特征之前,图元才能正常工作。

使用 CLI启用负载平衡

在命令提示符处,键入以下命令以启用负载平衡并验证配置:

启用NS功能LB Show NS功能<! -  yourcopy  - >

例如

>启用ns功能负载平衡完成>显示ns功能首字母缩略词状态-----1)Web日志WL关闭2)浪涌保护SP打开3)负载平衡LB打开…24)NetScaler推送完成<!--NeedCopy-->

使用 桂启用负载平衡

导航到系统 > 设置,然后在配置基本功能中选择负载平台

为数据库特定的负载平衡配置负载平衡虚拟服务器

要将虚拟服务器配置为基于可用性对数据库进行负载平衡,请在虚拟服务器上启用特定于数据库的负载平衡参数。启用该参数将修改负载平衡逻辑,以便 Citrix ADC设备在将查询转发到所选服务之前引用发送到所选服务的监视探测的结果。

使用 CLI为数据库特定的负载平衡配置负载平衡虚拟服务器

在命令提示符处,键入以下命令为数据库特定负载平衡配置负载平衡虚拟服务器并验证配置:

添加LB vserver     -dbslb启用显示lb vserver  <! -  yourcopy  - >

配置服务

启用负载平衡功能后,必须为要包含在负载平衡设置中的每个应用程序服务器至少创建一个服务。您配置的服务提供 Citrix ADC设备与负载平衡服务器之间的连接。每个服务都有名称,并指定 知识产权地址、端口和处理的数据类型。

如果在不首先创建服务器对象的情况下创建服务,则服务的 知识产权地址也是承载服务的服务器的名称。如果希望通过名称而不是 知识产权地址来标识服务器,则可以创建服务器对象,然后在创建服务时指定服务器的名称而不是其 知识产权地址。

配置数用

在数据库中,连接始终是有状态的,这意味着在建立连接时,必须对其进行身份验证。

在 Citrix ADC上配置数据库用户名和密码。例如,如果您在数据库上配置了用户 厕所,则还需要在 模数转换器上配置用户 厕所。添加到 模数转换器的数据库用户名和密码将添加到nsconfig文件中。

注意

姓姓区分大小。

ADC使用这些用户凭据对客户端进行身份验证,然后对服务器与数据库服务器的连接进行身份验证。

用CLI添加数码用途

在命令提示符下键入

添加数据库用户-密码<--需要复制-->

例如

添加数据库用户nsdbuser-密码dd260427edf<!--NeedCopy-->

使用 桂添加数据库用户

导航到“系统”>“用户管理”>“数据库用户”,然后配置数据库用户。

如果更改了数据库服务器上数据库用户的密码,则必须重置Citrix ADC设备上配置的相应用户的密码。

使用 CLI重置数据库用户的密码

在命令提示符下键入

设置数据库用户-密码<!--NeedCopy-->

例如

设置数据库用户nsdbuser-密码dd260538abs<!--NeedCopy-->

使用GUI重置数据库用户的密码

导航到“系统”>“用户管理”>“数据库用户”,选择一个用户,然后为密码输入新值。

如果数据库服务器上不再存在数据库用户,则可以从 Citrix ADC设备中删除该用户。但是,如果用户继续存在于数据库服务器上,并且您从 模数转换器设备中删除该用户,则客户端使用此用户名的任何请求都不会进行身份验证。因此,用户名不会被路由到数据库服务器。

使用CLI删除数据库用户

在命令提示符下键入

rm db用户<用户名><!--NeedCopy-->

例如

rm db用户nsdbuser<!--NeedCopy-->

使用 桂删除数据库用户

导航到“系统”>“用户管理”>“数据库用户”,选择一个用户,然后单击“删除”。

配置监视器以检索活动数据库的名称

您可以创建监视器以检索数据库实例上所有活动数据库的列表。监视器使用有效的用户凭据登录到数据库服务器,并运行适当的 SQL查询。需要使用的 SQL查询取决于 SQL服务器部署。例如,在 MSSQL数据库镜像设置中,您可以使用以下查询检索服务器实例上可用的活动数据库列表。

从sys.databases中选择名称,其中state=0<--需要复制-->

在 MySQL数据库设置中,您可以使用以下查询检索服务器实例上可用的活动数据库列表。

显示数据库

您还可以将监视器配置为评估错误条件的响应,并在没有错误时存储结果。如果响应包含错误,监视器将服务标记为 多普设备将服务从负载平衡决策中排除,直到不再返回错误为止。

注意

仅 MSSQL和 MySQL服务类型支持数据库特定的负载平衡功能。因此,监视器类型必须是 MSSQL-ECV或神秘的 ECV

使用 CLI将监视器配置为检索服务上托管的所有活动数据库的名称

在命令提示符下,键入以下命令以检索服务上托管的所有活动数据库的名称并验证配置:

添加lb监视器-userName-sqlQuery-evalRule-storedb-ENABLED显示lb监视器<!--NeedCopy-->

使用 桂将监视器配置为检索服务上托管的所有活动数据库的名称

  1. 导航到流量管理 > 负载平衡 > 监视器并配置类型为MSSQL-ECV或MySQL-ECV的仪器。
  2. 特点数量例如,指定xl-ecv,查询mssql-ecv,查询必须“从sys.databases的名称= 0”),并且并且规则是mssql.res.type.ne(错误)。对于MyQL-ECV,查询必须是“显示数据库”,并且规则必须是mysql.res.type.ne(错误)。

可用性组对 MSSQL的部署支持

考虑以下情况,其中在高可用性组部署中配置了数据库特定的负载平衡。S1到 S5是 模数转换器设备上的服务。DB1到 DB4是服务 S1到 S5表示的服务器上的数据库。AV1和 AV2是可用性组。每个可用性组最多包含一个主数据库服务器实例和最多四个辅助数据库服务器实例。表示可用性组中服务器的服务对于一个可用性组可以是主服务,对于另一个可用性组可以是辅助服务。每个可用性组都包含不同的数据库和一个侦听器(即服务)。所有请求都到达驻留在主数据库上的侦听器服务。阿维包含数据库 DB1和 DB2.AV2包含数据库 DB3和 DB4.L1和 L2分别是 AV1和 AV2上的听众。S1是 AV1的主要服务,S2是 AV2的主要服务。

哈部署 SQL

服务 服务上的活动数据库列表
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

查询程程下载:

  1. AV1的读取查询是在S4和S5之间进行负载平衡的。S1是AV1的主要用途。
  2. AV1的写查询被定向到 L1
  3. AV2的读取查询是在S1和S3之间进行负载平衡的。S2是AV2的主要用途。
  4. AV1的写查询被定向到 L2

示例配置

  1. 配置负载平衡和内容交换虚拟服务器。
    • 添加LB vserver lbwrite -dbslb
    • 启用LBVServer LBRead MSSQL -DBSLB
    • 添加csvserver csv MSSQL 1.1.1.10 1433
  2. 配置两个侦听器服务(每个可用性组一个)和五个服务 S1到 S5表示数据库 DB1到 DB4
    • 添加服务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
    • 添加服务s2 1.1.1.14 MSSQL 1433
    • 添加服务s3 1.1.1.15 MSSQL 1433
    • 添加服务S4 1.1.1.16 MSSQL 1433
    • 添加服务s5 1.1.1.17 MSSQL 1433
  3. 将服务绑定到负载平衡虚拟服务器。
    • 绑定lbvserver lbwrite l1
    • 绑定lbvserver lbwrite l2
    • 绑定lbvserver lbread s1
    • 绑定lbvserver lbread s2
    • 绑定lbvserver lbread s3
    • 绑定lbvserver lbread s4
    • 绑定lbvserver lbread s5
  4. 配置数据库用户。
    • 添加数据库用户nsdbuser1-密码dd260427edf
    • 添加DB用户NSDBUSER2 -PASSWORD CCD1234XYZW
  5. 为每个侦听器服务配置两个监视器,即 监视器1和 监视器(L2)以检索该可用性组中的活动数据库列表。添加监视器 监视器1以检索辅助数据库服务器实例的数据库列表。
    • 添加lb监视器监视器\u L1 MSSQL-ECV-用户名user1-sqlQuery“从sys.databases中选择名称a internal JOIN sys.dm\u hadr\u availability\u replica\u id=b.replica\u id internal JOIN sys.availability\u group\u listeners c ON b.group\u id internal JOIN sys.availability\u group\u listener\u地址d ON c.listener\u id=d.listener\u id其中b.role=1和d.ip\u地址类似于'1.1.1.11'-evalRule”MSSQL.RES.TYPE.NE(错误)“–已启用storedb
    • add lb monitor monitor_L2 MSSQL-ECV -userNameuser1 -sqlQuery "SELECT name FROM sys. exe ";数据库是一个INNER JOIN系统。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. exe . exeb.role = 1 and d.ip_address like '1.1.1.12'" -evalRule "MSSQL.RES.TYPE.NE(ERROR)"-storedb启用
    • 将LB监视器1 MSSQL-ECV -USERNAMEUSER1 -SQLQUERY“从sys.databases中选择名称.DATABRASE A.REPLICA_ID = B.REPLICA_ID上的内部连接sys.dm_hadr_availability_replica_states b,其中b.role = 2”-evalrule“mssql.res.type.ne(错误)“-StoredB已启用
  6. 配置读取和写入策略。
    • 添加cs策略pol_write-rule“MSSQL.REQ.QUERY.TEXT.CONTAINS(“insert”)”
    • 添加cs策略pol_read-rule“MSSQL.REQ.QUERY.TEXT.CONTAINS(“select”)”
  7. 将策略绑定到内容内容交换仪器。
    • 绑定csvserver csv -targetLBVserver lbwrite -policyName pol_write -priority 11
    • 绑定csvserver csv -targetLBVserver lbread -policyName pol_read -priority
  8. 将监视器绑定到服务。将监视器绑定到服务 L1和 L2以获取它作为侦听器的可用性组的活动数据库列表。将监视器绑定到绑定到只读虚拟服务器的所有服务。
    • 绑定服务L1 -monitorName monitor_L1
    • 绑定服务L2-监视器名称监视器\u L2
    • 绑定服务s1-监视器名称监视器1
    • 绑定服务s2 -monitorName monitor1
    • 绑定服务s3-监视器名称监视器1
    • 绑定服务s4-监视器名称监视器1
    • 绑定服务S5 -MonitorName Monitor1

MSSQL虚拟服务器的配置示例

为数据库特定负载平衡配置负载平衡虚拟服务器

添加lb vserver DBSPECICLB1 MSSQL 192.0.2.10 1433-dbsLb ENABLED Done显示lb vserver DBSPECICLB1 DBSPECICLB1(192.0.2.10:1433)-MSSQL类型:地址…DBS_lb:ENABLED Done<!--NeedCopy-->

要配置服务,请执行以下操作:

添加服务msservice1 5.5.5.5 MSSQL 1433

使用命令行配置监视器以检索服务上托管的所有活动数据库的名称

添加lb监视器mssql-monitor1 mssql-ECV-用户名user1-sqlQuery“从状态为0的sys.databases中选择名称”-评估规则“mssql.RES.TYPE.NE(错误)”-storedb EN Done显示lb监视器mssql-monitor1 1)名称……:mssql-monitor1类型……:mssql-ECV。。。特殊参数:数据库…:“”用户名…:“user1”查询…:从sys.databases中选择名称,其中state=0 EvalRule…:MSSQL.RES.TYPE.NE(错误)版本…:70存储\数据库…:已启用已完成<--需要复制-->

MySQL虚拟服务器的配置示例

为数据库特定负载平衡配置负载平衡虚拟服务器

添加lb vserver DBSPECICLB1 MYSQL 192.0.2.10 3306-dbsLb ENABLED Done显示lb vserver DBSPECICLB1 DBSPECICLB1(192.0.2.10:3306)-MYSQL类型:地址…DBS_lb:ENABLED Done<!--NeedCopy-->

要配置服务,请执行以下操作:

添加服务msservice1 5.5.5.5 MYSQL 3306<!--NeedCopy-->

使用命令行配置监视器以检索服务上托管的所有活动数据库的名称

添加lb monitor mysql-monitor1 mysql-ECV-用户名user1-sqlQuery“显示数据库”-evalRule“mysql.RES.TYPE.NE(错误)”-storedb已启用显示lb monitor mysql-monitor1 1)名称……:mysql-monitor1类型……:mysql-ECV状态……:已启用。。。特殊参数:数据库…:“”用户名…:“user1”查询…:显示数据库评估规则…:MYSQL.RES.TYPE.NE(错误)存储\ u DB…:已启用已完成<--需要复制-->