高可用
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
切换成功!