MySQL高可用(MHA)

高可用

1.关于Mha
MHA是一款开源的mysql的高可用程序,它为mysql主从复制架构了,master down掉之后,从slave中产生新的master的功能,MHA在监控到master数据节点服务器故障时,会提升其中拥有最新的数据的slave成为新的master。MHA主句节点和MHA管理节点,MHA Manager通常单独部署在一台服务器上,MHA Node通常在每台mysql服务器上;(1)把某一个slave节点提升为master节点;(2)在提升之前,会把所有其他slave节点记录的所有数据合并到要提升为主节点(master)的那个(slave)从节点上。
2.Mha组件
(1)Manager节点
masterha_check_ssh: MHA依赖ssh环境检测工具
masterha_check_repl: mysql复制环境检测工具
masterha_manager: MHA服务主程序
masterha_check_status:MHA运行状态探测工具
masterha_check_monitor: mysql master节点可用性检测工具
masterha_check_switch:master节点切换工具
masterha_conf_host:添加或删除配置节点
masterha_stop:关闭MHA服务
(2)Node节点
save_binary_logs: 保存和复制master的二进制日志
apply_diff_relay_logs:识别差异的中继日志事件并应用与其他slave
filter_mysqlbinlog:去除不必要的rollback事件
purge_relay_logs:清除中继日志(不会阻塞sql线程)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
实验环境:三台数据库服务器上已经安装好的5.7版本的mysql
server1 : matser (node1)
server2: master-slave(node2)
server3:master-salve(node3)
server4: mha-manager
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

一.半同步主从复制环境配置

1. server1,server2,server3 的/etc/my.conf配置文件相同

vim /etc/my.cnf
    server-id=XX
    log-bin=mysql-bin
    gtid_mode=ON
    enforce_gtid_consistency=ON

server1
这里写图片描述
这里写图片描述
server2
这里写图片描述这里写图片描述
server3
这里写图片描述
这里写图片描述
2. server1,server2,server3 数据库的操作
server1数据库操作

mysql> alter user root@localhost identified by 'Xuehui+666';
mysql> flush privileges;
mysql> grant replication slave on *.* to repl@'%' identified by 'Xuehui+666';
mysql> show master status;

这里写图片描述

server2 和server3上数据库操作(server2,sever3设置相同)

mysql> alter user root@localhost identified by 'Xuehui+666';
mysql> change master to master_host='172.25.100.1',master_user='repl',master_password='Xuehui+666',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

这里写图片描述
这里写图片描述
server1,server2,server3进行半同步配置,深度保证数据一致性(操作完全一致)
配置文件

vim /etc/my.cnf
    server-id=1
    log-bin=mysql-bin
    gtid_mode=ON
    enforce_gtid_consistency=ON

    rpl_semi_sync_master_enable=1   ##自动启用半同步
    rpl_semi_sync_slave_enable=1    ##自动启用半同步

server1上
这里写图片描述
这里写图片描述
server2
这里写图片描述
这里写图片描述
server3
这里写图片描述
这里写图片描述

3.主从复制测试成功:再server1中建数据库,server2和server3同步了
这里写图片描述
这里写图片描述
这里写图片描述

二.节点配置

1.
server4上安装 mha4mysql-node-0.56-0.el6.noarch.rpm -y
这里写图片描述
server4上解决依赖性以后,再安装mha4mysql-manager-0.56-0.el6.noarch.rpm
这里写图片描述
这里写图片描述

2. server1 , server2 , server3上安装mha4mysql-node-0.56-0.el6.noarch.rpm
这里写图片描述
这里写图片描述
这里写图片描述

三.配置管理节点目录

1.配置MHA manger(server4)目录,编辑配置文件

[server default]
manager_workdir=/etc/masterha/
manager_log=/etc/masterha/manager.log
master_binlog_dir=/var/lib/mysql
#master_ip_failover_script= /usr/local/bin/master_ip_failover
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change
password=Xuehui+666
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=Xuehui+666
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

[server1]
hostname=172.25.100.1
port=3306

[server2]
hostname=172.25.100.2
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=172.25.100.3
port=3306

这里写图片描述
这里写图片描述

2. 让server1,server2,server3,server4可以互相免密ssh
server4上

ssh-keygen  ##运行后直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/root/.ssh"目录下。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  ##Master节点上把id_rsa.pub追加到授权的key里面,至此,本机普通用户可以无密码登录
ssh-copy-id server1 ##/root/.ssh下,把master上的公钥复制到所有Slave机器上
ssh-copy-id server2  ##这个命令的作用就是把当前机器的公钥追加到slave的authorized_keys里面,效果跟scp复制到slave,然后cat 追加是一样的。
ssh-copy-id server3
##至此,Master账号可以ssh无密码登录到Slave
##从Slave无密码登录到Master,和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加(>>)到Master的".ssh"文件夹下的"authorized_keys"中。

这里写图片描述
这里写图片描述
这里写图片描述
ssh免密连接成功
这里写图片描述
这里写图片描述
检验:出现All SSH connection tests passed successfully.表示成功

masterha_check_ssh --conf=/etc/masterha/app.conf 

这里写图片描述

3.数据库授权
server1数据库操作

grant all on *.* to root@'%' identified by 'Xuehui+666';

这里写图片描述
server4检查MySQL Replication Health is OK. 表示好了

masterha_check_repl --conf=/etc/masterha/app.conf

这里写图片描述…….这里写图片描述
server4上开启mha服务,进程启动成功

masterha_manager --conf=/etc/masterha/app.conf &

这里写图片描述
……这里写图片描述
查看mha状态,查看监控日志

masterha_check_status --conf=/etc/masterha/app.conf  
tail -n2 /etc/masterha/manager.log

这里写图片描述
这里写图片描述
其中”Ping(SELECT) succeeded, waiting until MySQL doesn’t respond..”说明整个系统已经开始监控了。
4.检测MHA基本高可用功能
关闭master(server1)上的mysql
这里写图片描述
查看监控日志,master切换到server2
这里写图片描述
删除app.failover.complete这里写图片描述
server2上查看master信息
这里写图片描述
server3上产看slave信息,master切换到server1
这里写图片描述
开启server1,server2的slave,这样server2成为server1和server3上的master

/etc/init.d/mysqld start
mysql -pXuehui+666
change master to master_host='172.25.100.2',master_user='repl',master_password='Xuehui+666',master_auto_position=1;

这里写图片描述
这里写图片描述

在server4上手动切换master为server1,原master切换为slave,全输入yes

masterha_master_switch --conf=/etc/masterha/app.conf --master_state=alive --new_master_host=172.25.100.1 --new_master_port=3306 --orig_master_is_new_slave

这里写图片描述
……这里写图片描述
……这里写图片描述
……这里写图片描述
查看server2的slave信息,master切换为server1
这里写图片描述
查看server2的slave信息,master切换为server1
这里写图片描述
切换成功!

猜你喜欢

转载自blog.csdn.net/guaiderzhu1314/article/details/80345136