Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1571420
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-12-09 13:11:57

7. Multiplex改变

   Sybase IQ Multiplex是一个服务器组,每个服务器上运行一个Sybase IQ Server,这些IQ Server连接到一个用于存储持久共享数据的中央存储上。每一个IQ Server在服务器的本地存储上维护自己的catalog数据、临时数据和catalog transaction log数据。
   IQ 15之前(比如:IQ 12.7),Multiplex中只能有一个节点能够修改共享IQ数据,其他节点可以查询。从IQ 15开始,引入了“协调节点”(coordinator),并且允许有多个写节点(Writer Nodes)。

7.1  协调节点
  
从IQ 15开始,Multiplex中有一个重要的节点叫做协调节点“coordinator”,它用来协调和管理Multiplex范围内所有的全局读写操作(包括DML和DDL语句)和全局读写事物;维护和管理全局Cataldog信息和元数据;此外,协调节点还负责维护和管理TLV Log(table version log,TLV Log是一个已经提交的DDL/DML改变的队列,它存储在 IQ_SYSTEM_MAIN DBSpace中,可以被集群中所有节点访问到。当修改数据库对象的写事物提交后,协调节点必须把有关描述新表版本的控制信息传递到辅助服务器。这样在辅助服务器上新开始的事物才能够自动看到表的新版本。IQ使用存储在IQ_SYSTEM_MAIN中的TLV日志实现新表版本信息传递)。
   下面是协调节点执行的一些主要功能:
 (1) 协调共享IQ对象上的读/写操作 (锁、 事物IDs)
 (2) 管理 IQ main DBSpace
 (3) 维护全局 catalog、控制读写服务器的Catalog信息同步
 (4) 维护和清理辅助服务器不再使用的对象 old versions
 (5) 监控读写服务器的“心跳”,管理读写服务器与协调服务器之间的通讯
 (6) 在IQ 15.3 DQP环境下,只有协调节点能够为IQ_SHARED_TEMP dbspace增加dbfile和管理
logical servers。

   需要注意的是:所有DDL操作(包括create 数据库对象、select into table等)都是在协调节点上运行,即使发出的命令是提交到写节点。在通常情况下,不会带来问题。但是,在有大量记录的表上创建索引时,由于create index操作实际是在协调节点上运行,需要消耗协调节点的CPU、内存等资源,可能会影响协调节点对于Mulitplex的协调和管理工作。针对这一特点,我们在规划IQ 15 Multiplex的协调节点机器配置时需要加以注意:如果在系统运行期间,经常要做一些索引创建工作,那么要为协调节点多配置一些CPU和内存。


7.2  节点间通讯(Inter-Node Communication)
    在IQ 15之前Multiplex节点间的通讯是通过SQL Remote完成。从IQ 15开始,secondary nodes(Writer和Reader节点都叫做secondary nodes)和协调节点之间的通讯不再使用SQL Remote,而是采用新的Inter-node Communication(INC)层。INC基于TCP/IP协议,由心跳(heartbeat)连接和池化连接(pooled connections)组成。
    在协调节点和每一个secondary node节点之间会建立一个专有的心跳连接,有几个secondary node就会建立几个心跳连接。心跳连接是在secondary node启动时建立,并且在节点有效的整个周期内保持活动。协调节点通过监控心跳连接检查secondary node是否处于活动状态。
    在执行全局事物时,写节点会通过INC Connection pool中的连接与协调节点进行通讯,以便于协调节点协调和管理全局事物,执行全局DDL操作。这个INC Connection pool,能够通过数据库选项MPX_MAX_CONNECTION_POOL_SIZE和MPX_MAX_UNUSED_POOL_SIZE进行控制。INC的相关信息会记录在dbname.iqmsg文件中。
    当写节点执行DDL操作或是执行一个全局事物时,将从该节点的INC Connection pool中获得一个空闲的连接,该连接将与用户连接相关联用于与协调节点进行通讯,直到DDL命令结束或是全局事物提交;然后这个连接会返回到INC Connneciton pool中被其他用户使用。如果应用有很多并发的DDL操作或事物,那么缺省的MPX_MAX_CONNECTION_POOL_SIZE数据库选项值(缺省值是10)就可能不合适了,需要根据实际情况进行调整(如果需要的连接数超过该数据库选项设置的值IQ会报错)。在实际中,节点该选项值可以考虑设为节点所允许的最大并发事物/DDL操作的数量。
    需要注意的是:INC Connnection pool和user connections是完全分开的,MPX_MAX_CONNECTION_POOL_SIZE数据库选项用于控制INC Connection pool中连接的最大个数,-gm服务器参数用于控制用户连接的最大数量。


