相关概念
1)MHA
- 由日本DeNA公司youshimaton开发
- 优秀的实现MySQL高可用的解决方案
- 数据库的自动故障切换操作能做到在30s之内完成
- MHA能确保在故障切换过程中最大限度保证数据的一致性
2)MHA组成
MHA Manager 管理节点
- 管理所有数据库服务器
- 可以单独部署在一台独立的机器上
- 也可以部署在某台数据库服务器上
MHA Node 数据节点
- 存储数据的MySQL服务器
- 运行在每台MySQL服务器上
3)MHA工作过程
- MHA集群架构
由Manager定时探测集群中的master节点,当master故障时,Manager自动将拥有最新数据的slave提升为新的master
准备集群环境
- 配置所有数据库服务器之间彼此ssh免密登录
- 配置管理主机ssh免密登录所有数据库服务器
本次案例:
服务器ip | 服务器角色 |
---|---|
192.168.4.51 | master |
192.168.4.52 | slave1 |
192.168.4.53 | slave2 |
192.168.4.57 | MHA管理节点 |
192.168.4.100 | virtual ip |
- 配置数据库服务器主从半同步模式,从服务器开启binlog日志
所有数据库服务器同样操作,不论主从
,因为需要所有服务器都有能担任主服务器的能力
master,slave1,slave2:
vim /etc/my.cnf
server_id=51 #注意id别重复
log_bin=master51 #binlog日志名
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #加载半同步模块
rpl_semi_sync_master_enabled=1 #启用
rpl_semi_sync_slave_enabled=1 #启用
relay_log_purge=0 #禁止自动删除中继日志
systemctl restart mysqld
slave1,slave2:
mysql> change master to ... #设置主服务器
mysql> start slave; #启动slave进程
mysql> show slave status; #确认状态
配置管理主机
- 安装软件:
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
tar -xvf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56
perl Makefile.pl
make
make install
- 创建并编辑主配置文件:
模板文件:mha4mysql-manager-0.56/samples/conf/app1.cnf
mkdir /etc/mha #创建工作目录
cp mha4mysql-manager-0.56/sample/conf/app1.cnf /etc/mha/ #拷贝模板文件
vim /etc/mha/app1.cnf #编辑主配置文件
[server default] #管理服务默认配置
manager_workdir=/etc/mha #工作目录
manager_log=/etc/mha/manager.log #日志文件
master_ip_failover_script=/etc/mha/master_ip_failover #故障切换脚本
ssh_user=root #访问ssh服务用户
ssh_port=22 #ssh服务端口
repl_user=repluser #数据同步授权用户
repl_password=123qqq...A #密码
user=root #监控用户
password=123qqq...A #密码
[server1] #指定数据库服务器
hostname=192.168.4.51 #ip
candidate_master=1 #竞选主服务器
port=3306 #端口
[server2] #第二台
hostname=192.168.4.52
candidate_master=1
port=3306
[server3] #第三台
hostname=192.168.4.53
candidate_master=1
port=3306
- 部署故障切换脚本:
有服务器故障时,该脚本会自动将VIP移动到新的master服务器
cp mha-soft-student/master_ip_failover /etc/mha/
vim /etc/mha/master_ip_failover #手动添加四行
my $vip = '192.168.4.100/24'; # Virtual IP #定义VIP地址
my $key = "1"; #定义变量$key
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; #部署vip地址命令
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; #释放vip地址命令
- master服务器部署VIP:
[root@master] ifconfig eth0:1 192.168.4.100
配置数据库服务器(数据节点)
- 在所有数据库服务器上安装mha_node
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
- 在所有数据库服务器上授权用户
master:
mysql> grant all on *.* to root@'%' identified by '123qqq...A';
#授权监控用户,从服务器会自动同步授权
slave1,salve2:
grant replication slave on *.* to repluser@'%' identified by '123qqq...A';
#因为从服务器成为主服务器时,需要有此用户
启动管理服务
- 相关命令:安装目录/bin/
命令 | 作用 |
---|---|
masterha_check_ssh | 检查MHA的ssh配置状况 |
masterha_check_repl | 检查MySQL复制状况 |
masterha_manager | 启动MHA |
masterha_check_status | 检测MHA运行状态 |
masterha_stop | 停止MHA |
1)测试配置
[root@mha] masterha_check_ssh --conf=/etc/mha/app1.cnf #测试ssh配置
Sat Jan 11 16:06:40 2020 - [info] All SSH connection tests passed successfully. #配置正常的输出信息
[root@mha] masterha_check_repl --conf=/etc/mha/app1.cnf #测试主从
MySQL Replication Health is OK. #配置正常的输出信息
2)启动
[root@mha] masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
#选项1:指定配置文件
#选项2:主库宕机时从配置文件中删除它的配置
#选项3:忽略xxx.health文件,作用为不记录上次故障切换
#启动该服务会占用终端,主服务器宕机该进程会停止
[root@mha] masterha_check_status --conf=/etc/mha/app1.cnf #查看服务状态
app1 (pid:2803) is running(0:PING_OK), master:192.168.4.51 #正常运行的输出信息
向集群添加新的数据库服务器(修复故障)
- 启动mysql服务
- 确保与主服务器数据一致
- 指定主服务器信息
- 启动slave进程
- 查看状态信息
- MHAmanager配置文件写入该服务器
- masterha_check_repl