mysql数据库集群---慢查询、MySQL路由器配置、 MHA

慢查询

[root@server1 ~]# /etc/init.d/mysqld start 
[root@server1 ~]# mysql -pwestos
mysql> show variables like 'slow%';
mysql> set global slow_query_log=ON;

在这里插入图片描述

[root@server1 ~]# cd /usr/local/mysql/data/
[root@server1 ~]# cat server1-slow.log

在这里插入图片描述

[root@server1 data]# mysql -pwestos
mysql> show variables like 'long%';
mysql> select sleep(10);

在这里插入图片描述

[root@server1 data]# cat server1-slow.log 

在这里插入图片描述

MySQL路由器配置

server1重新引导

[root@server1 ~]# /etc/init.d/mysqld start 
[root@server1 ~]# mysql -pwestos
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述

mysql> STOP GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
sever2、3加入

[root@server2 ~]# /etc/init.d/mysqld start
[root@server2 ~]# mysql -p
mysql> START GROUP_REPLICATION;

[root@server3 ~]# /etc/init.d/mysqld start
[root@server3 ~]# mysql -pwestos
mysql> START GROUP_REPLICATION;

server1查看

[root@server1 ~]# mysql -pwestos
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
server4

需要的包
在这里插入图片描述

[root@server4 ~]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm 
[root@server4 ~]# vim /etc/mysqlrouter/mysqlrouter.conf 

在这里插入图片描述
启动服务

[root@server4 ~]# systemctl start mysqlrouter.service 
[root@server4 mysqlrouter]# netstat -antlp

在这里插入图片描述
server1授权

[root@server1 ~]# mysql -pwestos
mysql> grant select on *.* to user1@'%' identified by 'westos';
mysql> grant all on test.* to user2@'%' identified by 'westos';
mysql> flush privileges;

宿主机测试

[root@server1 ~]# mysql -pwestos
[root@foundation4 ~]# mysql -h 172.25.4.4  -P 7001 -u user1 -pwestos
mysql> select * from test.t1;

在这里插入图片描述

[root@foundation4 ~]# mysql -h 172.25.4.4  -P 7001 -u user2 -pwestos
mysql> show databases;
mysql> use test
mysql> insert into t1 values (6,'redhat');
mysql> select * from t1;

在这里插入图片描述
在这里插入图片描述

实现负载均衡

server1、2、3安装lsof

[root@server1 ~]# yum install lsof -y
[root@server2 ~]# yum install lsof -y
[root@server3 ~]# yum install lsof -y

在宿主机端退出重进数据库

[root@foundation4 ~]# mysql -h 172.25.4.4  -P 7001 -u user1 -pwestos

server1上查询、此时server2、3查询不到

[root@server1 ~]# lsof -i :3306

在这里插入图片描述
在宿主机端退出重进数据库
server2上查询、此时server1、3查询不到
在这里插入图片描述
在宿主机端退出重进数据库
server3上查询、此时server1、2查询不到
在这里插入图片描述

MHA高可用

server1

