MySQL监控
1、常见的监控方式
一般来说,常见的监控方式主要有如下三种:
监控方式 | 特点 | 优点 | 缺点 |
---|
工具/脚本 | 自己编写工具或脚本,适合初期机器很少的生产环境 | 在企业初期可以快速满足监控需求 | 后期部署和维护成本大 |
商业产品 | 可以快速搭建一套成熟的监控平台,有非常专业酷炫的监控大屏 | 功能强大,有技术支持,见效快 | 成本高昂,扩展性也较差 |
开源产品 | 免费产品,可以满足大部分的监控场景 | 成本很低,定制能力强,自主可控 | 需要一定的开发能力 |
2、主流开源监控产品
2.1 Zabbix
Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案,可以用来监控设备、服务等的可用性和性能,由国外团队进行维护以及持续更新源码,可以自由下载,是一个真正的源代码开放产品。
Zabbix的通用架构是C/S架构,通过B/S在web端进行展示和配置,分布式架构为Client/Proxy/Server,Zabbix-Server将采集到的数据持久地存储到数据库中。
Zabbix数据的采集不仅可以使用Agent方式,也可以使用SNMP、SSH、Telent、IPMI等多种协议。
Zabbix的主要特点:
- 安装配置简单;
- 免费开源,试错成本低;
- 支持多语言;
- 自动发现服务器;
- 分布式监控;
- 集中式web管理;
- 邮件、微信等通知功能。
Zabbix 的新版本 5.0,可以支持 proxy/server 端通过 odbc 连接 MySQL 进行采集监控数据,所有的配置在web端都可以完成,而且有现成的完善的监控模板,使用起来非常简单高效。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210528095623954.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1YW5fX2kxOG4=,size_16,color_FFFFFF,t_70)
2.2 PMM
Percona Monitoring and Management (PMM) 是 percona 公司一款开源的用于管理和监控 MySQL、PostgreSQL、MongoDB 以及 ProxySQL 性能的开源平台,通过第三方软件 Grafana 将 DB 监控数据展示出来。PMM 可以帮助你降低数据库环境的复杂性,提升 DB 性能和安全性,是非常流行的开源数据库监控方案。
PMM主要包括两个部分:
- PMM client:部署在每台数据库主机上,采集服务器,数据库和慢 SQL 等监控数据;
- PMM Server:PMM 的核心部分,汇集数据并 web 界面中展示监控数据。
PMM 的架构如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210528095721288.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1YW5fX2kxOG4=,size_16,color_FFFFFF,t_70)
MySQL高可用
提起 MySQL的高可用,大家都会想到 MHA、MMM、PXC、MGR,特别是 MGR,近几年成为新一代网红,也是 MySQL 官方主推的一套高可用方案。在 MGR 的基础上,结合一些成熟的开源软件,可以组合出几乎满足所有业务场景的高可用方案。
1、架构方案
介绍一套时髦的高可用架构:3节点 MGR+3节点 ProxySQL+3节点 Consul
该架构主要分为三层:
- Consul:dns解析、服务发现、健康检查;
- ProxySQL:负载均衡、读写分离、故障发现;
- MGR:单主模式、故障转移、强一致性。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210528100051531.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1YW5fX2kxOG4=,size_16,color_FFFFFF,t_70)
2、MGR
基本环境
| MySQL-1 | MySQL-2 | MySQL-3 |
---|
MySQL版本 | MySQL 5.7.30 | MySQL 5.7.30 | MySQL 5.7.30 |
操作系统 | CentOS 7.8 | CentOS 7.8 | CentOS 7.8 |
服务器IP | 192.168.0.1 | 192.168.0.2 | 192.168.0.3 |
端口 | 对外服务端口-3066\MGR通讯端口-33061 | 对外服务端口-3066\MGR通讯端口-33061 | 对外服务端口-3066\MGR通讯端口-33061 |
服务器配置 | 2c4g | 2c4g | 2c4g |
安装配置
- 安装插件:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins
- 配置 hosts:
vi /etc/hosts
192.168.0.1 mysql-1
192.168.0.2 mysql-2
192.168.0.3 mysql-3
- 修改 auto.cnf:
如果三台 MySQL 目录的 server-uuid 一致,需进行修改
vi /mysql/data/auto.cnf
[auto]
server-uuid=c734397b-3b0a-11e8-add1-fa163e8e0001
- 配置 my.cnf:
binlog_checksum = NONE
transaction_write_set_extraction = XXHASH64
slave_preserve_commit_order = true
loose-group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '192.168.0.1:33061'
loose-group_replication_group_seeds ='192.168.0.2:33061, 192.168.0.3:33061, 192.168.0.1:33061'
loose-group_replication_bootstrap_group = off
loose-group_replication_single_primary_mode = on
- 启动MGR-主库
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
SELECT * FROM performance_schema.replication_group_members;
- 启动MGR-从库
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;
- 查看MGR
SELECT * FROM performance_schema.replication_group_members;
show variables like '%read_only%';
基础维护
START GROUP_REPLICATION;
STOP GROUP_REPLICATION;
3、ProxySQL
ProxySQL 是基于 MySQL 的一款开源的中间件产品,是一个轻量级的 MySQL 代理层,可以实现读写分离,故障切换,集群部署,监控后端节点,可缓存查询结果,支持 Query 路由功能,支持动态指定某个SQL 进行缓存,支持动态加载。
基本环境
| ProxySQL-1 | ProxySQL-2 | ProxySQL-3 |
---|
MySQL版本 | proxysql-2.0.5 | proxysql-2.0.5 | proxysql-2.0.5 |
操作系统 | CentOS 7.8 | CentOS 7.8 | CentOS 7.8 |
服务器IP | 192.168.0.1 | 192.168.0.2 | 192.168.0.3 |
端口 | 管理端口-6032\服务端口-6033 | 管理端口-6032\服务端口-6033 | 管理端口-6032\服务端口-6033 |
服务器配置 | 2c4g | 2c4g | 2c4g |
安装配置
安装 proxysql:
rpm -ivh proxysql-2.0.5-1-centos7.x86_64.rpm
rpm -Uvh proxysql-2.0.5-1-centos7.x86_64.rpm
rpm -qa | grep proxysql
rpm -e proxysql-2.0.5-1-centos7.x86_64
service proxysql start
proxysql –version
/var/lib/proxysql
配置后端 MySQL 机器:
登入 ProxySQL,把 MySQL 主从的信息添加进去。将主库 master 也就是做写入的节点放到 HG 100中,salve 节点做读放到 HG 1000。
mysql -uadmin -padmin -h127.0.0.1 -P6032;
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)
values(100,'192.168.0.1',3306,1,500,10,'mysql-1'),
(1000,'192.168.0.1',3306,10,500,10,'mysql-1'),
(1000,'192.168.0.2',3306,45,500,10,'mysql-2'),
(1000,'192.168.0.3',3306,45,500,10,'mysql-3');
select * from mysql_servers;
save mysql servers to disk;
load mysql servers to runtime;
配置后端 MySQL 用户:
这个用户需要先在后端 MySQL 里真实存在,一个是监控账号,一个是程序账号:
GRANT USAGE ON *.* TO 'monitor_user'@'192.%' IDENTIFIED BY '123456';
GRANT SELECT, INSERT, UPDATE, DELETE ON center.* TO 'app_user'@'192.%' identified by '123456';
在每个 ProxySQL 中执行,配置后端 MySQL 监控用户:
mysql -uadmin -padmin -h127.0.0.1 -P6032;
UPDATE global_variables SET variable_value='monitor_user' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='123456' WHERE variable_name='mysql-monitor_password';
save mysql variables to disk;
load mysql variables to runtime;
insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent, max_connections) values('app_user','123456',1,100,1,500)
save mysql users to disk;
load mysql users to runtime;
加载配置和变量
save mysql servers to disk;
save mysql users to disk;
save mysql variables to disk;
save mysql query rules to disk;
load mysql servers to runtime;
load mysql users to runtime;
load mysql variables to runtime;
load mysql query rules to runtime;
定义路由规则
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1);
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',1000,1);
save mysql query rules to disk;
load mysql query rules to runtime;
MGR配置
insert into mysql_group_replication_hostgroups (writer_hostgroup,reader_hostgroup,backup_writer_hostgroup, offline_hostgroup,active,max_writers,writer_is_also_reader,max_transactions_behind)
values (100,1000,101,102,1,1,1,100);
select * from mysql_group_replication_hostgroups;
save mysql servers to disk;
load mysql servers to runtime;
source /software/addition_to_sys.sql
addition_to_sys.sql可以从http:
GRANT SELECT on sys.* to 'monitor_user'@'192.%';
select * from sys.gr_member_routing_candidate_status;
select hostgroup_id, hostname, status from runtime_mysql_servers;
select * from mysql_server_group_replication_log order by time_start_us desc limit 5;
基础维护
service proxysql start
service proxysql stop
mysql -uadmin -padmin -h127.0.0.1 -P6032;
mysql -uadmin_user -padmin_user -h127.0.0.1 -P6033;
select hostgroup,schemaname,username,digest_text,count_star from stats_mysql_query_digest;
4、Consul
Consul 是 HashiCorp 公司推出的一个用于实现分布式系统的服务发现与配置工具。Consul 使用 Go 语言编写,具有天然可移植性,支持多平台部署,安装包仅仅是一个可执行文件,部署非常简单。
Consul 内置了服务注册与发现、分布一致性协议实现、dns 解析、健康检查、Key/Value 存储、多数据中心方案。
Consul 官方网址:https://www.consul.io;
基本环境
| Consul-1 | Consul-2 | Consul-3 |
---|
MySQL版本 | Consul_1.8.4 | Consul_1.8.4 | Consul_1.8.4 |
操作系统 | CentOS 7.8 | CentOS 7.8 | CentOS 7.8 |
服务器IP | 192.168.0.1 | 192.168.0.2 | 192.168.0.3 |
端口 | 8600 | 8600 | 8600 |
服务器配置 | 2c4g | 2c4g | 2c4g |
安装配置
创建日志文件和配置文件:
sudo touch /consul/log/consul.log
sudo touch /consul/consul.d/consul_config.json
sudo touch /consul/consul.d/proxysql.json
安装 Consul:
cd /consul
unzip consul_1.8.4_linux_amd64.zip
ln -s /consul/consul /usr/bin/consul
consul
Consul v1.8.4
Consul配置-Server端
全局配置-consul_config.json:
vi /consul/consul.d/consul_config.json
{
"datacenter":"datacenter-1",
"data_dir":"/consul/data",
"log_level": "INFO",
"node_name": "consul-server-01",
"bootstrap_expect": 2,
"server": true,
"ui":true,
"bind_addr":"0.0.0.0",
"client_addr":"0.0.0.0",
"enable_script_checks":true,
"start_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"],
"retry_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"],
"ports":
{"dns": 53}
}
Consul 配置-Client 端
全局配置-consul_config.json:
/consul/consul.d/consul_config.json
{
"datacenter":"datacenter-1",
"data_dir":"/consul/data",
"log_level": "INFO",
"node_name": "consul-app-proxysql-01",
"server":false,
"ui":false,
"bind_addr":"0.0.0.0",
"client_addr":"0.0.0.0",
"enable_script_checks":true,
"start_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"]],
"retry_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"]],
"ports":
{"dns": 53}
}
服务注册-proxysql.json:
vi /consul/consul.d/proxysql.json
{
"service": {
"id": "proxysql-01",
"name": "proxysql",
"tags": ["6033-rw-app"],
"address": "192.168.0.1",
"port": 6033,
"check": {
"script": "mysqladmin ping --host=localhost --port=6033 --user=root --password=123456",
"interval": "3s"
}
}
}
vi /consul/consul.d/proxysql.json
{
"service": {
"id": "proxysql1",
"name": "proxysql",
"tags": ["6033-rw-app"],
"address": "192.168.0.1",
"port": 6033,
"check": {
"interval": "3s",
"tcp": "127.0.0.1:6033",
"timeout": "1s"
}
}
}
DNS 解析配置
vi /etc/resolv.conf
nameserver 127.0.0.1
nameserver 192.168.0.1
nameserver 192.168.0.2
nameserver 192.168.0.3
基础维护
consul agent -config-dir=/consul/consul.d/ >> /software/consul/log/consul.log &
consul agent -config-dir=/consul/consul.d/ >> /software/consul/log/consul.log &
dig @127.0.0.1 -p 53 proxysql.service.consul
dig 6033-rw-app.proxysql.service.consul
consul leave
consul members
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)