当前位置: 首页 > 科技观察

PerconaXtraDBCluster的流量控制

时间:2023-03-15 22:10:50 科技观察

什么是流量控制?PerconaXtraDBCluster有一个称为流量控制的自我调节机制。这种机制有助于避免集群中最弱/最慢的成员明显落后于集群其他成员的情况。当集群成员写入数据缓慢时(同时继续从集群组通道接收写入集),传入/接收队列的大小会增加。如果这个队列超过了一个设定的阈值(gcs.fc_limit),节点将发出一个FLOW_CONTROL消息,要求其他成员减慢或暂停处理。gcs.fc_limit此设置控制何时启用流量控制。简而言之,如果给定节点上的wsrep_local_recv_queue超过此大小,将发送暂停的流量控制消息。fc_limit默认为16个事务。这实际上意味着这可以使给定节点落后于从集群提交事务。如果fc_master_slave被禁用(默认情况下),gcs.fc_master_slave将动态修改fc_limit。这种模式实际上是根据集群的节点数动态调整fc_limit。集群中的节点越多,计算出的fc_limit就越大。这背后的理论是,集群越大(写入越忙,可能来自更多节点),每个节点离应用程序空间就越远。如果您只写入PXC中的单个节点,建议您通过设置fc_master_slave=YES来禁用此功能。无论fc_limit是否动态调整大小,此设置实际上无非就是要更改。它没有任何其他能力可以帮助PXC中的单个节点更好地提高其写入能力。gcs.fc_factor如果启用流量控制时fc_limit控制,则fc_factor在发布时得到解决。该因子是一个介于0.0和1.0之间的数字,乘以当前的fc_limit(如果fc_master_slave=NO,则通过上述计算进行调整)。这会产生在节点发出另一条流量控制消息以授予集群继续复制权限之前,接收队列必须低于事务级别的事务数。fc_factor默认为0.5,这意味着队列必须下降到fc_limit的50%以下才能恢复复制。在这种情况下,较大的fc_limit可能意味着在再次放松流量控制之前需要等待很长时间。但是,该值最近被修改为默认值1.0,以允许复制尽快恢复。对于最终用户来说,流量控制是透明的,但是对于集群管理员来说,了解一个节点是否在使用流量控制是很重要的。如果是这样,就会影响整个集群的生产力。查找节点是否处于流控制FLOW_CONTROL不是持久状态。队列大小超过设定阈值后,节点将进入FLOW_CONTROL。一旦队列大小回到低端水平以下,它将再次被释放。如何查看上下限阈值从PerconaXtraDBCluster5.7.17-29.20开始,现在可以通过SHOWSTATUS查看上下限阈值:mysql>showstatuslike'wsrep_flow_control_interval';+----------------------------+----------------+|Variable_name|Value|+----------------------------+----------------+|wsrep_flow_control_interval|[3547,3547]|+----------------------------+----------------+1rowinset(0.01sec)如您所见,wsrep_flow_control_interval状态变量发出一个范围,代表下限和上限。值集(3547,3547)表示如果传入队列大小大于3547,则启用FLOW_CONTROL。如果大小小于3547,则释放FLOW_CONTROL。尽管如此,这并没有显示节点在任何给定时刻是否正在使用FLOW_CONTROL。为了解决这个问题,PXC还在版本中引入了wsrep_flow_control_status状态变量。这个布尔状态变量告诉用户节点是否在FLOW_CONTROL中。一旦节点脱离流控,节点采用流控时变量切换为OFF,节点处于流控时切换为ON:mysql>showstatuslike'%flow%';+-----------------------------------------------------+-----------------+|Variable_name|Value|+-----------------------------------------------------+----------------+|Innodb_scrub_background_page_split_failures_underflow|0||Ssl_session_cache_overflows|370780||Table_open_cache_overflows|0||wsrep_flow_control_paused_ns|7056357841773||wsrep_flow_control_paused|0.000901||wsrep_flow_control_sent|0||wsrep_flow_control_recv|176||wsrep_flow_control_interval|[3547,3547]||wsrep_flow_control_interval_low|3547||wsrep_flow_control_interval_high|3547||wsrep_flow_control_status|OFF|+---------------------------------------------------+----------------+最后,wsrep_flow_control_sent/recv计数器可用于跟踪FLOW_CONTROL状态。这显示流量控制启动的总数。您可以使用FLUSHSTATUS清除它们。mysql>showglobalstatuslike'wsrep_flow%';+--------------------------------+----------------+|Variable_name|Value|+---------------------------------+----------------+|wsrep_flow_control_paused_ns|6893631531679||wsrep_flow_control_paused|0.000413||wsrep_flow_control_sent|5366||wsrep_flow_control_recv|5369||wsrep_flow_control_interval|[3547,3547]||wsrep_flow_control_interval_low|3547||wsrep_flow_control_interval_high|3547||wsrep_flow_control_status|关闭|+------------------------------------+---------------+mysql>flushstatusmysql>showglobalstatuslike'wsrep_flow%';+----------------------------------+----------------+|Variable_name|Value|+----------------------------------+------------+|wsrep_flow_control_paused_ns|6893631531679||wsrep_flow_control_paused|0.000413||wsrep_flow_control_sent|0||wsrep_flow_control_recv|0||wsrep_flow_control_interval|[3547,3547]||wsrep_flow_control_interval_low|3547||wsrep_flow_control_interval_high|3547||wsrep_flow_control_status|OFF|+--------------------------------+----------------+【编辑推荐】爽爽,老板让我开发一个简单的工作流引擎...Windows10将迎来翻天覆地的变化!今年的第一次更新就在这里。2021年将迎来六大网络安全趋势。Windows10近年最大改进!先看Windows1021H2新特性小爱同学居然推出了PC版?带你体验电脑版小爱同学