MySQL 数据库集群-PXC 方案(二)

MySQL 数据库集群-PXC 方案(二)

集群状态信息

PXC 集群信息可以分为队列信息、复制信息、流控信息、事务信息、状态信息。这些信息可以通过 SQL 查询到。每种信息的详细意义可以在官网查看。

show status like '%wsrep%';

复制信息

复制流程

举例说明几个重要的信息:

状态 描述
wsrep_replicated 被其他节点复制的次数
wsrep_replicated_bytes 被其他节点复制的数据次数
wsrep_received 从其他节点处收到的写入请求总数
wsrep_received_bytes 从其他节点处收到的写入数据总数
wsrep_last_applied 同步应用次数
wsrep_last_committed 事务提交次数

队列信息

队列是一种很好的缓存机制,如果 PXC 正在满负荷工作,没有线程去执行数据的同步,同步请求会缓存到队列中,然后空闲线程从队列中取出任务,执行同步的请求,有了队列 PXC 就能用少量的线程应对瞬时大量的同步请求。

状态 描述
wsrep_local_send_queue 发送队列的长度(瞬时同步的请求数量)
wsrep_local_send_queue_max 发送队列的最大长度
wsrep_local_send_queue_min 发送队列的最小长度
wsrep_local_send_queue_avg 发送队列的平均长度
wsrep_local_recv_queue 接收队列的长度
wsrep_local_recv_queue_max 接收队列的最大长度
wsrep_local_recv_queue_min 接收队列的最小长度
wsrep_local_recv_queue_avg 接收队列的平均长度

当发送队列的平均长度(wsrep_local_send_queue_avg)值很大,发送队列的长度(wsrep_local_send_queue)也很大的时候,说明 PXC 集群同步数据的速度已经很慢了,队列里边积压了大量的同步请求,这个时候就要检查一下网速是不是正常,或者同步的线程数量是不是太少。

当接收队列的平均长度(wsrep_local_recv_queue_avg)值很大,接收队列的长度(wsrep_local_recv_queue)也很大的时候,这说明本地没有足够的线程去执行持久化的操作,增加线程就可以解决这个问题。

流量控制信息

流量控制就是 PXC 集群在同步速度较慢的情况下,为了避免同步速度跟不上写入速度而推出的一种限速机制,就是限制数据的写入,直到同步队列的长度变小,同步速度变快为止,才会解除流量控制。流量控制的后果很严重,而且一个很小的操作就会引发流量控制。

流量控制

状态 说明
wsrep_flow_control_paused_ns 流控暂停状态下花费的总时间(纳秒)
wsrep_flow_control_paused 流量控制暂停时间的占比(0~1)
wsrep_flow_control_sent 发送的流控暂停事件的数量
wsrep_flow_control_recv 接收的流控暂停事件的数量
wsrep_flow_control_interval 流量控制的下限和上限。上限是队列中允许的最大请求数。如果队列达到上限,则拒绝新的请求。当处理现有请求时,队列会减少,一旦到达下限,将再次允许新的请求
wsrep_flow_control_status 流量控制状态 OFF:关闭 0N: 开启

流控的主要原因节点之间同步的速度慢,队列积压了大量的请求,这才是流控的主要原因。

流控解决办法:

  1. 改善网速,提高带宽,更换交换机,千兆网卡更换成万兆网卡
  2. 增加线程,线程多了执行的速度也就快了。队列里边就不会积压大量的请求
  3. 提升硬件性能,比如升级 CPU,内存以及更换光纤硬盘等等都可以提高写入速度

第一项和第三项属于更换硬件的方法,主要说一下第二个方法增加线程数提升同步速度。在 PXC 的配置文件加上wsrep_slave_threads参数。代表的是本地执行队列的线程数量,一般这个数是 CPU 线程数的 1-1.5 倍。比如服务器 CPU 是 8 核 16 线程的,这里就可以写 16-24 就可以。

wsrep_slave_threads=16

节点与集群的状态信息

状态描述

状态 说明
wsrep_local_state_comment 节点状态
wsrep_cluster_status 集群状态(Primary:正常状态、Non-Primary:出现了脑裂请求、Disconnected:不能提供服务,出现宕机)
wsrep_connected 节点是否连接到集群
wsrep_ready 集群是否正常工作
wsrep_cluster_size 节点数量
wsrep_desync_count 延时节点数量
wsrep_incoming_addresses 集群节点 IP 地址

