目录

  • MHA
  • 配置主从复制
  • 配置高可用
  • 配置vip进行节点更换
  • MySQL参数
  • 慢查询



配置高可用的目的是当主节点master出问题时可以最快的选择一台完成日志同步的slave节点升级为slave,然后将其他slave连接到新的master节点上,保证数据库的稳定使用。


实现高可用的服务时

MHA,配置MHA至少需要3台服务器,一台master节点,两台slave节点,两台slave中有一台是备用的master节点。

MHA

配置主从复制

因为使用MHA是需要保证mysql服务器主机之前都是配置好主从复制的,我们gtid 的主从复制防止方便更改master节点时复制数据
将所有节点的配置文件里添加的配置更新为

log-bin=mysql-bin
server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
log_bin=binlog

更新配置后需要重启mysqld服务。

配置高可用

mysql的三台主机配置完成后,我们需要第4台主机来配置高可用,在这台主机上安装MHA的软件包,这里需要的模块事比较多的,都需要安装

[root@sever4 Downloads]# ls MHA-7/
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  
mha4mysql-manager-0.58.tar.gz                   
mha4mysql-node-0.58-0.el7.centos.noarch.rpm     
perl-Config-Tiny-2.14-7.el7.noarch.rpm          
perl-Email-Date-Format-1.002-15.el7.noarch.rpm  
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm

安装完成后,还需要做的一件事是,因为这台主机是作为manager的,方式是通过ssh连接其他的3台主机去进行change master的动作,所以要配置免密对其他3台服务器主机

ssh-keygen		#生成密钥
#对三台mysql服务器进行加密
ssh-copy-id 172.25.254.5
ssh-copy-id 172.25.254.6
ssh-copy-id 172.25.254.7

免密设置完成后,将这台主机下家目录下的.ssh文件传给其他3台主机的家目录下,这样所有的主机就都是免密连接了。

然后将 mha4mysql-node-0.58-0.el7.centos.noarch.rpm 安装包在3台mysql服务器上都安装

centos mysql8 高可用 mysql高可用配置_linux


完成后在manager这台主机上创建配置目录,自行编写配置文件

[root@sever4 MHA-7]# mkdir /etc/masterha

[root@sever4 MHA-7]# vim  /etc/masterha/masterha.cnf
[server default]
manager_workdir=/etc/masterha	#指定工作目录
manager_log=/var/log/masterha.log	#指定日志存放路径
master_binlog_dir=/etc/masterha		#指定binlog存放路径
user=root
password=He1234..
ping_interval=1		#隔1秒试一次
remote_workdir=/tmp		#临时存放的目录
repl_user=redhat		#复制所用的用户
repl_password=He1234..	#复制所用的用户的密码
ssh_user=root
#指定我们的mysql服务器主机
[server1]
hostname=172.25.254.5
port=3306

[server2] 
hostname=172.25.254.6
port=3306 
candidate_master=1	#可晋升为master
check_repl_delay=0

[server3] 
hostname=172.25.254.7
port=3306
no_master=1		#设置这台主机不会成为master节点

因为我们设置的ssh使用root用户连接,所以需要在master节点对root进行权限设置,使支持远程连接

mysql> grant all on *.* to root@'%' identified by 'He1234..';
mysql> flush privileges;

配置完成后开始检测,检测结果是ok、successfully就是可以的

masterha_check_ssh --conf=/etc/masterha/masterha.cnf	#检测主机间的ssh连接是否通畅
masterha_check_repl --conf=/etc/masterha/masterha.cnf	#检测主从复制完整性

再来测试自动和手动节点的切换方式
manager是自动切换master节点的工具
开启测试,如果使用ps -ax查询进程正常就可以再去关闭

[root@sever4 masterha]# nohup masterha_manager --conf=/etc/masterha/masterha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha.log 2>&1 &
#--remove_dead_master_conf 移除无法使用的master节点
#--ignore_last_failover 忽略上一次的错误

[root@sever4 masterha]# masterha_stop --conf=/etc/masterha/masterha.cnf #关闭manager

开启正常后,来测试切换效果,开启manager进程时,会带有守护进程,如果mysql主机中的mysqld的进程被关闭,还会自动开启新的进程

centos mysql8 高可用 mysql高可用配置_centos mysql8 高可用_02


centos mysql8 高可用 mysql高可用配置_运维_03


自动切换的测试,开启manager进程,模拟关闭master节点的mysqld服务,看效果

关闭现master节点的mysqld服务,可以看到manager进程也会自动退出

centos mysql8 高可用 mysql高可用配置_运维_04


但是完成了新master节点的转换工作,slave节点已经连接到新的master上了

centos mysql8 高可用 mysql高可用配置_mysql_05


这些自动的操作过程都是在 /var/log/masterha.log 的日志里

centos mysql8 高可用 mysql高可用配置_mysql_06


所以说自动切换是字可以使用一次,如果再出故障就需要人工操作了,毕竟数据库对一个企业的重要性不言而喻,多次出故障是必须要及时解决的。

检测手动切换
离线切换:
当master宕机了,这时可以手动操作去切换到可以成为master节点的新主机上,关闭master节点的myald服务,执行切换命令