7.3  MIPC(Multiplex Inter-node Communication)
    IQ 15.3引入了MIPC通讯框架,用于参加到DQP(分布式查询)处理的节点间的通讯。MIPC是一种节点间点对点、网状的通讯框架,而INC采用的是一对多(一个协调节点与多个secnodary nodes)通讯机制。
    MIPC可以采用Public网络或Private网络,Sybase建议MIPC建立在内部高速的private 网路,而尽量不要使用客户端和IQ Multiplex通讯的Public网络。采用Private网络可以提升DQP的性能。
    虽然采用了IQ 15.3版本,但是不打算使用DQP特性,那么MIPC就不需要了,只有INC连接就可以了。

7.4  动态冲突(Dynamic Collision)
   “动态冲突”只发生在secondary 节点。当一个节点中的某个连接查询一个对象,而另外的用户提交了一个对相同对象的结构修改(DDL命令,比如:drop table、alter table等),这时就会发生“动态冲突”。当“动态冲突”发生时会导致IQ中断连接(对于上述情况,会中断查询所在的连接)。


7.5  Multiplex使用注意事项
   下面是使用IQ 15 Mutiplex时需要加以注意的事项:
 (1) 避免在IQ的Catalog DB中创建和使用用户表;保持Catalog DB尽可能小,这样可以降低Catalog同步的影响
 (2) IQ Multiplex不支持Direct I/O,对于存放共享数据的shared IQ Store,只能使用裸设备
 (3) 为了优化性能,把Catalog DB、Catalog DB Transaciont Log、iqmsg和其他日志文件放在本地磁盘上。
 (4) IQ Main DBspaces(包括:IQ_SYSTEM_MAIN、IQ user dbspaces和IQ_SHARED_TEMPM dbspace)只能在协调节点上进行管理和维护
 (5) 在往IQ_SYSTEM_MAIN dbspace中增加DBFile时,应当先shutdown所有secondary nodes,然后在进行操作;并且在操作完成后,重启secondary nodes节点前先进行同步操作。
 (6) IQ_SYSTEM_MAIN存放了系统内部使用的结构和数据,应当为IQ_SYSTEM_MAIN dbspace分配足够的空间。
 (7) 如果Multiplex协调节点出现故障,或者必须关闭以进行维护,则整个Multiplex将会置于只读状态。在此状态中,可以查询但无法修改共享数据。要重新建立读写功能,必须将指定的故障切换节点(failover node)升级为协调器。这一操作称为“手动故障切换”。在执行“手动故障切换”操作前,一定要确保当前的协调器IQ Server已经关闭(shutdown)。否则,如果在执行“手动故障切换”时该协调器IQ Server仍活动时,可能导致IQ数据库损坏。
 (8) 在IQ Multiplex环境下进行数据库备份时只能在协调节点进行。
 (9) 尽量不要在写节点上运行大量的全局DDL命令。可以使用本地临时表(local temporary tables),因为在本地临时表上的DDL不会有INC通讯开销。
 (10)尽量在写节点上运行大数据量的数据装载,而不要在协调节点上运行。这样可以让协调节点有更多资源运行全局DDL命令、管理全局事物和其他集群管理活动。
 (11)被指定为“故障切换节点”(failover node)的IQ节点不能被排除(excluded),除非它是Multiplex中最后一个未被排除的节点。
 (12)不要在单节点模式下(-iqmpx_sn 1)启动secondary节点(写节点或读节点)。当Multiplex的协调节点正常时,这样做会导致数据库损坏。
 (13)IQ 15 Multiplex并不支持不同节点使用不同的IQ版本。所有的节点应该有相同的版本号和ESD号;此外所有节点应当使用相同的操作系统。
 (14)如果使用了IQ 15.3 DQP,那么IQ_SHARED_TEMP dbspace的容量依赖于分布式查询处理的负载。在极端情况下,其尺寸可能要等于所有节点的IQ_SYSTEM_TEMP dbspace容量之和。作为一个起点,可以设置IQ_SHARED_TEMP的尺寸等于峰值时IQ_SYSTEM_TEMP已使用空间之和的50%。可以在高峰期间运行sp_iqstatus得到节点的IQ_SYSTEM_TEMP dbspace已经使用的空间值。为了跟踪IQ_SHARED_TEMP的空间使用情况,可以使用sp_iqspaceused系统存储过程。
 (15)如果使用了IQ 15.3 DQP,那么建议在删除逻辑服务器(logical server)或是其中的一个成员时,那么确保被影响的的服务器上没有活动的连接(可以使用sp_iqconnection查看)。

阅读(6409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~