
MYSQL 结课项目报告
专 业:++++计算机科学与技术++++
班 级:++++B230117++++
学 号:++++B23011735++++
姓 名:++++王永炘++++
2025年11 月
项目总结报告
|------|-----|------|--------------------------|
| 姓 名 | 王永炘 | 起止日期 | 2025年11月22日至2025年11月 23日 |
| 项目名称 | MYSQL数据库集群高可用和数据监控平台 |||
| 项目搭建内容 ||||
| 一、概述 1.1该项目共分为2个子项目,由MYSQL集群高可用和数据监控平台两部分组成 MYSQL集群高可用属于云原生高级课数据库运维部分的知识 数据监控平台属于云原生拔高项目,旨在让学生增加知识面,提高项目实习经历,充实简历 1.2具体要求 网络配置:确保集群中的MySQL服务器之间的网络连接稳定可靠,避免网络延迟或丢包对集群性能造 成影响。 同步参数配置:对于需要数据同步的集群方案(如主从复制和组复制),需要合理配置同步参数,确 保数据的实时性和一致性。 备份和恢复策略:制定完善的备份和恢复策略,定期备份集群数据,并测试恢复流程的可行性,以确 保在发生故障时能够快速恢复数据和服务。 监控和告警:使用监控工具对集群进行实时监控,并设置合理的告警阈值。当集群出现异常情况时, 能够及时发现并处理。
二、实验环境 2.1项目拓扑结构 2.2 软硬件环境清单
2.3系统平台部署 安装VmWare17 虚拟出三台计算机 安装OpenEuler22.03 SP4 LTS 操作系统 系统设置:主机名、防火墙、SELinux、hosts映射、IP地址 (以下内容凡涉及master1和master2相同的步骤,均以master1为例)
3 安装2台MySql服务器 3.1使用二进制包进行安装
3.2配置MySql系统服务
登入mysql查看账户信息
设置mysql的配置文件
配置启动脚本后即可安装成功Mysql 4. 部署高可用MySql双主集群 搭建主-主集群,两个节点都是主库,也都属于对方的从库,也就是两者之间会相互同步数据,这时为了防 止主键出现冲突,一般都会通过设置数据库自增步长的方式来防重 主-主架构集群适用于中读写请求的比例对半开,同时整体的并发量也不算低,至少超出了单库的承载阈值 的场景下,架构图如下:
两台服务器信息如下:
4.1配置账户 修改配置文件 Master 节点配置 Systemctl stop mysql Vim /etc/my.cnf
注意 server-id=1,为集群中本机标识,必须唯一 由于master1即使主节点又是从节点,则必须设置从节点配置 为了保证2个节点数据的一致性,需要开启自增序列配置,master1节点跳步为1 3 5 7 9... 创建用于数据同步的账号m1 [root@master1 ~]# systemctl start mysql [root@master1 ~]# mysql -uroot -p mysql> create user 'mback'@'%' identified with mysql_native_password by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave on *.* to 'mback'@'%'; Query OK, 0 rows affected (0.00 sec) Master2 节点配置 Systemctl stop mysql Vim /etc/my.cnf
注意: master2节点的server-id=2,不能和master1的server-id相同 设置自增初始值为2,则master2节点跳步为2 4 6 8 ... 创建用于数据同步的账号m2 [root@master2 ~]# systemctl start mysql [root@master2 ~]# mysql -uroot -p mysql> create user 'mback'@'%' identified with mysql_native_password by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave on *.* to 'mback'@'%'; Query OK, 0 rows affected (0.00 sec) 4.2配置主主复制 建立master1 节点主从关系 由于建立的是主-主架构集群,相互为对方的从节点,则两个节点都通过 root 账号登录 此时master1为从节点,master2为主节点 先在master2上查看同步的日志名称及同步点号
master1 节点上建立复制关系: [root@master1 ~]# mysql -uroot -p mysql> change master to master_host='192.168.88.162',master_user='mback',master_password='123456',master_po rt=3306,master_log_file='mysql-bin-log.000001',master_log_pos=672; Query OK, 0 rows affected, 9 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected, 1 warning (0.01 sec)
建立master2 节点主从关系 此时master2为从节点,master1为主节点 先在master1上查看同步的日志名称及同步点号
同理,master2节点上建立复制关系: [root@master1 ~]# mysql -uroot -p mysql> change master to master_host='192.168.192.135',master_user='mback',master_password='123456',master_po rt=3306,master_log_file='mysql-bin-log.000001',master_log_pos=672; Query OK, 0 rows affected, 9 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> show slave status\G 4.3 局部测试 4.3.1 Master 1上建立数据库 mysql> create database test1; Query OK, 1 row affected (0.01 sec)
在master2上查看是否同步
此时master1(主)--master2(从)构建完毕 4.3.2 master 2执行 创建表
在master1上查看是否有同步表数据
至此master1(从)--master2(主)构建完毕 4.4 安装keepalived并配置 4.4.1 2台MySql服务器安装keepalived软件包 安装安装包
4.4.2master1节点配置keepalived
# 配置mysql健康检查脚本 [root@master1 ~]# vim /etc/keepalived/chk_mysql.sh
[root@master1 ~]# chmod +x /etc/keepalived/chk_mysql.sh # 设置脚本执行权限 [root@master1 ~]# systemctl start keepalived [root@master1 ~]# systemctl status keepalived Master2同上操作 4.5 局部测试 在master1中停用mysql 查看VIP是否漂移
5 . 安装配置监控平台 5.1.1涉及的软件及端口
5.2部署Mysqld_Exporter 5.2.1 安装压缩包
安装后进行解压 # 192.168.88.163 monitor主机操作 [root@monitor ~]# ls anaconda-ks.cfg mysqld_exporter-0.15.1.linux-amd64.tar.gz [root@monitor ~]# tar xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz [root@monitor ~]# mv mysqld_exporter-0.15.1.linux-amd64 /usr/local/mysqld_exporter [root@monitor ~]# cd /usr/local/mysqld_exporter
5.2.2 配置文件 [root@monitor mysqld_exporter]# vim .my.cnf # 注意为隐藏文件
2台mysql节点创建用户并授权 # master1操作 [root@master1 ~]# mysql -uroot -p Enter password: mysql> create user 'exporter'@'%' identified with mysql_native_password by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> grant process, replication client, select on *.* to 'exporter'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> exit # master2操作,由于设置了主-主集群架构,master1创建账户后会同步到master2,只需查看即可 [root@master2 ~]# mysql -uroot -p Enter password: mysql> select user ,host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | exporter | % | # 已经同步 | mback | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+ 6 rows in set (0.00 sec) mysql> exit 配置mysqld_exporter的系统服务 Vim /usr/lib/systemd/system/mysqld_exporter.service
刷新服务配置并启动服务 # monitor节点操作 [root@monitor ~]# systemctl daemon-reload [root@monitor ~]# systemctl start mysqld_exporter.service [root@monitor ~]# systemctl enable mysqld_exporter.service [root@monitor ~]# systemctl status mysqld_exporter.service 通过浏览器输入http://192.168.192.136:9104/metrics,查看监控抓取msyql服务器的数据
5.3部署Prometheus 5.3.1.下载并安装Prometheus
解压缩 # monitor操作 [root@monitor ~]# tar xvf prometheus-2.53.2.linux-amd64.tar.gz [root@monitor ~]# mv prometheus-2.53.2.linux-amd64 /usr/local/prometheus [root@monitor ~]# cd /usr/local/prometheus
新建prometheus账户 [root@monitor ~]# useradd --no-create-home --shell /bin/false prometheus [root@monitor ~]# chown -R prometheus:prometheus /usr/local/prometheus 5.3.2配置prometheus系统服务 Vim /usr/lib/systemd/system/prometheus.service
刷新服务配置并启动服务 [root@monitor ~]# systemctl daemon-reload [root@monitor ~]# systemctl start prometheus [root@monitor ~]# systemctl enable prometheus [root@monitor ~]# systemctl status prometheus 5.3.3通过浏览器输入http://192.168.192.136:9090,查看管理页面,通过http://192.168.192.136:9090/metrics 查看监控数据 
5.3.4Mysqld_exporter对接Prometheus # monitor操作,打开文件,添加如下内容,注意对齐格式,# 注意:是监控机IP和Mysqld_exporter端口 [root@monitor ~]# vim /usr/local/prometheus/prometheus.yml - job_name: "mysql" static_configs: - targets: ["192.168.88.163:9104"] labels: instance: mysqld_exporter 重启Prometheus,输入http://192.168.192.136:9090 测试是否监控MySql
5.4 部署Grafana 5.4.1 下载并解压缩:
[root@monitor ~]# yum install grafana-enterprise-11.1.2-1.x86_64.rpm 5.4.2 修改配置文件 vim /etc/grafana/grafana.ini
启动 [root@monitor ~]# systemctl start grafana-server [root@monitor ~]# systemctl status grafana-server [root@monitor ~]# systemctl enable grafana-server 5.4.3 关联Promethues并设置仪表盘模版 # 浏览器其中输入:http://192.168.88.163:3000 # 初始账户/密码:admin/admin # 设置新的密码:123456 # 在设置界面中选择Home > Connections > Data sources > prometheus # 设置prometheus监听地址:http://192.168.88.163:9090 # save&test # 选择监控模版来显示mysql的关键指标,模版ID为7362 按要求配置监控平台组件 : 



