mysql高可用架构之MHA

MySQL MHA架构介绍:

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由
日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下
故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成
数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,
以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。

MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,
它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障
转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,
但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行
故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与
半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于
其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

这里写图片描述

实验环境:mysql5.7版本、虚拟机6.5版本、3台主机配置mha
实验:
一、mysql实现主从复制
1、初始配置
server1、2、3:

关闭数据库
/etc/init.d/mysqld stop
设置开机不开启
chkconfig mysqld off
chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off
删除数据库配置信息
cd /var/lib/mysql
rm -fr *
编辑配置文件
vim /etc/my.cnf
 29 server_id=1           ##server2、server3分别改为2和3
 30 gtid_mode=ON
 31 enforce_gtid_consistency=ON
 32 master_info_repository=TABLE
 33 relay_log_info_repository=TABLE
 34 log_slave_updates=ON
 35 log_bin=binlog
 36 binlog_format=ROW
开启数据库
/etc/init.d/mysqld start
查看数据库初始密码
grep password /var/log/mysqld.log 
数据库安全设置(修改密码,第一个选项press,其他填y)
mysql_secure_installation 
登陆
mysql -p

2、数据库配置(实现主从复制)
设置master
server1:

mysql> show master status;
设置授权
mysql> grant replication slave on *.* to repl@'172.25.10.%' identified by'Wxj14370902!';
mysql> show databases;
重置master
mysql> reset master;

设置slave
server2、3:

同步授权
mysql> change master to master_host='172.25.61.1',master_user='repl',master_password='Wxj14370902!',master_auto_position=1;
开启slave
mysql> start slave;
查看能否实现主从复制
mysql> show slave status\G;
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

检测:
master端:

建立库
mysql> create database haha;

slave端:

查看是否同步
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| haha               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

二、mha实现mysql高可用
1、mha配置
server1:

