一、实验环境:
- rhel6.5 selinux关闭,防火墙关闭
- server1:172.25.54.4 mha-manager
- server2:172.25.54.1 master mysql-5.7.17 mha-node
- server3:172.25.54.2 master slave mysql-5.7.17 mha-node
- server4:172.25.54.3 master slave mysql-5.7.17 mha-node
若以前做过数据库实验,需要清理数据库数据
//清理以前数据库的数据
/etc/init.d/mysqld start
rm -rf /var/lib/mysql/*
> /var/log/mysqld.log
/etc/init.d/mysqld restart
在配置MHA之前,我们需要实现基于GTID的主从复制
Server1为主库,server2、3为从库
修改配置文件 /etc/my.cnf
vim /etc/my.cnf
启动mysql流程:
[root@server2 ~]# /etc/init.d/mysqld restart
[root@server2 ~]# cat /var/log/mysqld.log | grep password
2018-08-08T08:51:19.321424Z 1 [Note] A temporary password is generated for root@localhost: u/Klif/g3sFi
[root@server2 ~]# mysql_secure_installation //初始化设置
二、Master配置:
[root@server2 ~]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
//授予slaves replication权限
mysql> grant replication slave on *.* to 'tutu'@'172.25.54.%' identified by '5820hhXM!@#';
三、Slave配置
[root@server3 ~]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
mysql> change master to master_host='172.25.54.1',master_user='tutu',master_password='5820hhXM!@#', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes ##表示mysql连接成功
Slave_SQL_Running: Yes
若出现Slave_SQL_Running为No的情况(即master与slave的数据不同步)
解决如下
三、MHA manager配置
需要的安装包:
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm
perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
[root@server4 ~]# yum install *.rpm -y
mha高可用文件配置
[root@server4 ~]# mkdir /etc/masterha
[root@server4 ~]#vim /etc/masterha/mah.conf
------------------------------------------------
[server default]
manager_workdir=/etc/masterha //设置manager的工作目录
manager_log=/etc/masterha/mha.log //设置manager的日志
master_binlog_dir=/var/lib/mysql
//设置master 保存binlog的位置,以便MHA可以找到master的日志
user=root //监控用户
password="5820Hh!@#"
//设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
ping_interval=1
//设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
remote_workdir=/tmp //设置远端mysql在发生切换时binlog的保存位置
repl_user=tutu //设置复制环境中的复制用户名
repl_password="5820Hh!@#" //设置复制用户的密码
ssh_user=root //设置ssh的登录用户名
[server1]
hostname=172.25.54.1
port=3306
[server2]
hostname=172.25.54.2
port=3306
candidate_master=1 //设置为候选master
check_repl_delay=0
//默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master
[server3]
hostname=172.25.54.3
port=3306
#no_master=1
配置ssh免密连接
各个节点都是基于SSH互信通信; 把MHA管理节点上生成的私钥文件分别复制到其它三个节点上,确保可无需验证登录。
[root@server4 ~]# ssh-keygen -t rsa
[root@server4 ~]# ssh-copy-id server4
[root@server4 ~]# ssh-copy-id 172.25.54.4
[root@server4 ~]# ssh-copy-id 172.25.54.3
[root@server4 ~]# ssh-copy-id 172.25.54.2
[root@server4 ~]# ssh-copy-id 172.25.54.1
[root@server1 ~]# scp ~/.ssh/* server1:~/.ssh/
[root@server1 ~]# scp ~/.ssh/* server1:~/.ssh/
[root@server1 ~]# scp ~/.ssh/* server3:~/.ssh/
主节点授权:
mysql> grant all on *.* to root@'172.25.18.%' identified by '5820hhXM!@#';
//监控用户授权
四、测试:
//检测各节点间 ssh 互信通信
[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/mah.conf
...
All SSH connection tests passed successfully.
//表示ssh配置成功
//检查管理MySQL复制集群的连接
[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/mah.conf
...
MySQL Replication Health is OK.
//表示正常通过检测
高可用检测:
MHA manager
//启动 MHA
[root@server4 ~]# nohup masterha_manager --conf=/etc/masterha/mah.conf --ignore_last_failover 2>&1
中止主节点server1上mysql服务前,各slave的状态:
server2和server3状态一样:
中止主节点server1上mysql服务
[root@server2 ~]# /etc/init.d/mysqld stop
server2作为备份节点,主节点故障后会迅速替代其进行工作。
server2:
mysql> show slave status\G;
Empty set (0.00 sec)
server3:
mysql> show slave status\G;
Master_Host: 172.25.54.2
手动完成在线主从节点切换:
[root@server1 ~]# masterha_master_switch --conf=/etc/master/mah.conf--master_state=alive --new_master_host=172.25.54.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=1000
故障切换:
[root@server1 ~]#masterha_master_switch --conf=/etc/master/mah.conf--master_state=dead --dead_master_host=172.25.54.1 --dead_master_port=3306 --new_master_host=172.25.54.2 --new_master_port=3306 --ignore_last_failover