0、MHA的实现原理及功能
1)、监控节点(通过配置文件获取所有节点信息)
系统、网络
主从状态
2) 选主策略
1) 如果判断从库(position 或者gtid),数据有差异,最接近于master的slave,成为备选主;
2) 如果判断从库(position 或者GTid)数据一致安装配置文件配置server的顺序选择(默认)
3)如果设定有权重(candidate_master=1) ,按照权重强制指定备选主
1)、默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重也不会选它;
2)、如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主
3) 数据补偿策略
1)当ssh能连接,从库对主库gtid或者position 号,立即将二进制日志保持至各个从节点并且应用(save_binary_logs);
2)当ssh不能连接时,对比从库之间的relaylog的差异(apply_diff_relay_logs)
4) Failover
将备选主进行身份切换,对外提供服务其余从库和新主库确认新的主从关系
5) 应用透明(VIP)
6)通知机制(send_report)
7) 二次数据补偿(binlog_server)
8) 自愈(待开发中.......)
1、MHA的环境1主2从,确保主从环境正常
下载mha-node 和mha-manage
下载地址:https://github.com/yoshinorim/mha4mysql-node/releases
2、主从之间配置ssh 互信
ssh-keygen -t rsa -P ' '
ssh-copy-id
在三个节点上相互操作并相互验证
3、创建软连接
ln -s /app/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /app/mysql/bin/mysql /usr/bin/mysql
4、安装node 软件(三个节点都装)
yum install perl-DBD-MySQL -y
yum localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm
5、选择其中一台服务器作为manager服务器并安装下面软件
yum install -y perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManger perl-Time-HiRes
编译安装时需要安装下面的库(yum install perl-CPAN* -y)
yum localinstall mha4mysql-manager-0.58-0.el7.centos.noarch.rpm -y
6、创建MHA专用监控管理用户(直接在主库上创建就可以)
grant all privileges on *.* to 'mha'@'192.168.1.%' identified by '123';
flush privileges;
7、在三个节点上查看mha用户是否不同成功
select user,host from mysql.user;
8、在manager节点配置manager 配置文件
创建配置目录
mkdir -p /etc/mha
创建日志目录
mkdir -p /var/log/mha
编辑mha配置文件
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/data/mysql/binlog
user=mha
password=mha
ping_interval=2
repl_password=123.com
repl_user=repl
ssh_user=root
[server1]
hostname=192.168.1.130
port=3306
[server2]
hostname=192.168.1.141
port=3306
[server3]
hostname=192.168.1.145
port=3306
9、使用mha自带的命令工具验证ssh互信(都是ok,就说明环境正常)
master_check_ssh --conf=/etc/mha/app1.conf
10、验证主从复制
master_check_repl --conf=/etc/mha/app1.conf
11、启动manager
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
验证启动是否成功
masterha_check_status --conf=/etc/mha/app1.cnf