用于故障转移的连接管理器冗余

要防止连接管理器成为单个故障点,必须在不同计算机上配置连接管理器的多个实例。

连接管理器可以安装在未运行 GBase 8s 数据库服务器实例的计算机上,以防止连接管理在某个数据库服务器发生故障时发生故障。此外,还可以配置多个连接管理器实例,并使用 sqlhosts 故障转移功能来进一步提高可用性。

如果连接管理器服务级别协议使用的是重定向方式,那么在连接管理器发生故障后,客户机仍将保持与数据库服务器的连接;但是,除非配置了备份连接管理器实例,否则无法建立新客户机连接。如果连接管理器服务级别协议使用的是代理方式,那么连接管理器将充当代理服务器,并路由与指定数据库服务器的所有客户机通信。 如果代理服务器连接管理器发生故障,那么所有客户机连接都将丢失。

下图显示了其中包含两个连接管理器实例的高可用性集群示例。

图: 连接管理器组配置


在此图之前的段描述了此图的内容。
主服务器和辅助服务器上的 sqlhosts 文件配置如下:
#dbservername    nettype       hostname      servicename      options
ifx_cluster        group     -              -              i=30
ifx_pri            onsoctcp  p_machine      ifxsrv0pri     g=ifx_cluster
ifx_sds            onsoctcp  sds_machine    ifxsrv0sds     g=ifx_cluster
ifx_hdr            onsoctcp  hdr_machine    ifxsrv0hdr     g=ifx_cluster
ifx_rss            onsoctcp  rss_machine    ifxsrv0rss     g=ifx_cluster

sqlhosts 文件配置了一个其中包含集群内的每台服务器的服务器组,名称为 ifx_cluster

运行连接管理器的服务器上和客户端计算机上的 sqlhosts 文件按如下所示进行配置:
#dbservername    nettype       hostname      servicename      options
ifx_pri            onsoctcp  p_machine      ifxsrv0pri
# ifx_cm group
ifx_cm             group     -              -              c=1
ifx_cm1            onsoctcp  cm1_machine    cm1_port1      g=ifx_cm
ifx_cm2            onsoctcp  cm2_machine    cm2_port2      g=ifx_cm
# ifx_proxy group
ifx_proxy          group     -              -              c=1
ifx_proxy1         onsoctcp  cm1_machine    cm1_proxy1     g=ifx_proxy
ifx_proxy2         onsoctcp  cm2_machine    cm2_proxy2     g=ifx_proxy
sqlhosts 文件中的条目指定以下行为: 如果由于 ifx_cm2 处于脱机状态或被随机选中而导致发送到 ifx_cm 的客户机连接请求定向到 ifx_cm1,那么 sqlhosts 文件会将该请求定向到正在 cm1_machine 上运行的连接管理器实例。与此类似,对 ifx_cm2 的请求也会定向到正在 cm2_machine 上运行的连接管理器实例。发送到 ifx_proxy 的连接请求将以同样方式发送到 cm1_machinecm2_machine 上的连接管理器实例。

由于 ifx_cm1ifx_cm2ifx_proxy1ifx_proxy2 是服务级别协议而不是数据库服务器,因此客户机请求将根据连接管理器配置文件中定义的服务级别协议重定向策略来定向。

下表中显示了第一个连接管理器实例 ifx_cm1 的配置文件:
NAME ifx_cm1
LOG       1
LOGFILE ${GBASEDBTDIR}/usr2/logs/cm1.log

CLUSTER my_cluster1
{
   GBASEDBTSERVER=ifx_pri,ifx_sds,ifx_rss,ifx_hdr
   SLA ifx_cm1 DBSERVERS=(SDS,HDR),RSS,primary
   SLA ifx_proxy1 DBSERVERS=HDR,RSS,primary \
                  MODE=PROXY
   FOC ORDER=ENABLED /
   TIMEOUT=5
}
此连接管理器配置文件指定了以下信息和行为:
下表中显示了第二个连接管理器实例 ifx_cm2 的配置文件:
NAME ifx_cm2
LOG       1
LOGFILE ${GBASEDBTDIR}/usr2/logs/cmsm2.log

CLUSTER my_cluster2
{
   GBASEDBTSERVER=ifx_pri,ifx_sds_ifx_rss,ifx_hdr
   SLA ifx_cm2 DBSERVERS=(SDS,HDR),RSS,primary
   SLA ifx_proxy2 DBSERVERS=HDR,RSS,primary \
                  MODE=PROXY
   FOC ORDER=ENABLED \
       TIMEOUT=5
}

配置多个连接管理器实例时,请确保每个连接管理器实例的服务级别协议 (SLA) 的定义完全相同。SLA 定义完全相同可确保无论使用哪个连接管理器实例,客户机都具有相同的重定向策略。除了 SLA 名称、集群名称和日志文件名之外,这两个配置文件完全相同。使用组名可确保即便其中一个连接管理器实例脱机,客户机也可连接到有效的连接管理器实例。sqlhosts 文件确保将发送到 ifx_cmifx_proxy 的请求定向到正确的连接管理器实例。如果连接管理器实例位于不同计算机上(如此示例中所示),那么不必严格要求使用不同的日志文件名。但是,如果连接管理器实例位于同一台计算机上,请使用不同的日志文件名或目录。