1、MHA概述:
- 一套优秀的mysql高可用环境下故障切换和主从复制的软件
- Mysql故障故障故障中,MHA能做到0-30秒自动完成故障切换
2、MHA的组成:
- MHA Manager(管理节点)
- MHA Node(数据节点)
3、MHA特点:
- 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失。
- 使用半同步复制,可以大大降低数据丢失的风险。
- 目前MHA支持一主多从架构,至少三台服务,即一主两从。
4、架构拓扑图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/135bdf8f804c9e82ab54327f75beceba.png)
5、实验代码:
实验前期准备:
1、关闭防火墙: systemctl stop firewalld.service、setenforce 0
2、命名:mysql1(主)、mysql2(主备)、mysql3(从)、mha(管理者,监控)
实验配置:
第一步:在三台数据库服务器上安装数据库:
yum install ncurses-devel gcc-c++ perl-Module-Install
tar zxvf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./configure
gmake && gmake install
在~下:tar zxvf mysql-5.6.36.tar.gz
cd mysql-5.6.36.tar.gz
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc
make && make install
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql.mysql /usr/local/mysql
mkdir -p /data/mysql
/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--user=mysql
第二步:做主从服务器角色:
在主服务器上:[mysqld]下面
vim /etc/my.cnf
server-id = 1
log_bin = master-bin
log-slave-updates = true
在主备和从服务器上:[mysqld]下面
server-id = 2
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
server-id = 3
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
三台服务器都添加:
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
/usr/local/mysql/bin/mysqld_safe --user=mysql &
grant replication slave on *.* to 'myslave'@'14.0.0.%' identified by '123';
grant all privileges on *.* to 'mha'@'14.0.0.%' identified by 'manager';
flush privileges;
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
flush privileges;
在主服务器上: (主从同步)
show master status;
在两个从服务器上: (14.0.0.15为主服务器的地址)
change master to master_host='14.0.0.15',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=1483;
start slave;
show slave status\G;
set global read_only=1;
flush privileges;
第三步:做mha组件
在该群集的所有节点上安装:
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
在~下:tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
perl Makefile.PL
make && make install
在”mha“上建组件(所有包拖进来,mha4mysql-manager-0.57.tar.gz 、mha4mysql-node-0.57.tar.gz )
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
perl Makefile.PL
make && make install
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57.tar.gz /
perl Makefile.PL
make && make install
ls /usr/local/bin/
第四步:无密码验证:
在mha上: (18)
ssh-keygen -t rsa 一路回车到底!!!
ssh-copy-id 14.0.0.15 主
ssh-copy-id 14.0.0.16 主备
ssh-copy-id 14.0.0.17 从
在主服务器上: (15)
ssh-keygen -t rsa 一路回车到底!!!
ssh-copy-id 14.0.0.16
ssh-copy-id 14.0.0.17
在主备服务器上: (16)
ssh-keygen -t rsa 一路回车到底!!!
ssh-copy-id 14.0.0.15
ssh-copy-id 14.0.0.17
在从服务器上: (17)
ssh-keygen -t rsa 一路回车到底!!!
ssh-copy-id 14.0.0.15
ssh-copy-id 14.0.0.16
第五步:配置mha服务:
在mha服务器上:
cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin/
ls /usr/local/bin/
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/
vim /usr/local/bin/master_ip_failover (见failover文件) ***************
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
vim /etc/masterha/app1.cnf
cp /usr/local/bin/scripts/master_ip_online_change ../
cp send_report /usr/local/
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123
repl_user=myslave
report_script=/usr/local/send_report
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 14.0.0.16 -s 14.0.0.17
shutdown_script=""
ssh_user=root
user=mha
[server1]
hostname=14.0.0.15
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=14.0.0.16
port=3306
[server3]
hostname=14.0.0.17
port=3306
实验验证:
1、无密码验证:
masterha_check_ssh -conf=/etc/masterha/app1.cnf
2、检查群集的健康状态:
masterha_check_repl -conf=/etc/masterha/app1.cnf
在主服务器上开启虚拟ip:
/sbin/ifconfig ens33:1 14.0.0.200
在mha上设置:
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 &
tailf /var/log/masterha/app1/manager.log
在主服务器上:(查看虚拟IP是否飘逸)
pkil -9 mysql