ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 连接管理器在Informix 11.5 高可用集群中的使用

连接管理器在Informix 11.5 高可用集群中的使用

原创 Linux操作系统 作者:ArtCode 时间:2009-05-08 13:00:10 0 删除 编辑

Informix 11.5 高可用集群技术概述

为了支撑用户 24X7 不间断的应用服务,Informix 11.5 提供了多种高可用集群技术。

  • HDR技术

    它是通过数据库的事务日志的方式实现了主、备机互相接管的功能,当主机工作时,备机提供只读功能,因此,备机可以提供查询、报表等功能,实现负载分担的功能,当主机发生故障,备机会自动接管,实现主机及备机的接管功能。

  • ER(Enterprise Replication)数据库复制技术

    它也是通过读取数据库日志的方式实现数据同步功能,当源数据库数据发生变化后,Informix 数据库通过读取数据库日志,将变化的数据及时同步到目标数据库,采用 ER 的方式,和 HDR 不同,HDR 数据库的接管是基于数据库服务器的,也就是它的作用范围是基于整个实例的,而 ER 的作用范围是作用于一个表,你可以灵活定义需要复制哪些数据列及数据行,而且可以灵活定义数据复制的方式,是采用主从方式、汇总方式还是双向复制方式。

  • RSS(Remote Standalone Secondary)技术

    它扩展了以前 HDR 只支持主、备两台机器,系统可以支持多台 RSS 备机,而且 RSS 备机可以支持远程连接,进一步提高了高可用性,同时,提供了远程容灾能力,而且也可以实现系统负载分担能力。

  • SDS(Shared Disk Secondary)技术

    同 RSS 及 HDR 不同,它采用和主机共享磁盘方式,避免了数据重复存储的问题,节省了空间,而且,当主机发生故障后,它可以快速实现接管,另外,它也实现了负载均衡的功能。

  • CLR(Continuous Log Restore)技术

    有的时候,远程灾备服务器和主机服务器要实现物理隔离,或者数据网络非常不稳定,这种情况下,Informix 提供了 CLR 技术,它是通过逻辑日志备份的方式,将数据库的逻辑日志人工传送到远程灾备服务器,通过数据库逻辑日志恢复的方式保持和主数据库数据同步的方式。

在 Informix 11.5 中,我们可以配合使用 HDR、SDS、RSS、CLR 等集群技术为客户提供真正不间断的业务持续运行能力,满足对关键业务运营的需要。

连接管理器 Connection Manager

Informix 高可用集群技术不仅提供了 HA 功能,当主服务器发生故障,可以迅速地切换到 SDS、HDR 等备份服务器上,同时,还提供了负载均衡的能力。为了使 Informix 高可用集群技术对客户端透明,我们需要在客户机和服务器集群之间定义一个轻量级的 Connection Manager 实用程序,由它负责监控及维护集群中的网络连接,它根据用户的功能需求将请求路由到相应的服务器上,实现负载均衡能力,同时,当主机发生故障,由它来完成故障转移的功能。

通常,Informix 高可用集群会有很多数据库服务器组成,客户端应用程序可以连接到主服务器或其他辅助服务器上。由于存在大量的数据库服务器,客户端应用程序往往很难决定连接到哪个服务器上,同时,它也很难确定哪台服务器有足够的资源来完成特定的任务。最后,它也很难确定什么时间服务器会出现问题。因此,需要由 Connection Manager 来解决这些困难。

通过 Connection Manager,可以将客户端应用程序重定向到工作负载不忙的机器上实现负载均衡能力,同时, Connection Manager 还可以实现故障转移仲裁器的功能,当主服务器发生故障,可以在 Informix 高可用集群中自动实现故障接管的功能。