事务相关信息

状态 说明
wsrep_cert_deps_distance 事务执行并发数
wsrep_apply_oooe 接收队列中事务的占比
wsrep_apply_oool 接收队列中事务乱序执行的频率
wsrep_apply_window 接收队列中事务的平均数量
wsrep_commit_oooe 发送队列中事务的占比
wsrep_commit_oool 无任何意义,不存在本地的乱序提交
wsrep_commit_window 发送队列中事务的平均数量

PXC 节点的安全下线操作

节点用什么命令启动,就用对应的关闭命令去关闭。

  • 主节点的管理命令(第一个启动的 PXC 节点)
 systemctl start mysql@bootstrap.service
 systemctl stop mysql@bootstrap.service
 systemctl restart mysql@bootstrap.service
  • 非主节点的管理命令(非第一个启动的 PXC 节点)
service mysql start
service mysql stop
service mysql restart
  • 如果最后关闭的 PXC 节点是安全退出的,那么下次启动要最先启动这个节点,而且要以主节点启动。
  • 如果最后关闭的 PXC 节点不是安全退出的,那么要先修改/var/lib/mysql/grastate.dat 文件,把其中的safe_to_bootstrap属性值设置为 1,再按照主节点启动。

意外下线部分节点

安全下线节点不会让剩下的节点宕机,如果节点意外退出,集群的规模不会缩小,意外退出的节点超过半数,比如三个节点意外退出了 2 个节点,那么剩下的节点就不能够读写了。其他节点按照普通节点启动上线即可恢复 pxc 集群。

意外下线全部节点,不同时退出

如果三个节点都意外退出,那么查看/var/lib/mysql/grastate.dat文件,看看哪个文件的safe_to_bootstarp的值是 1,那么那个节点是最后意外关闭的,再按照safe_to_bootstarp的值启动 pxc 集群。

意外下线全部节点,同时退出

如果三个节点同时意外退出,我们需要修改配置文件,挑选一个节点作为主节点,修改safe_to_bootstarp的值设置为 1,那么这个节点可以以主节点启动。

配置 MyCat 负载均衡

准备工作(一)

我们需要创建两个 PXC 集群,充当两个分片。

上文中已经创建出来了一个分片,参考步骤然后创建出来第二个分片。

最后会有 6 个 centos 虚拟机。

我的第一个如下:

  • 主:192.168.3.137
  • 从:192.168.3.138
  • 从:192.168.3.139

我的第二个如下:

  • 主:192.168.3.141
  • 从:192.168.3.143
  • 从:192.168.3.144

MyCat : 192.168.3.146

准备工作(二)

在 192.168.3.146 Centos 服务器上进行如下操作:

由于 MyCat 是依赖 jdk 的所以我们先安装 jdk 环境。

yum install -y java-1.8.0-openjdk-devel.x86_64

配置 JAVA_HOME 环境变量

ls -lrt /etc/alternatives/java
vim /etc/profile
source /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/

输入 java -version 如下图就完成配置。

准备工作(三)

下载 mycat

http://dl.mycat.org.cn/1.6.5/

上传 MyCat 压缩包到虚拟机,并解压。

开放防火墙 8066 和 9066 端口:

firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --zone=public --add-port=9066/tcp --permanent
firewall-cmd --reload

关闭 SELINUX

vim /etc/selinux/config

把 SELINUX 属性值设置成 disabled,之后保存。重启。

reboot

修改 MyCat 的 bin 目录中所有.sh 文件的权限:

chmod -R 777 ./*.sh

MyCat 启动与关闭

启动MyCat:
./mycat start
查看启动状态:
./mycat status
停止:
./mycat stop
重启:
./mycat restart

准备工作(四)

修改配置文件:

修改 server.xml 文件,设置 MyCat 帐户和虚拟逻辑库

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="nonePasswordLogin">0</property>
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>
        <property name="useGlobleTableCheck">0</property>
        <property name="sequnceHandlerType">2</property>
        <property name="subqueryRelationshipCheck">false</property>
        <property name="processorBufferPoolType">0</property>
        <property name="handleDistributedTransactions">0</property>
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值