一主两从一管理,一共四台设备

MHA的作用是做master的高可用,当主节点MySQL故障时,会将和主节点数据最接近的一个从节点提升为主节点,同时如果其他从节点有更新的数据也会同步到此“准主节点”上。如果在主节点有数据已经提交但是所有的从节点还未完成复制,则从节点提升为主节点后只能将此数据回退,没有别的办法。


准备事项:


1、同步时间

ntpdate 172.18.0.1

2、配置主机域名,在主节点即node1上操作

vim /etc/hosts
192.168.1.101 node1  #主节点
192.168.1.106 node2  #从节点
192.168.1.107 node3  #从节点
192.168.1.100 node4  #manager
scp /etc/hosts  node2:/etc/hosts
scp /etc/hosts  node3:/etc/hosts
scp /etc/hosts  node4:/etc/hosts

3、MHA需要ssh无密钥验证

ssh-keygen -t rsa -P ''
cd  /root/.ssh/
ssh-copy-id -i ./id_rsa.pub  root@node1
scp id_rsa{,.pub} authorized_keys  node2:/root/.ssh
scp id_rsa{,.pub} authorized_keys  node3:/root/.ssh
scp id_rsa{,.pub} authorized_keys  node4:/root/.ssh


下面开始具体步骤:


1、配置主从复制集群

node1:
vim /etc/my.cnf.d/server.cnf  
 [server]
  skip_name_resolve=ON
  innodb_file_per_table=ON
  server_id = 1
  log_bin = master-log
  relay_log = relay-log
  #主节点也要配置中继日志,因为主节点故障再恢复时就会称为从节点
node2:
vim /etc/my.cnf.d/server.cnf  
[server]
  skip_name_resolve=ON
  innodb_file_per_table=ON
  server_id = 2
  relay_log = relay-log
  log_bin = master-log
  relay_log_purge = OFF
  read_only = ON
  
  node3:
vim /etc/my.cnf.d/server.cnf  
[server]
  skip_name_resolve=ON
  innodb_file_per_table=ON
  server_id = 3
  relay_log = relay-log
  log_bin = master-log
  relay_log_purge = OFF
  read_only = ON

开启服务

systemctl  start mariadb.service


2、在主节点授权复制账号

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY 'centos';

主节点授权管理设备的管理账号

GRANT ALL ON *.* TO 'mhaadmin'@'192.168.1.%' IDENTIFIED BY 'centos';

写入磁盘

FLUSH PRIVILEGES;


3、在从节点配置

CHANGE  MASTER TO MASTER_HOST='192.168.1.101',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=245;
START SLAVE ;
SHOW SLAVE STATUS\G;
SELECT USER FROM mysql.user;
#能看到复制授权账户和管理账户已经同步


4、安装MHA软件包

在manager节点安装manager和node包

yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm


5、在node上安装node包

yum -y install  mha4mysql-node-0.56-0.el6.noarch.rpm


6、在manager上配置

mkdir /etc/masterha
vim /etc/masterha/app1.cnf
[server default]
user=mhaadmin
password=centos
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=centos
ping_interval=1

[server1]
hostname=192.168.1.101
ssh_port=22
candidate_master=1

[server2]
hostname=192.168.1.106
ssh_port=22
candidate_master=1

[server3]
hostname=192.168.1.107
ssh_port=22
candidate_master=1


7、检查配置并启动服务

检查
masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf 

启动manager服务器
masterha_manager  --conf=/etc/masterha/app1.cnf


8、测试

此时模拟主节点故障

SHOW MASTER STATUS; 
SHOW SLAVE STATUS;
#在从节点查看从节点信息,此时有一个从节点已经升级为主节点


9、修复原主节点

vim /etc/my.cnf.d/server.cnf    #添加两行
relay_log_purge = OFF
read_only = ON

再次开启服务上线
systemctl  start mariadb.service

CHANGE  MASTER TO MASTER_HOST='192.168.1.106',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=320; 
START SLAVE;
SHOW SLAVE STATUS\G;
#此时的主节点就是替代的原从节点


10、在manager上检查复制功能

masterha_check_repl --conf=/etc/masterha/app1.cnf
出现如下字样就说明主从已经切换了,而且原主节点此时也变成了从节点
192.168.1.106(192.168.1.106:3306) (current master)
 +--192.168.1.101(192.168.1.101:3306)
 +--192.168.1.107(192.168.1.107:3306)


11、再次启动MHA

nohup masterha_manager  --conf=/etc/masterha/app1.cnf &> /data/masterha/app1/manager.log &
#在后台执行,并剥离与当前终端的关系
#当主节点再次down掉,此程序会自动结束同时主从节点自动切换。然后我们还要再次手动开启MHA


至此实验结束