lamp架构-MHA高可用

目录:

  • MHA高可用
    • 简介
    • 实验环节
      • 配置一主两从
      • 新开一台机器作为管理端
      • 获取配置模板并进行配置
  • MHA高可用的切换
    • 手动切换
    • 自动模式

MHA高可用

简介

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。
目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。因为至少需要三台服务器!淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。
MHA架构:
lamp架构-MHA高可用_第1张图片

实验环节

需要四台虚拟机进行实验环境,其中一台负责manager,其余三台配置mysql主从复制且必须是一主二从。
四台机器必须SSH免密登录,node端安装node相关包和依赖包,manager安装所有依赖包。
server1,2,3负责mysql主从复制,server4负责配置manager!

配置一主两从

1.停止服务, 删除数据, 恢复初始状态:

[root@Server1 ~]# /etc/init.d/mysqld stop
[root@Server2 ~]# /etc/init.d/mysqld stop
[root@Server3 ~]# /etc/init.d/mysqld stop 

2.对每台机器做相同操作

[root@server1 mysql]# rm -fr /data/mysql/*
[root@server1 mysql]# mysqld --initialize --user=mysql
root@server1 mysql]# /etc/init.d/mysqld start
[root@server1 mysql]# mysql -p
输入刚才初始化得到的密码
进入之后修改登陆密码
mysql> alter user root@localhost identified by 'westos';

lamp架构-MHA高可用_第2张图片

lamp架构-MHA高可用_第3张图片

3.配成一主两从
server2,server3一样!!

vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server_id=1  #每个数据库都有一个不一样ID
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

lamp架构-MHA高可用_第4张图片

##对MASTER端
[root@Server1 data]# mysql -p ##登陆数据库
mysql> grant replication slave on *.* to repl@'%' identified by 'westos';   ##设置复制用户
mysql> grant all on *.* to root@'%' identified by 'westos'; ## 更改root登陆权限
mysql> show master status;

##对SLAVE端server2,server3!!
[root@Server2 data]# mysql -p
mysql> ALTER USER root@localhost identified by 'westos';
mysql> grant replication slave on *.* to repl@'%' identified by 'westos';
mysql> change master to master_host='172.25.1.1', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;

lamp架构-MHA高可用_第5张图片

lamp架构-MHA高可用_第6张图片

新开一台机器作为管理端

对于server4:

我这里已经准备好了MHA-7的安装所需要的所有包:
直接传到server4上
scp -r MHA-7 server4:~
[root@server4 ~]# cd MHA-7
[root@server4 MHA-7]# ls
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected].:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm [email protected]:
[root@server4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz

lamp架构-MHA高可用_第7张图片

在server1,2,3把刚才传过来的包安装:

cd
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm

lamp架构-MHA高可用_第8张图片

获取配置模板并进行配置

继续在server4上操作:

cd mha4mysql-manager-0.58
ls
cd samples/conf/
cat masterha_default.cnf
 mkdir /etc/masterha
 cp app1.cnf /etc/masterha/
cd /etc/masterha/
ls
vim /etc/masterha/app1.cnf 
#################################
user=root
password=westos
ssh_user=root
repl_user=repl
repl_password=westos
master_binlog_dir= /var/lib/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.1.250 -s 172.25.1.3
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log

[server1]
hostname=172.25.1.1

[server2]
hostname=172.25.1.2
candidate_master=1

[server3]
hostname=172.25.1.3
no_master=1
~           

lamp架构-MHA高可用_第9张图片
解压,安装需要的包:

tar xf mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.33-1.el7.x86_64.rpm  mysql-community-common-5.7.33-1.el7.x86_64.rpm mysql-community-libs-5.7.33-1.el7.x86_64.rpm  mysql-community-libs-compat-5.7.33-1.el7.x86_64.rpm  mysql-community-server-5.7.33-1.el7.x86_64.rpm

检查SSH连通性,由于没有做免密一定会出现报错

[root@Server4 masterha]# masterha_check_ssh --conf=/etc/masterha/app.cnf

作免密登录

cd
cd .ssh/
[root@Server4 masterha]# ssh-keygen
[root@Server4 masterha]# ssh-copy-id Server1
[root@Server4 masterha]# ssh-copy-id Server2
[root@Server4 masterha]# ssh-copy-id Server3
[root@Server4 masterha]# scp -r ~/.ssh/ Server1:
[root@Server4 masterha]# scp -r ~/.ssh/ Server2:
[root@Server4 masterha]# scp -r ~/.ssh/ Server3:

lamp架构-MHA高可用_第10张图片

lamp架构-MHA高可用_第11张图片

再次检查通过
masterha_check_ssh --conf=/etc/masterha/app.cnf

lamp架构-MHA高可用_第12张图片

做MHA切换等功能的检查,因为其他三台主机并没有安装配套的包因此也会报错
[root@Server4 masterha]# masterha_check_repl --conf=/etc/masterha/app.cnf

在server1,2,3上都需要安装,前面已经写了
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

若未授权,进入master主机msyql 给root用户远程登陆的权限
grant all on . to root@’%’ identified by ‘westos’;

检查成功通过
应该没问题会显示:
MySQL Replication Health is OK.

[root@Server4 masterha]# masterha_check_repl --conf=/etc/masterha/app.cnf

lamp架构-MHA高可用_第13张图片

lamp架构-MHA高可用_第14张图片

MHA高可用的切换

手动切换

MASTER为1且存活, 将其切换到2

masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.1.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

MASTER为1且临时关闭模拟出现问题, 将其切换到2

masterha_master_switch --master_state=dead --conf=/etc/masterha/app.cnf -dead_master_host=172.25.1.2 --dead_master_port=3306 --new_master_host=172.25.5.1 --new_master_port=3306 --ignore_last_failover

此时集群中只有2台主机, Server2主Server3从, Server1死

masterha_check_repl --conf=/etc/masterha/app.cnf

会提示错误, 因为不满足一主两从配置

自动模式

下载两个脚本

master_ip_failover  master_ip_online_change
vim master_ip_failover
vim master_ip_online_change
将里面的ip地址改为自己的就ok

在这里插入图片描述

小脚本,自动切:

masterha_manager --conf=/etc/masterha/app1.cnf &
ps ax #查看后台进程

lamp架构-MHA高可用_第15张图片

将一开始注释的配置文件中的脚本选项打开
vim /etc/masterha/app1.cnf
lamp架构-MHA高可用_第16张图片

赋予运行权限

chmod +x master_ip_failover  master_ip_online_change

修改其中的VIP为自己的172.25.1.100
添加到server2上:
然后直接停掉server上的数据库:

ip addr add 172.25.1.100/24 dev eth0
ip addr show
systemctl stop mysqld

lamp架构-MHA高可用_第17张图片

然后可以在server4上看到刚后台执行的命令开始动作了:

在这里插入图片描述
注意这个时候刚才添加在server2上的ip172.25.1.100不在了,它飘到了server1上:
lamp架构-MHA高可用_第18张图片
2上没有了:
lamp架构-MHA高可用_第19张图片
然后重新将server2启动

systemctl start mysqld
mysql -p
change master to master_host='172.25.1.1', master_user='repl', master_password='westos', master_auto_position=1;
start slave;

lamp架构-MHA高可用_第20张图片

masterha_master_switch --conf=/etc/masterha/app.cnf --master_state=alive --new_master_host=172.25.1.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在这里插入图片描述
这个时候会发现vip 172。25。1。100又不再server1上了,飘回了server2上:
lamp架构-MHA高可用_第21张图片
lamp架构-MHA高可用_第22张图片

你可能感兴趣的:(自动化运维企业实战,运维,ssh,mysql)