Connection Manager 基本实现下边三种功能:

  • 基于角色的连接重定向

    使用 Connection Manager 后,应用程序不是直接连接到后端的服务器,而是连接到 Connection Manager,由 Connection Manager 负责完成用户到后端服务器的连接工作,对应用程序是透明的,应用程序的连接重定向也是由 Connection Manager 在通讯层来完成的,不需要改变应用程序。

    为了配置 Connection Manager,数据库管理员要设置一个 Online Connection Manager and Server Monitor (oncmsm) 守护进程(在 Windows 平台称为服务),由它负责响应应用程序的连接请求,同时要定义一个或多个 Service Level Agreements (SLAs) 重定向规则,Connection Manager 根据定义好的 SLA 重定向规则,将应用程序连接重定向到相应的服务器上。

  • 集群负载均衡

    Connection Manager 可以根据服务器的工作负载重定向应用连接来实现负载均衡能力。 Connection Manager 通常需要连接到 Informix 高可用集群中的各个服务器,收集各种类型服务器的统计信息,尚未使用的工作负载能力及服务器的当前状态,通过收集到的上述信息,Connection Manager 可以将客户端应用程序重定向到最不忙的服务器上来实现负载均衡。负载均衡的配置规则是由 service level agreements 来定义的。

  • 集群故障接管

    Connection Manager 可以实现故障自动接管的功能。当 Connection Manager 监测到主服务器发生故障后,可以自动将 Informix 高可用集群中的最适合的辅助服务器提升为主服务器。你可以通过 Connection Manager 配置文件定义故障接管相关参数。

安装 Connection Manager

Connection Manager ONCMSM 及相关的实用程序如 ONPASSWORD 都包含在 IBM Informix Client SDK (CSDK) 开发包中,不需要再单独购买。目前支持 Connection Manager 的 CSDK 版本是 3.50. CSDK 开发包包含在 IDS 11.50 数据库服务器安装包中,也可以是单独的 IBM Informix Client SDK (CSDK) 开发包。 Connection Manager 可以安装在数据库应用程序运行的机器上,也可以安装在单独的一台独立于 Informix 高可用集群的机器是哪个,减少管理开销。为了提高性能,一般建议安装在数据库应用程序运行的机器上。

什么是 SLA

在 Connection Manager 中,应用程序的重定向是根据 SLA(Service Level Agreement)来完成的。 SLA 相当于客户端应用程和服务器集群之间一个契约, 它可以根据系统性能及数据实时性要求来确定, 比如说,如果用户需要访问当前的数据,用户就需要连接到主服务器或 HDR 服务器,如果用户可以忍受一些时间延迟,他就可以连接到 SDS 服务器、HDR 服务器或 RSS 服务器;另外,它也可以根据地域或功能需求来定义,比如说,连接到多少公里之内的服务器,或连接到支持不同应用负载的服务器上。

在 SLA 定义时,可以包含下述参数:

  • Primary:客户应用程序被重定向到集群中的主服务器上。
  • SDS:客户应用程序被重定向到集群中的 SDS 服务器上,如果集群中有多个 SDS 服务器,客户应用程序将在 SDS 服务器上实现负载均衡的功能。
  • RSS:客户应用程序被重定向到集群中的 RSS 服务器上,如果集群中有多个 RSS 服务器,客户应用程序将在 RSS 服务器上实现负载均衡的功能。
  • HDR:客户应用程序被重定向到集群中的 HDR 服务器上。

集群中的任意数据库服务器在定义服务器类型时,可以使用 “ + ” 来实现在多种服务器类型之间实现负载均衡功能。

如下边例子:

SLA ltp=primary

客户应用程序被重定向到集群中的主服务器上。

SLA report=rss_1+rss_2+rss_3

客户应用程序被重定向到集群中的 rss_1、rss_2、rss_3 服务器上,并在它们之间实现负载均衡功能。

SLA accounting=SDS+HDR

客户应用程序被重定向到集群中的 SDS 服务器及 HDR 服务器上,并在它们之间实现负载均衡功能。


图 1. 一个 SLA 定义的完整的例子
一个 SLA 定义的完整的例子

我们定义了三个 SLA 规则:

  • SLA ltp=primary
  • SLA payroll=HDR+primary
  • SLA report=SDS+HDR

当用户连接服务器时,仍然可以采用以前的方式,直接连接某以特定的服务器,如 ,

database stores@rss_1

但现在更推荐连接 Connection Manger,并由它来实现连接重定向的功能,如,

database stores@oltp 
 database stores@report

采用 SLA 的连接方式,还可以做到当集群中的某个服务器发生故障后,自动重定向应用程序到其它可用的服务器上。

配置 Connection Manager

配置、启动 Connection Manager 的基本步骤:

步骤 1:创建加密的 password 文件

Connection Manager 需要创建加密的 password 文件来在集群中建立安全连接。我们使用 onpassword 实用程序来完成 password 文件的加密及解密。 password 文件是一个文本文件,它的基本格式是:

ServerName_1 AlternateServer_1 UserName_1 Password_1 
ServerName_2 AlternateServer_2 UserName_2 Password_2 

 ... and so on ...