6 压力测试 查看VIP所在服务器,停止当前节点的mysql,查看VIP是否漂移,刷新监控界面,看是否高可用 MySQL自带的压力测试工具------Mysqlslap # 修改最大连接数 vim /etc/my.cnf max_connections=1024 systemctl restart mysql # 完成压测,查看仪表盘 mysqlslap --defaults-file=/etc/my.cnf --concurrency=200,400 --iterations=1 --number int-cols=50 --number-char-cols=60 --auto-generate-sql --auto-generate-sql-add autoincrement --auto-generate-sql-load-type=mixed --engine=innodb --number-of queries=2000 -uroot -p123456 --verbose 
||||
| 遇到的问题及解决方案 ||||
| 问题1: 在"部署Grafana"的过程中,修改并配置好文件之后,在浏览器中输入192.168.192.136:3000并监控mysql时不能监测到具体数据,显示"NO DATA"。
解决方案: Grafana 仪表盘显示 No data 的核心原因是数据链路未打通(从 MySQL → mysqld_exporter →Prometheus →Grafana 任一环节中断)。 按以下步骤排查并解决: 一、确认 mysqld_exporter 能正常采集 MySQL 数据 mysqld_exporter 是 MySQL 数据的源头,需先确保它能获取数据: 直接访问 exporter 接口 在服务器或本地执行命令,检查是否能获取到 MySQL 监控指标(如 mysql_up): curl http://192.168.192.136:9104/metrics | grep "mysql_up" 返回 mysql_up 1:说明 exporter 成功连接 MySQL 并采集数据(正常)。
二、确认 Prometheus 已正确抓取 mysqld_exporter 数据 Prometheus 需配置抓取规则,确保能从 exporter 拉取数据: 检查 Prometheus 配置文件编辑 Prometheus 配置文件(通常是 /usr/local/prometheus/prometheus.yml),确认是否包含 mysqld_exporter 的抓取任务:
添加后重启 Prometheus: systemctl restart prometheus 在 Prometheus 界面验证数据访问 Prometheus 管理页面(http://192.168.192.136:9090),在查询框输入 mysql_up 并执行: 若能看到非空结果:说明 Prometheus 已成功抓取数据。 三、确认 Grafana 已正确关联 Prometheus 数据源 Grafana 需正确配置 Prometheus 数据源才能读取数据: 检查 Grafana 数据源配置登录 Grafana(http://192.168.192.136:3000,默认账号 admin/admin),按以下步骤验证: 进入 Configuration → Data Sources → Prometheus。 确认 URL 填写正确:http://192.168.192.136:9090(Prometheus 地址)。 点击 Save & Test,若提示 Data source is working:说明数据源连接正常。
问题二: 在部署Mysqld_exporter完成后,不能在浏览器上访问。
解决方案: 一、服务配置或启动异常 检查服务配置文件语法 从放大的配置文件来看,--config.mycnf参数的写法可能存在问题,正确的应该是--config.my-cnf。修改服务配置文件/usr/lib/systemd/system/mysqld_exporter.service中的ExecStart行: ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf --web.listen-address=:9104
刷新并重启服务 执行以下命令刷新系统服务配置并重启mysqld_exporter systemctl daemon-reload systemctl restart mysqld_exporter.service systemctl status mysqld_exporter.service # 查看服务状态,确认是否启动成功
排查后,浏览器即可浏览192.168.192.136:9104的页面
项目运行结果截图(至少2张) ||||
| Mysqld_Exporter
Prometheus 
重启Prometheus,输入http://192.168.192.136:9090 测试是否监控MySql
Grafana
||||
| 压力测试
||||