[root@server1 ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm perl-* -y
[root@server1 ~]# mkdir -p /etc/masterha
[root@server1 ~]# cd /etc/masterha/
编辑脚本
[root@server1 masterha]# vim app1.cnf
[root@server1 ~]# cat /etc/masterha/app1.cnf 
[server default]
manager_workdir=/etc/masterha/             //设置manager的工作目录
manager_log=/etc/masterha/app1.log         //设置manager的日志
master_binlog_dir=/var/log/mysql           //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
#master_ip_failover_script= /usr/local/bin/master_ip_failover    //设置自动failover时候的切换脚本
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change  //设置手动切换时候的切换脚本
password=Wxj14370902!        //设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root                    //设置监控用户root
ping_interval=1              //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
remote_workdir=/tmp          //设置远端mysql在发生切换时binlog的保存位置
repl_password=Wxj14370902!   //设置复制用户的密码
repl_user=repl               //设置复制环境中的复制用户名
#report_script=/usr/local/send_report    //设置发生切换后发送的报警的脚本
#secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02            
#shutdown_script=""     //设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root           //设置ssh的登录用户名

[server1]
hostname=172.25.10.1
port=3306

[server2]
hostname=172.25.10.2
port=3306
#candidate_master=1   //设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
#check_repl_delay=0   //默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server3]
hostname=172.25.10.3
port=3306

server2、3:

yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm

2、免密连接
server1:

创建密钥
[root@server1 masterha]# ssh-keygen
[root@server1 ~]# ssh-copy-id server1
[root@server1 ~]# ssh-copy-id 172.25.10.1/2/3
将密钥发送至server2、server3
[root@server1 ~]# scp -r .ssh/ server2:
[root@server1 ~]# scp -r .ssh/ server3:
尝试连接
ssh server1/2/3
logout
ssh 172.25.10.2/3
logout
[root@server1 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf 

这里写图片描述
3、集群配置
server1:

[root@server1 masterha]# mysql -p
mysql> grant all on *.* to root@'%' identified by 'Wxj14370902!';
mysql> grant replication slave on *.* to repl@'172.25.61.%' identified by 'Wxj14370902!';

server2、3:

mysql> set GLOBAL read_only=1;

查看集群状态

[root@server1 masterha]# masterha_check_repl --conf=/etc/masterha/app1.cnf
Sat Aug 11 11:09:30 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sat Aug 11 11:09:30 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Sat Aug 11 11:09:30 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Sat Aug 11 11:09:30 2018 - [info] MHA::MasterMonitor version 0.56.
Sat Aug 11 11:09:30 2018 - [info] GTID failover mode = 1
Sat Aug 11 11:09:30 2018 - [info] Dead Servers:
Sat Aug 11 11:09:30 2018 - [info] Alive Servers:
Sat Aug 11 11:09:30 2018 - [info]   172.25.10.1(172.25.10.1:3306)
Sat Aug 11 11:09:30 2018 - [info]   172.25.10.2(172.25.10.2:3306)
Sat Aug 11 11:09:30 2018 - [info]   172.25.10.3(172.25.10.3:3306)
Sat Aug 11 11:09:30 2018 - [info] Alive Slaves:
Sat Aug 11 11:09:30 2018 - [info]   172.25.10.2(172.25.10.2:3306)  Version=5.7.17-log (oldest major version between slaves) log-bin:enabled
Sat Aug 11 11:09:30 2018 - [info]     GTID ON
Sat Aug 11 11:09:30 2018 - [info]     Replicating from 172.25.10.1(172.25.10.1:3306)
Sat Aug 11 11:09:30 2018 - [info]   172.25.10.3(172.25.10.3:3306)  Version=5.7.17-log (oldest major version between slaves) log-bin:enabled
Sat Aug 11 11:09:30 2018 - [info]     GTID ON
Sat Aug 11 11:09:30 2018 - [info]     Replicating from 172.25.10.1(172.25.10.1:3306)
Sat Aug 11 11:09:30 2018 - [info] Current Alive Master: 172.25.10.1(172.25.10.1:3306)
Sat Aug 11 11:09:30 2018 - [info] Checking slave configurations..
Sat Aug 11 11:09:30 2018 - [info] Checking replication filtering settings..
Sat Aug 11 11:09:30 2018 - [info]  binlog_do_db= , binlog_ignore_db= 
Sat Aug 11 11:09:30 2018 - [info]  Replication filtering check ok.
Sat Aug 11 11:09:30 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Sat Aug 11 11:09:30 2018 - [info] Checking SSH publickey authentication settings on the current master..
Sat Aug 11 11:09:30 2018 - [info] HealthCheck: SSH to 172.25.10.1 is reachable.
Sat Aug 11 11:09:30 2018 - [info] 
172.25.10.1(172.25.10.1:3306) (current master)
 +--172.25.10.2(172.25.10.2:3306)
 +--172.25.10.3(172.25.10.3:3306)

Sat Aug 11 11:09:30 2018 - [info] Checking replication health on 172.25.10.2..
Sat Aug 11 11:09:30 2018 - [info]  ok.
Sat Aug 11 11:09:30 2018 - [info] Checking replication health on 172.25.10.3..
Sat Aug 11 11:09:30 2018 - [info]  ok.
Sat Aug 11 11:09:30 2018 - [warning] master_ip_failover_script is not defined.
Sat Aug 11 11:09:30 2018 - [warning] shutdown_script is not defined.
Sat Aug 11 11:09:30 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

4、检测
手动切换:
在线切换(两台主机都好着)

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.10.1 --new_master_port=3306 --orig_master_is_new_slave 

故障切换(当把主master的mysql进程关闭时,切换到slave当master)

masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.10.1 --dead_master_port=3306 --new_master_host=172.25.10.2 --new_master_port=3306 --ignore_last_failover

自动切换:

监控命令
nohup master_manager --conf=/etc/masterha/app1.cnf --ignore_last_failover &
关闭mysql进程
ps ax 
 3091 pts/0    S      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --soc
 3388 pts/0    Sl     0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --
[root@server2 ~]# kill -9 3091
[root@server2 ~]# kill -9 3388
监控命令自动结束,master自动切换
在其他主机使用命令查看master切换至哪台主机、并且查看本机IO进程和SQL进程是否为yes
mysql> show slave status\G;
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值