要防止连接管理器成为单个故障点,必须在不同计算机上配置连接管理器的多个实例。
连接管理器可以安装在未运行 GBase 8s 数据库服务器实例的计算机上,以防止连接管理在某个数据库服务器发生故障时发生故障。此外,还可以配置多个连接管理器实例,并使用 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。
#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
由于 ifx_cm1、ifx_cm2、ifx_proxy1 和 ifx_proxy2 是服务级别协议而不是数据库服务器,因此客户机请求将根据连接管理器配置文件中定义的服务级别协议重定向策略来定向。
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 }此连接管理器配置文件指定了以下信息和行为:
如果主服务器发生故障,SD 辅助服务器会成为主服务器。如果 SD 辅助服务器不可用,HDR 辅助服务器会成为主服务器。如果 HDR 辅助服务器不可用,RS 辅助服务器会成为主服务器。
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_cm 和 ifx_proxy 的请求定向到正确的连接管理器实例。如果连接管理器实例位于不同计算机上(如此示例中所示),那么不必严格要求使用不同的日志文件名。但是,如果连接管理器实例位于同一台计算机上,请使用不同的日志文件名或目录。
oncmsm -c $GBASEDBTDIR/etc/cm1_machine.cfg
oncmsm -c $GBASEDBTDIR/etc/cm2_machine.cfg