instance_name可以是 DBSERVERNAME 或者 DBSERVERALIAS 中的一个,但必须是 TCP/IP 连接方式;

alternate_instance: 是 instance_name 的别名,用来防止连接不到 instance_name,也必须是 TCP/IP 连接方式,该项是必须填写的,通常用于定义第二块网卡或备用服务器,如果没有其它别名的存在,可以同 instance_name 相同;

用户名及密码必须在目标服务器上已经存在;

加密后的文件会保存在 $INFORMIXDIR/etc/passwd_file 中,ONCMSM connection manager 需要访问该文件来连接数据库服务器, 客户端应用程序不需要访问该文件。

password 文件举例:

lx-rama  lx-rama ravi foobar 
 toru toru_2 usr2 five bar 
 seth_tcp  seth_alias fred 9ocheetah 
 cheetah  panther anup c0mpl1cate

onpassword 命令语法 :

>>-onpassword-- -k --access_key--+- -e --plaintext_file--+----->< 
                               '- -d --output_filename-' 
			

其中 :

  • key : 用于加密及解密 password 文件,key 的长度不能超过 24 字符
  • – d 选项用于解密 password 文件
  • – e 选项用于加密 password 文件
  • 被加密的 password 文件保存在 $INFORMIXDIR/etc/passwd_file.
  • 在解密时,$INFORMIXDIR/etc/passwd_file 被解密,并放置到 output_filename 文件中

onpassword 命令举例

onpassword -k SecretKey -e ./passwords.txt

上述例子中,使用 SecretKey 键值将 passwords.txt 文件加密,并将该文件保存在 $INFORMIXDIR/etc/passwd_file 中。

onpassword -k SecretKey -d ./passwords.txt

上述例子中,使用 SecretKey 键值解密 $INFORMIXDIR/etc/passwd_file 文件,并将解密后的文件保存到 passwords.txt 文件中。

步骤 2:设置 INFORMIXSERVER and INFORMIXDIR 环境变量

INFORMIXDIR 环境变量要指向 CSDK 安装路径,INFORMIXSERVER 环境变量设置为集群中的主服务器名称。

如果使用 UNIX C shell (csh),可使用 setenv 命令来设置,

setenv INFORMIXDIR path_to_csdk 
 setenv INFORMIXSERVER name_of_primary_server

如果使用 Windows,可使用 setnet32 来设置。

步骤 3:创建 Connection Manager 配置文件或使用 oncmsm 命令行选项

Connection Manager 配置文件基本格式:

NAME ConnectionManagerName 
 SLA name=value 
 [ SLA name=value ] . . . . 
 FOC  
 DEBUG [ 1 | 0 ] 
 LOGFILE 

 

其中:

NAME:定义新创建的 Connection Manager 的名称,如果 NAME 没有指定,则第一个 SLA policy 的名称作为 Connection Manager 的名称。

LOGFILE:定义 Connection Manager 输出日志的位置。 ONCMSM 在启动时及运行过程中,需要将一些状态信息写入该文件,如果 LOGFILE 没有指定,ONCMSM 会创建一个新文件,文件名由 Connection Manager 名称及 processid 组成,存放到 $INFORMIXDIR/tmp 目录下。

DEBUG:如果设置为 1,会让 ONCMSM 写更多的状态信息到日志文件中。设置该参数,一般是用于发现问题的根本原因,或者当前收集的状态信息不够全面。

SLA:用于定义 SLA 策略,它包含 SLA 名称及重定向策略。重定向策略用来指定客户端应用程序连接目标服务器的名称或类型。客户端应用程序通过 connect 语句连接 SLA 来实现重定向功能。在配置文件中可以定义多个 SLA 。

FOC:用于定义集群中故障接管策略。 Connection Manager 不仅可以将客户端应用程序重定向到工作负载不忙的机器上实现负载均衡能力,同时, Connection Manager 还可以实现故障转移仲裁器的功能,当主服务器发生故障,可以在 Informix 高可用集群中自动实现故障接管的功能。在 Connection Manager 中,故障接管策略是通过 Fail Over Configuration (FOC) 来完成的。

FOC 基本格式:

FOC failover_configuration,timeout_value

其中:

failover_configuration: 指定一个或多个 primary, SDS, HDR, RSS 或特定实例名称,它们之间使用 (+) 来分隔,它们的先后顺序就是故障接管的顺序,如果几个服务器的优先顺序是同等的,我们会使用 ( ) 将他们包含在一起。

