目录
概念:
1、MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
2、MHA 的出现就是解决MySQL 单点的问题。
3、MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
4、MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
特点:
1、MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
2、使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
3、目前MHA支持一主多从架构,最少三台服务,即一主两从
一、ssh免密登录
准备三台安装好mariadb的虚拟机和一台干净环境的MHA
下面是我设置好的四台主机
192.168.115.128 mgt
192.168.115.130 master
192.168.115.131 slave1
192.168.115.132 slave2
每台主机生成密钥对传至其他三台
ssh-keygen 生成密钥对
ssh-copy-id 将公钥传至其他服务器
实现主机名登录做解析
vim /etc/hosts
192.168.115.128 mgt
192.168.115.130 master
192.168.115.131 slave1
192.168.115.132 slave2
wqscp /etc/hosts 192.168.115.130:/etc/hosts
scp /etc/hosts 192.168.115.131:/etc/hosts
scp /etc/hosts 192.168.115.132:/etc/hosts
做验证
ssh master
ssh slave1
ssh slave2
依此验证(其他主机也要试一下,大家知道怎么验证就行了,就不逐一打了)
二、mysql主从复制
master更改如下:
vim /etc/my.cnf
[mysqld]
server-id = 20
log-bin = master-bin
log-slave-updates = truewq
systemctl restart mariadb 重启mariadb
配置可用的访问用户
mysql -uroot -p
grant replication slave on *.* to 'myslave'@'192.168.115.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.128' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.131' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.132' identified by '123.com';
flush privileges;
show master status;
slave:
vim /etc/my.cnf
[mysqld]
server-id=30
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.indexwq
systemctl restart mariadb 重启mariadb
mysql -uroot -p
grant replication slave on *.* to 'myslave'@'192.168.115.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.128' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.130' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.115.132' identified by '123.com';
flush privileges;
指定master
change master to master_host='192.168.115.130',master_user='myslave',master_password='123.com',master_log_file='master-bin.000001',master_log_pos=1088; 标红的地方看自己master的
另外一台一样
完事之后验证一下:
[master]
mysql -uroot -p
>create database aaa;
>show databases;
[slave1]show databases;
[slave2]
show databases;
确保验证成功
三、MHA安装
所有节点安装perl环境(四台多要装)
yum -y install epel-release
yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN
所有节点安装node(四台多要装)
tar xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL && make && make install
验证
cd /usr/local/bin
ll
看到脚本就OK
安装manager(只需MHA安装)
tar xf mha4mysql-manager-0.57.tar.gz
cd /root/mha4mysql-manager-0.57
perl Makefile.PL && make && make install
cp sample/scripts/master_ip_failover /usr/local/bin/
cp sample/scripts/master_ip_online_change /usr/local/bin/
cd /usr/local/bin
vim master_ip_failover
指定vip地址
指定vip广播地址
指定vip绑定的网卡
mkdir /etc/masterha 配置文件建立
vim /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
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=123.com
ping_interval=1
remote_workdir=/tmp
repl_password=123.com
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.115.131 -s 192.168.115.132
shutdown_script=""
ssh_user=root
user=mha[server1]
hostname=192.168.115.130
port=3306[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.115.131
port=3306[server3]
hostname=192.168.115.132
port=3306
wq
mkdir /var/log/masterha/app1
测试MHA
masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf
启动命令
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
测试
停用master的mariadb服务