【PXC】关于限流的参数,状态值说明

摘要:
I什么是流量控制?节点接收写集并按全局顺序组织它们。节点存储未在接收队列中应用或提交的接收事务。当接收队列达到一定大小时,将触发流量限制;此时,节点将暂停复制,节点将首先处理接收队列中的任务。当接收队列减少到可管理的值时,复制将恢复。它在galera集群系统中无处不在。2、 流量控制会发生什么?可以观察到哪些全局值?

一.什么是流控(FC)?如何工作?

节点接收写集并把它们按照全局顺序组织起来,节点将接收到的未应用和提交的事务保存在接收队列中,
当这个接收队列达到一定的大小,将触发限流;此时节点将暂停复制,节点会先处理接收队列中的任务。
当接收队列减小到一个可管理的值后,复制将恢复。

它普遍存在于galera集群系统。

二.流控是发生了什么,会有哪些全局值可以观察到流控? 

mysql>  show global status like 'wsrep_flow%';
+----------------------------------+----------------+
| Variable_name                    | Value          |
+----------------------------------+----------------+
| wsrep_flow_control_paused_ns     | 0              |
| wsrep_flow_control_paused        | 0.000000       |
| wsrep_flow_control_sent          | 0              |
| wsrep_flow_control_recv          | 0              |
| wsrep_flow_control_interval      | [ 1024, 1024 ] |
| wsrep_flow_control_interval_low  | 1024           |
| wsrep_flow_control_interval_high | 1024           |
| wsrep_flow_control_status        | OFF            |
+----------------------------------+----------------+

wsrep_flow_control_paused_ns

限流发生时,复制同步暂停的时间(各节点都可能出现,不适合作为监控项)

wsrep_flow_control_paused

该状态值发生变化,含义为从上一次SHOW GLOBAL STATUS命令开始,
限流占全体同步数据时间的百分比(初始值0.0),理想情况下应该趋近于0.0;
当它比较大的时候(超过0.6),我们需要采取一些手段(添加新节点、删除慢节点,调高wsrep_slave_threads值)
来改善限流情况

wsrep_flow_control_sent

本地节点发送给集群的限流事件信息数量,可以用来当做监控项,来确认哪个节点导致了限流产生

wsrep_flow_control_recv

本地节点收到的集群限流事件信息数量

wsrep_flow_control_interval

wsrep_flow_control_interval_low

wsrep_flow_control_interval_high

wsrep_flow_control_status

如何进行限流调优?

1. wsrep_slave_threads
The number of threads to use for applying slave write sets.
用于设置读节点执行写集的线程个数

mysql> show global variables like 'wsrep_slave_threads';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| wsrep_slave_threads | 24    |
+---------------------+-------+

默认值1是远远不够的,我们需要根据另外一个状态值进行调整
公司安装的PXC集群,默认该参数值为16(也是不够的)

2. wsrep_cert_deps_distance
可以并行执行的最高与最低队列值之间的平均距离
代表可以同时并行执行多少个写集的操作

mysql> show global status like 'wsrep_cert_deps_distance';
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| wsrep_cert_deps_distance | 95.288623 |
+--------------------------+-----------+

我们可以将wsrep_slave_threads的值按照wsrep_cert_deps_distance的值设置

注意:刚做完SST的时候,这个状态值会非常高,然后缓慢下降,此时该值不具备参考性

mysql> show global status like 'wsrep_cert_deps_distance';
+--------------------------+-------------+
| Variable_name            | Value       |
+--------------------------+-------------+
| wsrep_cert_deps_distance | 6015.952973 |
+--------------------------+-------------+
1 row in set (0.00 sec)
 
mysql> show global status like 'wsrep_cert_deps_distance';
+--------------------------+-------------+
| Variable_name            | Value       |
+--------------------------+-------------+
| wsrep_cert_deps_distance | 5840.756210 |
+--------------------------+-------------+
1 row in set (0.00 sec)
 
mysql> show global status like 'wsrep_cert_deps_distance';
+--------------------------+-------------+
| Variable_name            | Value       |
+--------------------------+-------------+
| wsrep_cert_deps_distance | 5421.252076 |
+--------------------------+-------------+
1 row in set (0.00 sec)

其他参数、状态值

1. wsrep_local_recv_queue_%

mysql> show global status like 'wsrep_local_recv_queue_avg';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| wsrep_local_recv_queue_avg | 0.110581 |
+----------------------------+----------+
1 row in set (0.00 sec)

When the node returns a value higher than 0.0 it means that the node cannot apply write-sets as fast as it receives them,
which can lead to replication throttling.
简单地说:这个值高于0.0,说明发生同步延迟,将会引起限流

mysql> show global status like 'wsrep_local_recv_queue_m%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| wsrep_local_recv_queue_max | 3788  |
| wsrep_local_recv_queue_min | 0     |
+----------------------------+-------+
2 rows in set (0.00 sec)

In addition to this status variable, you can also use wsrep_local_recv_queue_max and wsrep_local_recv_queue_min
to see the maximum and minimum sizes the node recorded for the local received queue.

 

免责声明:文章转载自《【PXC】关于限流的参数,状态值说明》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jmeter 循环控制器使用layui动态创建Tab、Tab右键功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】Linux下socket keep alive讲解

【需求】不影响服务器处理的前提下,检测客户端程序是否被强制终了。【现状】服务器端和客户端的Socket都设定了keepalive属性。服务器端设定了探测次数等参数,客户端、服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭。。。 下面这是我的一点肤浅理解。 1.关于keep alive 无论win...

Linux网络编程 select/epoll得知socket有数据可读,如何判断数据全部被读取完毕?

补充一点:只有在使用epoll ET(Edge Trigger)模式的时候,才需要关注数据是否读取完毕了。使用select或者epoll的LT模式,其实根本不用关注数据是否读完了,select/epoll检测到有数据可读去读就OK了。 这里有两种做法: 1. 针对TCP,调用recv方法,根据recv方法的返回值,如果返回值小于我们指定的recv buf...

python socket基础

# socket """ Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯 语法: socket.socket(AddressFamily, Type) 该函数带有两个参数: Address Family:可以选择 AF_INET(用于 Internet 进程间通信)...

UNIX网络编程——send与recv函数详解

#include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); send和recv的前3个...

[Python之路] 使用epoll实现高并发HTTP服务器

什么是epoll 我们在  Python多种方式实现并发的Web Server 的最后使用单进程+单线程+非阻塞+长连接实现了一个可并发处理客户端连接的服务器。他的原理可以用以下的图来描述: 解释: 1.HTTP服务器是我们使用 单进程+单线程+非阻塞+长连接实现 的web服务器。 2.在实现的时候,我们创建了一个存放已接受Socket连接的列表,该列表...

如何判断SOCKET已经断开

http://biancheng.dnbcw.info/linux/366100.html     最近在做一个服务器端程序,C/S结构。功能方面比较简单就是client端与server端建立连接,然后发送消息给server。我在server端会使用专门的线程处理一条socket连接。这就涉及到一个问题,如果socket连接断开(异常,正常)后,我如何才能...