timeout_value: CM Agent 等待主服务器响应的时间 ( 秒 ), 如果超过 timeout_value ,就认为主服务器发生了故障,经进行相应的接管操作。

FOC 没有指定,缺省是:FOC SDS+HDR+RSS,0

FOC 示例:

FOC serv1+(serv2+SDS)+HDR+RSS,10

如果主服务器 10 秒后还没有响应,就会按下边顺序进行接管:

  1. serv1 实例
  2. serv2 或 SDS 实例中最合适的一个实例
  3. HDR 实例 .
  4. 任意一个 Any RSS 实例

Connection Manager 配置文件缺省放在 $INFORMIXDIR/etc/cmsm.cfg 下,同时也可以使用– c path_to_file 来设置新的参数值。

使用 oncmsm 命令行选项方式

除了可以使用配置文件方式定义 ONCMSM 环境,我们也可以使用 oncmsm 命令行选项方式来定义 ONCMSM 环境。除了 DEBUG 选项外,其他的参数均可以来进行设置。

-c  
 -s  
 -f  
 -l  
 -k  
 -i  
 -u 

下边是 Connection Manager 配置文件的一个完整例子:

NAME doe_test 
 SLA ltp=primary 
 SLA report=HDR+SDS 
 SLA test=RSS 
 FOC SDS+HDR+RSS,15 
 DEBUG 0

 

步骤 4:修改相应的 sqlhosts 文件

在 Windows 平台上使用 setnet32 实用程序修改 SQLHOST registry key 。

在 client, CMSM or Informix server 端,sqlhosts 文件定义不尽相同:

l在 Informix 服务器端: 应该包含集群环境下的所有服务器实例

在 Informix 服务器端 sqlhosts 文件举例:

production onsoctcp mac_1 prod_tcp 
 production_shm onipcshm mac_1 place_holder 
 sds_1 onsoctcp mac_2 sds1_tcp 
 hdr1 onsoctcp mac_3 hdr1_tcp 
 rss_1 
 onsoctcp mac_4 rss1_tcp 

 dev_1 onsoctcp georgetown dev_1_tcp

l在运行 CMSM agent(s) 机器上:

应该包含所有 SLA 定义及集群中的主服务器实例,强烈建议包含集群环境下的所有服务器实例。

在 CMSM agent(s) 机器上 sqlhosts 文件举例:

production onsoctcp mac_1 prod_tcp 
 sds_1 onsoctcp mac_2 sds1_tcp 
 hdr1 onsoctcp mac_3 hdr1_tcp 
 rss_1 onsoctcp mac_4 rss1_tcp 

 oltp onsoctcp concord oltp_tcp 
 Report 
		onsoctcp concord report_tcp 
 test onsoctcp concord test_tcp

l在运行 client 的机器上:应包含用到的 SLA 及直接连接的实例名称,强烈建议包含集群环境下的所有服务器实例。

在 client 的机器上 sqlhosts 文件举例:

oltp onsoctcp concord oltp_tcp 
 report  onsoctcp concord report_tcp 
 # test  onsoctcp concord test_tcp 

 cerberus  onsoctcp boulder cerb_tcp 
 orpheus 
				 onsoctcp littleton orph_tcp 

 production onsoctcp mac_1 prod_tcp 
 sds_1 
				 onsoctcp mac_2 sds1_tcp 
 hdr1 onsoctcp mac_3 hdr1_tcp 
 rss_1 onsoctcp mac_4 rss1_tcp

步骤 5:使用 oncmsm 实用程序启动 Connection Manager

在使用 Connection Manager 时,一定要启动oncmsm守护进程,我们使用oncmsm实用程序来启动 Connection Manager 。

如果系统当中只有一个 agent,而且配置文件放在缺省的位置,我们可以运行:

oncmsm

如果系统当中有多个 agent,我们需要运行:

oncmsm -c configuration_file

如果是 Windows 平台,启动 Connection Manager 需要执行两步,首先安装 Connection Manager 服务,再启动 Connection Manager 。

安装 Connection Manager 服务 :

oncmsm -i -c configuration_file

启动 Connection Manager:

oncmsmConnection_Manager_Name

Connection_Manager_Name是 Connection Manager 实例名称。

oncmsm命令语法:

>>-oncmsm----+---------+---------------------------------------->
              '-cm_name-'     

