双vip通道MySQL高可用集群
项目环境:
8台服务器(2G,2核) Centos7,Mysqlrouter8.0.21,Keepalived2.0.10,
Zabbix,Ansible
项目描述:
构建一个高可用、能实现读写分离的高效的 MySQL 集群,确保业务的稳定,能方便的监控
整个集群,以及可以批量的去部署和管理整个集群。
项目步骤:
- 安装好 Centos7 的系统,部署好 Ansible,在所有的机器之间配置 SSH 免密通道
- 通过 Ansible 去以二进制方式安装部署 MySQL,主要是通过编写好的脚本一键安装二进制
版本的 MySQL - 使用 Ansible 安装 Mysqlrouter 和 Keepalived,在另外 2 台中间服务器上,实现负载均衡,读写分离、高可用的效果,在 Keepalived 上配置 2 个实例,实现 2 个 vip,互为 master 和 backup,提升资源利用率。
keepailved配置:
MysqlRouter配置:
-
在 3 台 MySQL 服务器上配置好主从复制,建立读写分离使用的用户,形成一个 master+2个 slave 节点(半同步+GTID)的集群,提取数据库服务,部署一台延迟备份的服务器(延迟 30 分钟)
初步验证读写分离:
-
部署好 Zabbix 监控系统
-
尝试部署 Mysql 的 failover 插件(自己编写脚本或者使用 NHA),实现自动的故障切换,确保 master 宕机,能自动提升另外一台 slave 为主,另外一台 slave 切换到新的 master 上获得二进制日志
-
验证测试读写分离和高可用以及主从的 failover
用另外的机器验证:
-
使用压力测试软件(sysbench)测试整个 MySQL 集群的性能(并发性能指标 QPS、TPS、IOPS)
压力测试:
项目心得:
- 集群的架构以及配置要非词细心,脚本要提前准备好,边做边改进。
- 对 MySQL 的集群和高可用有了深入的理解。
- 对自动化批量部署和监控有了更多的应用和理解。
- 对 Keepalived 的配置需要更加细心和 IP 地址的规划有了新的认识。
- 对双 VIP 的使用,添加 2 条负载均衡记录实现 DNS 轮询,达到向 2 个 vip 负载均衡器上分流。
优化思路
数据库的切分:垂直和水平切分
- 垂直:
库:将一台机器上的库,分到多个机器上
表:将一个大表拆分成多个小表 --》将字段拆分了 - 水平:
库:将一个库里的多个表,分到多个库上,尽量一个表对应一个库
表:将一个大表拆成多个小表 ,将不同的行分到不同的表里
–》按照时间来拆分也是可以的
思路:
1.升级硬件
2.优化操作系统:优化linux的内核参数,网络参数,文件系统的参数等
3.优化MySQL的参数:例如buffer-pool的大小,等其他的参数
4.优化SQL语句 + 创建索引
5.加缓存 + 加中间件
6.分表分库