[root@sever4 masterha]# masterha_master_switch --master_state=dead --conf=/etc/masterha/masterha.cnf --dead_master_host=172.25.254.5 --dead_master_port=3306 --new_master_host=172.25.254.6 --new_master_port=3306

如果中途出现错误卡顿不动等现象,修复后重新执行时需要删除 /etc/masterha/masterha.failover.error 这个文件,

如果在执行过程中没有报错,但是卡顿住了,这时可能是之前的实验操作影响了数据同步,可解决的方法是将MySQL的3台主机mysqld服务删除原有数据重新安全初始化,再去配置主从复制即可

切换执行成功后在172.25.254.7主机上查看slave状态,因为配置的它是不会成为master的,所以它的新master只能是172.25.254.6.

centos mysql8 高可用 mysql高可用配置_linux_07

在线切换:
master正常运行中,想要去切换其他节点为新master节点,
首先开启刚才关闭的mysqld服务,并设置主从复制到新的master上,然后执行切换命令

masterha_master_switch --master_state=alive --conf=/etc/masterha/masterha.cnf --new_master_host=172.25.254.5 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

执行成功后,master节点就变回了172.25.254.5上,并且其他两台主机的master执行也是它

centos mysql8 高可用 mysql高可用配置_centos mysql8 高可用_08


centos mysql8 高可用 mysql高可用配置_centos mysql8 高可用_09


每次执行切换成功后需要删除 /etc/masterha/masterha.failover.complete 文件,因为它存在时不会允许再进行自动切换

centos mysql8 高可用 mysql高可用配置_运维_10

配置vip进行节点更换

当MySQL的master节点发生更换时,它的主机ip也是会改变的,但是对于外部访问来说,这样的改变用户是不知晓的,所以就会导致无法正常访问从而降低用户的好感度。

对于这种情况,我们需要配置vip去保证不管内部的MySQL服务服务器如何变化,外部的访问都是一样的。

这里的配置需要使用到MHA的脚本文件,这两个文件都是在MHA的包中

mha4mysql-manager-0.58.tar.gz 解压MHA的压缩包在里面找到需要的脚本文件

centos mysql8 高可用 mysql高可用配置_linux_11


将这两个脚本放到执行manager进程的主机的 /usr/local/bin/ 目录下。并增加执行权限

centos mysql8 高可用 mysql高可用配置_linux_12


首先编辑 master_ip_failover 脚本

需要添加的内容

35 my $vip = '172.25.254.100/24';	#设置的vip
 36 my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";	#添加vip的方式
 37 my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";	#删除vip的方式

centos mysql8 高可用 mysql高可用配置_linux_13


然后编辑 master_ip_online_change 脚本

31 my $vip = '172.25.254.100/24';
 32 my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
 33 my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
 34 my $exit_code = 0;

centos mysql8 高可用 mysql高可用配置_运维_14


保存退出后

在/etc/masterha/masterha.cnf这个配置文件里需要添加这两个执行脚本进去

master_ip_failover_script= /usr/local/bin/master_ip_failover
master_ip_online_change_script= /usr/local/bin/master_ip_online_change

centos mysql8 高可用 mysql高可用配置_mysql_15


测试

目前我们的MySQL节点分布是server6是master节点,server5和server7都是slave节点,尝试切换前,我们还需要在server6上添加我们的vip

centos mysql8 高可用 mysql高可用配置_centos mysql8 高可用_16


使用在线手动切换测试,将server5变为新的master

centos mysql8 高可用 mysql高可用配置_数据库_17


可以看到执行的过程中停止了server6上的vip,在server5上开启了vip

centos mysql8 高可用 mysql高可用配置_数据库_18


centos mysql8 高可用 mysql高可用配置_mysql_19


去主机上查看详细信息可以看到现在的vip存在于server5


centos mysql8 高可用 mysql高可用配置_运维_20


centos mysql8 高可用 mysql高可用配置_mysql_21


并且msql的master节点也切换到server5上了手动切换成功后,再来测试manager进程自动切换

开启manager进程

centos mysql8 高可用 mysql高可用配置_linux_22


关闭目前的master节点server5的mysqld服务

centos mysql8 高可用 mysql高可用配置_数据库_23


查看vip情况,已经转移到server6上,并且server6成为新的master节点

centos mysql8 高可用 mysql高可用配置_运维_24


centos mysql8 高可用 mysql高可用配置_mysql_25

MySQL参数

慢查询
mysql> show variables like '%log%';
| slow_query_log                             | OFF 	#慢查询
| slow_query_log_file                        | /var/lib/mysql/server5-slow.log 	#产生慢查询保存的日志

mysql> set global slow_query_log=1;	#开启慢查询功能
mysql> select sleep(10);	#我们使用睡眠10秒来强制开启慢查询
+-----------+
| sleep(10) |
+-----------+
|         0 |
+-----------+
1 row in set (10.00 sec)

产生慢查询后可以在指定的日志路径查看日志信息

centos mysql8 高可用 mysql高可用配置_centos mysql8 高可用_26


日志里会详细写标识出使用慢查询的用户,以及慢查询的命令,然后就可以针对这个执行命令和结果去优化sql语句块,从而优化整个mysql数据库的服务。