>--+--------------------------------------------------------------------------+-->
   | .--------------------------------------------------------------.         |   
   | |                   .- + ------------------------------------. |         |   
   | |                   |          .- + --------------.          | |         |   
   | V                   V          V                  |          | |         |   
   +--- -s --listname= ----+-----+----+-primary------+-+--+-----+-+-+---------+   
   |                       '- ( -'    +-PRI----------+    '- ) -'             |   
   |                                  +-HDR----------+                        |   
   |                                  +-SDS----------+                        |   
   |                                  +-RSS----------+                        |   
   |                                  '-server_alias-'                        |   
   +- -f --+----------------------------------------+--+--------------------+-+   
   |       |          .- + --------------.          |  '- , --timeout_value-' |   
   |       |          V                  |          |                         |   
   |       +-+-----+----+-HDR----------+-+--+-----+-+                         |   
   |       | '- ( -'    +-SDS----------+    '- ) -' |                         |   
   |       |            +-RSS----------+            |                         |   
   |       |            '-server_alias-'            |                         |   
   |       '-DISABLED-------------------------------'                         |   
   +- -c --config_file--------------------------------------------------------+   
   '-+- -r -+--cm_name--------------------------------------------------------'   
     '- -k -'                                                                     

>--+---------------+-------------------------------------------><
   '- -l --logfile-'   

			


oncmsm命令语法(windows):

 >>-oncmsm------------------------------------------------------->

>--+-+------+--+---------+--+-------------------+--+---------------+-+-><
   | '- -i -'  '-cm_name-'  '- -c --config_file-'  '- -l --logfile-' |   
   '-+- -k -+--cm_name-----------------------------------------------'   
     +- -u -+                                                            
     '- -r -'        

			


其中:

  • cm_name : 定义 CMSM agent 名称
  • server_alias : 用于定义服务器别名
  • -s listname : 用于定义 SLA
  • -f : 指定辅助服务器用于故障接管
  • timeout_value : 指定实施故障接管操作的等待时间 ( 秒 )
  • -c config_file : 指定可选的配置文件
  • -l logfile : 用于指定日志文件
  • -i/-u : (Windows Only) 安装或卸载 oncmsm 作为 Windows 的服务

oncmsm 命令举例:

oncmsm – c /path_to_config_file 

 oncmsm cm1 -s oltp_cm1=primary – s report_cm1=HDR+SDS 

 oncmsm -s ltp=primary -s payroll=HDR+primary 
 -s report=SDS+HDR -l cm.log – f HDR+SDS,30

停止 CMSM agent :

oncmsm – k agent_name

监控 Connection Manager daemons

我们可以使用 onstat – g cmsm 命令监控 Connection Manager daemons,它会显示所有 Connection Manager daemons 及相关实例的细节,包括:

  • 列出集群中所有的 connection managers
  • 相关主机信息
  • SLA 及相应定义
  • FOC 信息
  • 标记及统计信息

下边是 onstat -g cmsm 命令输出的一个示例:

onstat -g cmsm 

 CM name host sla define foc flag connections 
 cm1 bia oltp primary SDS+HDR+RSS,0 3 5 
 cm1 bia report (SDS+RSS) SDS+HDR+RSS,0 3 16

建立 Connection Manager Redundancy

你可以在不同的机器上配置多个 Connection Manager 实例,避免产生单点故障。同时,还可以定义多个 Connection Manager 实例,并且在 sqlhosts 文件中使用 server groups 故障接管的特性来进一步提高可用性。下边例子中,我们在 sqlhosts 文件中定义了 oltp 组,来包含 oltp_cm1 and oltp_cm2: 两个 Connection Manager 实例来提高可用性。

oltp      group     -         -     e=oltp_cm2 
oltp_cm1  onsoctcp  cm1_host  9298  g=oltp 
oltp_cm2  onsoctcp  cm2_host  9298  g=oltp

结束

Informix 提供了业界领先的高可用集群技术。通过结合使用 HDR、SDS、RSS、CLR,为用户不仅提供了业界领先的高可靠解决方案,同时提供了最全面的负载均衡能力及故障接管能力,另外,通过结合使用 Connection Manager 功能部件,为用户提供了完全透明的负载均衡及故障接管能力,真正做到了使用户应用不间断地运行,也使得 informix 数据库成为支撑用户关键业务应用的最强大的数据库产品。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-594507/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-05

  • 博文量
    269
  • 访问量
    555565