• 欢迎来到本博客,希望可以y一起学习与分享

mysql单机性能测试与搭建mysql高可用集群(docker PXC方案+haproxy+keepalived)

MySQL benz 2年前 (2021-05-17) 247次浏览 0个评论 扫描二维码
文章目录[隐藏]

参考:Docker部署Mysql集群

mysql单机性能测试

关于这个测试命令呢,我简单讲一下几个关键参数

--concurrency=5000: 表示启动5000个线程连接数据库

--iterations=1: 测试执行次数

--number-of-queries=5000: 总的执行次数

这个mysqlslap是mysql自带的测试工具,大家可以试一下。

1. 前言

随着mysql存储的数据量越来越大,mysql查询单表时的响应速度也会随之变慢,尤其是当单节点承载的数据量超出一定的范围后,比如单表超过2000万之后,查询响应速度会下降的很快,因此,一方面可以考虑mysql集群,另一方面可以考虑读写分离,这两种方案的出发点不同,集群更多是从单节点可容纳的并发连接数考虑,比如单节点的mysql服务器支持的最大连接数是有限的;而读写分离可以提升mysql服务总体的读写性能,避免读请求和写请求都打到同一个节点上,分摊压力

总结来说,可以归纳为单节点的mysql服务始终是有瓶颈的,因此需要考虑集群化的解决方案,业界比较成熟的方案包括PXC集群和replication集群

2. pxc集群

Mysql集群部署方案

2.1 PXC介绍

Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法

  • 集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上,生产环境建议不要超过15个,否则整体性能下降的很快
  • 每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器
  • 每个节点都包含完整的数据副本
    PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件)

2.2 PXC特性

  • 速度慢,但能保证强一致性,适用于保存价值较高的数据,比如订单、客户、支付等。
  • 数据同步是双向的,在任一节点写入数据,都会同步到其他所有节点,在任何节点上都能同时读写。
  • 采用同步复制,向任一节点写入数据,只有所有节点都同步成功后,才会向客户端返回成功。事务在所有节点要么同时提交,要么不提交。

    建议PXC使用PerconaServer (MySQL改进版,性能提升很大)
  • PXC的数据强一致性
    • 同步复制,事务在所有集群节点要么同时提交,要么不提交
    • Replication采用异步复制,无法保证数据的一致性

2.3 PXC优势

  • 服务高可用
  • 数据同步复制(并发复制),几乎无延迟
  • 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突
  • 新节点可以自动部署,部署操作简单
  • 数据严格一致性,尤其适合电商类应用
  • 完全兼容MySQL

3. pxc集群搭建

在Docker中安装PXC集群,使用Docker仓库中的PXC官方镜像:

重命名镜像:(名称太长,可以重命名一下)

删除原镜像:

创建docker内部网络

创建docker卷

使用Docker时,业务数据应保存在宿主机中,采用目录映射,这样可以使数据与容器独立。但是容器中的PXC无法直接使用映射目录,解决办法是采用Docker卷来映射!

创建pxc容器

创建5个PXC容器构成集群,第一个节点作为主节点,要确保第一个节点启动成功
创建主节点

参数解析:
-p 3306:3306 :将docker容器的mysql的3306端口映射到宿主机的3306端口
-e MYSQL_ROOT_PASSWORD=123456 :设置mysql客户端连接密码
-e XTRABACKUP_PASSWORD=123456:设置复制访问密码
-e CLUSTER_NAME=PXC :给PXC集群起一个名字,这里叫做PXC
-v v1:/var/lib/mysql --privileged :宿主机的v1数据卷目录挂载容器1的mysql目录
--net=mysql_cluster_net:使用指定的网络
--name=node1:节点名称(自定义)
--ip 172.22.33.6:指定ip,如果需要自动分配ip,把这行删除
pxc:使用的镜像名

创建从节点
从节点需要加入主节点(第一个节点),下面是一个示例:

从节点使用参数:-e CLUSTER_JOIN=node1加入名为node1的主节点(第一个节点)


查看正在运行的容器

使用Navicat测试连接pxc集群节点

负载均衡方案

负载均衡的必要性

如果不使用数据库负载均衡,单节点处理所有请求,负载高,性能差

使用Haproxy做负载均衡,请求被均匀分发给每个节点,单节点负载低,性能好

安装Haproxy

从Docker仓库拉取haproxy镜像:

在宿主机创建Haproxy配置文件。供Haproxy容器使用( haproxy.cfg )

haproxy.cfg内容如下:

server MySQL_1 node1:3306 check weight 1 maxconn 2000:把所有节点都加上去。需要修改MySQL_1IP即可。
在数据库集群中创建空密码、无权限用户haproxy,来供Haproxy对MySQL数据库进行心跳检测:

创建Haproxy容器:

参数解析:
-p 4001:8888:映射端口。8888是haproxy监控页面端口。
-p 4002:3306:映射端口。haproxy转发端口,访问4002端口会转发到3306端口。
-v /home/haproxy:/usr/local/etc/haproxy:ro:挂载haproxy配置文件。
--net=mysql_cluster_net:指定网络。
--ip 172.22.33.3:指定IP,如果需要自动分配IP,把这行删除


容器启动后,haproxy自动启动,如果没启动使用下面命令启动)进入容器并启动haproxy:

浏览器中打开Haproxy监控界面

根据配置文件和启动容器设置的端口,我的访问路径为:http://192.168.63.144:4001/dbs ,用户名admin,密码123456

尝试宕掉一台数据库

Haproxy不存储数据,只转发数据。可以在通过Haproxy连接数据库,端口4002,用户名和密码为数据库集群的用户名和密码:

高可用负载均衡方案

单节点haproxy不具备高可用,需要有冗余设计

虚拟IP技术

haproxy双机互备离不开一个关键的技术,这个技术是虚拟IP,linux可以在一个网卡内定义多个虚拟IP,得把这些IP地址定义到一个虚拟IP。

利用keeplived实现双机热备

定义出来一个虚拟IP,这个方案叫双机热备,准备2个keepalived,keepalived 就是为了抢占虚拟IP的,谁手快谁能抢到,没抢到的处于等待的状态。抢到的叫做主服务器,未抢到的叫做备服务器。两个keepalived之前有心跳检测的,当备用的检测到主服务挂了,就立马抢占虚拟IP。

Haproxy双机热备方案

安装keepalived

keepalived必须在haproxy所在的容器之内,也可以在docker仓库里面下载一个haproxy-keepalived的镜像。这里直接在容器内安装keepalived。

启动keeplived,容器内启动

可以按照以上步骤,再另外创建一个Haproxy容器,注意映射的宿主机端口不能重复,Haproxy配置一样。

宿主机安装配置keeplived

首先查看当前局域网IP分配情况

启动keeplived

访问haproxy页面,http://ip:8888/dbs


文章 mysql单机性能测试与搭建mysql高可用集群(docker PXC方案+haproxy+keepalived) 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!