[root@server1 ~]# /etc/init.d/mysqld stop
[root@server1 ~]# rm -rf /usr/local/mysql/data/*
[root@server1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
symbolic-links=0

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

在这里插入图片描述

[root@server1 ~]# mysqld --initialize --user=mysql

在这里插入图片描述

[root@server1 ~]# /etc/init.d/mysqld start
[root@server1 ~]# mysql_secure_installation 

在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# mysql -pwestos
mysql> grant replication slave on *.* to repl@'%' identified by 'westos';
mysql> alter user root@'%' identified by 'westos';
mysql> flush privileges;

server2

[root@server2 ~]# /etc/init.d/mysqld stop
[root@server2 ~]# rm -rf /usr/local/mysql/data/*
[root@server2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
symbolic-links=0

server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

在这里插入图片描述
做初始化

[root@server2 ~]# mysqld --initialize --user=mysql
[root@server2 ~]# /etc/init.d/mysqld start
[root@server2 ~]# mysql_secure_installation
[root@server2 ~]# mysql -pwestos
mysql> CHANGE MASTER TO MASTER_HOST='172.25.4.1', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;

在这里插入图片描述
server3

[root@server3 ~]# /etc/init.d/mysqld stop
[root@server3 ~]# rm -rf /usr/local/mysql/data/*
[root@server3 ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
symbolic-links=0

server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

在这里插入图片描述

做初始化

[root@server3 ~]# mysqld --initialize --user=mysql
[root@server3 ~]# /etc/init.d/mysqld start
[root@server3 ~]# mysql_secure_installation 
[root@server3 ~]# mysql -pwestos
mysql> CHANGE MASTER TO MASTER_HOST='172.25.4.1', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;

在这里插入图片描述
server4

[root@server4 ~]# systemctl stop mysqlrouter.service 

需要的包和依赖
在这里插入图片描述

[root@server4 MHA-7]# yum install *.rpm -y

将node包传给server1、2、3并安装

[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:
[root@server1 ~]#  yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@server2 ~]#  yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@server3 ~]#  yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@server4 ~]# mkdir /etc/masterha
[root@server4 ~]# cd /etc/masterha
[root@server4 masterha]# vim app.cnf
[server default]
user=root
password=westos
ssh_user=root
repl_user=repl
repl_password=westos
master_binlog_dir= /usr/local/mysql/data
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.4.1 -s 172.25.4.2
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha/app1
manager_log=/etc/masterha/app1/manager.log

[server1]
hostname=172.25.4.1

[server2]
hostname=172.25.4.2
candidate_master=1

[server3]
hostname=172.25.4.3
no_master=1

在这里插入图片描述

[root@server4 masterha]# mkdir app1
[root@server4 ~]# ssh-keygen

在这里插入图片描述
免密

[root@server4 ~]# ssh-copy-id server1
[root@server4 ~]# ssh-copy-id server2
[root@server4 ~]# ssh-copy-id server3
[root@server4 ~]# scp -r .ssh/ server1:
[root@server4 ~]# scp -r .ssh/ server2:
[root@server4 ~]# scp -r .ssh/ server3:

检测

[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/app.cnf

在这里插入图片描述

[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/app.cnf

在这里插入图片描述

master切换

手动切换

MHA的故障切换过程,共包括以下的步骤:

1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置

2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作

3.复制dead maste和最新slave相差的relay log,并保存到MHA Manger具体的目录下

4.识别含有最新更新的slave

5.应用从master保存的二进制日志事件(binlog events)

6.提升一个slave为新的master进行复制

7.使其他的slave连接新的master进行复制

master切换到server2

[root@server4 ~]# masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.4.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

全输入yes
在这里插入图片描述
在这里插入图片描述

server1、3查看,master已经切换
在这里插入图片描述
停止server2,将master切换回server1

[root@server1 ~]# /etc/init.d/mysqld stop
[root@server4 ~]# masterha_master_switch --master_state=dead --conf=/etc/masterha/app.cnf --dead_master_host=172.25.4.2 --dead_master_port=3306 --new_master_host=172.25.4.1 --new_master_port=3306 --ignore_last_failover

开启server2

[root@server2 ~]# mysql -pwestos
mysql> CHANGE MASTER TO MASTER_HOST='172.25.4.1', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;

切换成功
在这里插入图片描述
生成文件
在这里插入图片描述

自动切换

MHA在线切换的大概过程:
1.检测复制设置和确定当前主服务器
2.确定新的主服务器
3.阻塞写入到当前主服务器
4.等待所有从服务器赶上复制
5.授予写入到新的主服务器
6.重新设置从服务器

为了保证数据完全一致性,在最快的时间内完成切换,MHA的在线切换必须满足以下条件才会切换成功,否则会切换失败。
1.所有slave的IO线程都在运行
2.所有slave的SQL线程都在运行
3.所有的show slave status的输出中Seconds_Behind_Master参数小于或者等于running_updates_limit秒,如果在切换过程中不指定running_updates_limit,那么默认情况下running_updates_limit为1秒。
4.在master端,通过show processlist输出,没有一个更新花费的时间大于running_updates_limit秒。

[root@server4 app1]# rm -rf app.failover.complete 
[root@server4 app1]# masterha_manager --conf=/etc/masterha/app.cnf &

[root@server1 ~]# /etc/init.d/mysqld stop

在这里插入图片描述

[root@server1 ~]# /etc/init.d/mysqld start

[root@server1 ~]# mysql -pwestos
mysql> CHANGE MASTER TO MASTER_HOST='172.25.4.2', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;

已切换到server2
在这里插入图片描述

[root@server4 app1]# rm -rf app.failover.complete 

脚本切换

需要的文件

[root@server4 ~]# cd /usr/local/bin/
[root@server4 bin]# ls
[root@server4 bin]# chmod +x *

在这里插入图片描述

[root@server4 bin]# vim /etc/masterha/app.cnf

在这里插入图片描述

[root@server2 ~]# ip addr add 172.25.4.100/24 dev eth0
[root@foundation4 Desktop]# mysql -h 172.25.4.100 -u root -pwestos
mysql> show databases;

在这里插入图片描述

[root@server4 masterha]# masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.4.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

server3查看,master已经切换到server1
在这里插入图片描述
打入后台,关闭server1

[root@server4 masterha]# masterha_manager --conf=/etc/masterha/app.cnf &
[root@server1 ~]# /etc/init.d/mysqld stop

server3查看,master节点切换到server1
在这里插入图片描述
启动server1,加入server2

[root@server1 ~]# /etc/init.d/mysqld start
[root@server1 ~]# mysql -pwestos
mysql>  CHANGE MASTER TO MASTER_HOST='172.25.4.2', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> start slave;
mysql> show slave status\G;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值