当前位置:   article > 正文

MHA高可用配置及故障切换

MHA高可用配置及故障切换

目录

MHA高可用配置及故障切换

MHA定义

MAH的组成

MHA特点

MHA工作原理

实验:搭建MySQL MHA

案例拓扑图

案例实施

四台服务器关闭防火墙防护,连接所有会话101、102、103、104

设置host文件

安装MySQL数据库 连接会话102、103、104

设置主库配置

从服务器配置

启动

修改登录密码

在所有Mylsq节点上配置授权 在102上授权

取消用户同步,单独针对一个节点去做操作

在mysql上查看mastar信息

在mysql2和mysql3设置slave配置主从环境

安装MHA软件

同时托入四个主机,连接101、102、103、104会话

设置阿里的yum基础源都安装MHA依赖的环境

在所有节点安装node组件

在 MHA-manager上安装manager组件

配置无密码认证

在 manager 上配置到所有节点的无密码认证

在 Mysql1 上配置到数据库节点的无密码认证

在 Mysql2 上配置到数据库节点的无密码认证

在 Mysql3 上配置到数据库节点的无密码认证

配置MHA

在 manager 节点上复制相关的脚本到/usr/local/bin目录

脚本具体作用

完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址

测试ssh无密码认证,如果正常最后输出successfully就是运行成功

测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常

首次配置MHA的VIP地址需要手动配置(在mysql上)102主机

启动HMA(在mha-manager主机上)101主机

查看MHA状态,可以看到当前的master是Mysql1节点

查看MHA日志

模拟master故障

用客户端链接群集 105主机

关闭当前的master 102

观察MHA日志,如果自动切换成功,最后输出successfully字样

在mysql2上查看状态


MHA高可用配置及故障切换

MHA定义

HMA(MasterHigh Availablity)是一套优秀的Mysql高可用环境下的故障切换和主从复制的软件

解决MySLQ单点的问题

MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。

故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA是建在主从复制的基础上的;0-30秒自动完成故障切换是MHA的特性 

MAH的组成

  • MHA Manager(管理节点)
  • NHA Node(数据节点)

MHA特点

  • 自动故障奇幻过程种,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险
  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

MHA工作原理

从宕机崩溃的master 保存二进制日志事件(binlog events);

识别含有最新的更新 slave 日志(可以理解为主从复制数据最新的从服务器)

应用差异的中继日志(relay log)到其他的slave(将数据信息最全最新的从服务器的中继日志给其他的从服务器)

应用从master保存的二进制日志事件

提升一个 salve 为新的master

使其他的slave连接行的master 进行复制。

实验:搭建MySQL MHA

目的:解决故障切换、尽可能的保存数据,以及所有节点日志的一致性

实验思路:搭建MHA机构---->数据库安装---->一主两从---->MHA搭建

故障模拟:主服务器失效---->主服务器的备胎服务器成为主服务器---->原故障

配置四台虚拟机

服务器

操作系统

主机名/IP 地址

角色

服务器

CentOS7.9

192.168.10.101

管理节点,安装 manager 组件

服务器

CentOS7.9

192.168.10.102

Master 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.103

Slave 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.104

Slave 节点,安装 node 组件

案例拓扑图

案例实施

四台服务器关闭防火墙防护,连接所有会话101、102、103、104

  1. [root@localhost ~]# systemctl stop firewalld
  2. [root@localhost ~]# systemctl disable firewalld
  3. [root@localhost ~]# setenforce 0
  4. [root@localhost ~]# vim /etc/sysconfig/selinux
  5. SELINUX=disabled

设置host文件

修改每个节点的hosts文件

  1. [root@localhost ~]# vim /etc/hosts
  2. 192.168.10.101 MHA-manager
  3. 192.168.10.102 Mysql1
  4. 192.168.10.103 Mysql2
  5. 192.168.10.104 Mysql3

安装MySQL数据库 连接会话102、103、104

[root@localhost ~]# yum -y install mariadb-server mysql

关闭掉101的同步

设置主库配置

  1. [root@localhost ~]# vim /etc/my.cnf
  2. server-id=102
  3. log-bin=master-bin
  4. binlog-format=MIXED
  5. relay-log-purge=0
  6. log-slave-updates=true

当relay-log-purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay-log-purge=0时,旧的 relaylog则会被保留

服务器配置

  1. server-id=103
  2. log-bin=master-bin
  3. binlog-format=MIXED
  4. relay-log-purge=0
  5. log-slave-updates=true
  6. server-id=104
  7. log-bin=master-bin
  8. binlog-format=MIXED
  9. relay-log-purge=0
  10. log-slave-updates=true

relay-log-purge=0 不自动删除中继日志,以便宕机后恢复数据

log-slave-updates=true Slave可以是其他Slave的Master,从而扩散Master的更新

启动

[root@localhost ~]# systemctl start mariadb

修改登录密码

[root@localhost ~]# mysqladmin -uroot password 'pwd123';

在所有Mylsq节点上配置授权 在102上授权

  1. [root@localhost ~]# mysql -uroot -ppwd123
  2. MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
  3. MariaDB [(none)]> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
  4. #创建以恶搞用户名为mha,密码为manager的用户允许该用户从以 192.168.10. 开头的IP地址段连接到MariaDB数据库,并且拥有对所有数据库和表的所有操作权限。
  5. MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
  6. MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
  7. MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
  8. 用主机名去进行连接
  9. MariaDB [(none)]> flush privileges;

取消用户同步,单独针对一个节点去做操作

在mysql上查看mastar信息
  1. MariaDB [(none)]> show master status;
  2. +-------------------+----------+--------------+------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  4. +-------------------+----------+--------------+------------------+
  5. | master-bin.000003 | 1346 | | |
  6. +-------------------+----------+--------------+------------------+
  7. 1 row in set (0.00 sec)

同步103、104会话

在mysql2和mysql3设置slave配置主从环境

  1. MariaDB [(none)]> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=1346;
  2. #
  3. master_host='192.168.10.102'
  4. : 这是主服务器(master)的IP地址或主机名,从服务器将连接到该地址获取主服务器的更新数据。
  5. master_user='myslave'
  6. : 这是连接到主服务器所使用的用户名。在这个例子中,从服务器将使用用户名 myslave 来连接到主服务器。
  7. master_password='123456'
  8. : 这是连接到主服务器所使用的密码。在这个例子中,密码是 123456
  9. master_log_file='master-bin.000003'
  10. : 这是主服务器上当前的二进制日志文件名,从服务器将从这个日志文件开始读取日志信息。
  11. master_log_pos=1346
  12. : 这是主服务器上二进制日志文件的位置(偏移量),从服务器将从这个位置开始读取日志信息。
  13. MariaDB [(none)]> start slave;
  14. MariaDB [(none)]> show slave status\G

安装MHA软件

所有服务器上安装MHA依赖环境

同时托入四个主机,连接101、102、103、104会话

但我们这里用ftp的基础源去安装(快一点)

  1. ftp的基础源
  2. rm -rf /etc/yum.repos.d/*
  3. curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
  4. curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo
  5. yum clean all
  6. 阿里的基础源
  7. rm -rf /etc/yum.repos.d/*
  8. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  9. curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
  10. yum clean all

设置阿里的yum基础源都安装MHA依赖的环境

yum install -y perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker perl-CPAN

> perl-DBD-MySQL   //perl针对于mysql数据库

> perl-Config-Tiny    //从配置文件中提拿其中的值

> perl-Log-Dispatch    //log-日志

> perl-Parallel-ForkManager      //多线程管理

> perl-ExtUtils-CBuilder       //扩展工具

> perl-ExtUtils-MakeMaker

> perl-CPAN        //cpan perl中的数据库

在所有节点安装node组件

  1. [root@localhost ~]# tar zxvf mha4mysql-node-0.57.tar.gz
  2. [root@localhost ~]# cd mha4mysql-node-0.57
  3. [root@localhost mha4mysql-node-0.57]# perl Makefile.PL
  4. [root@localhost mha4mysql-node-0.57]# make && make install

node工具(这些工具通常由MHAManager的脚本触发,无需人为操作)

  • save_binary_logs:保存和复制 master 的二进制日志。
  • apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slave。
  • filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)。
  • purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)。

在 MHA-manager上安装manager组件

不用同步只在manager上

  1. [root@localhost ~]# tar zxvf mha4mysql-manager-0.57.tar.gz
  2. [root@localhost ~]# cd mha4mysql-manager-0.57
  3. [root@localhost mha4mysql-manager-0.57]# perl Makefile.PL
  4. [root@localhost mha4mysql-manager-0.57]# make && make install

manager工具

  • masterha_check_ssh:检查 MHA 的 SSH 配置状况。
  • masterha_check_repl:检查 MySQL 复制状况。第12 页 共 31 页
  • masterha_manger:启动 MHA
  • masterha_check_status:检测当前 MHA 运行状态。
  • masterha_master_monitor:检测 master 是否宕机。
  • masterha_master_switch:控制故障转移(自动或者手动)。
  •  masterha_conf_host:添加或删除配置的 server 信息。

配置无密码认证

实现无密码认证方式,一种是账号密码,一种是密钥对

生成密钥对,取消同步功能

在 manager 上配置到所有节点的无密码认证

  1. [root@localhost ~]# ssh-keygen -t rsa
  2. ssh-copy-id192.168.10.102
  3. ssh-copy-id192.168.10.103
  4. ssh-copy-id192.168.10.104
  5. yes
  6. 密码就是你root用户的密码(aptech)

在 Mysql1 上配置到数据库节点的无密码认证

  1. [root@localhost ~]# ssh-keygen -t rsa
  2. ssh-copy-id192.168.10.103
  3. ssh-copy-id192.168.10.104

在 Mysql2 上配置到数据库节点的无密码认证

  1. [root@localhost ~]# ssh-keygen -t rsa
  2. ssh-copy-id192.168.10.102
  3. ssh-copy-id192.168.10.104

在 Mysql3 上配置到数据库节点的无密码认证

  1. [root@localhost ~]# ssh-keygen -t rsa
  2. ssh-copy-id192.168.10.102
  3. ssh-copy-id192.168.10.103

配置MHA

在 manager 节点上复制相关的脚本到/usr/local/bin目录

  1. cd/mha4mysql-manager-0.57/samples
  2. [root@localhost samples]# cd scripts/
  3. [root@localhost scripts]# ls
  4. master_ip_failover master_ip_online_change power_manager send_report
  5. [root@localhost scripts]# cp * /usr/local/bin/
  6. [root@localhost scripts]# cd /usr/local/bin/
脚本具体作用
  • master_ip_failover:自动切换时 VIP 管理的脚本
  •  master_ip_online_change:在线切换时 vip 的管理
  • power_manager:故障发生后关闭主机的脚本
  • send_report:因故障切换后发送报警的脚本

完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址

复制master_ip_failover脚本到/usr/local/bin目录,这里使用脚本管理VIP

  1. [root@localhost bin]# rm -rf master_ip_failover #删除该文件
  2. [root@localhost bin]# chmod +x master_ip_failover 给该文件添加执行权
  3. [root@localhost bin]# cd
  4. [root@localhost ~]# cd /etc/
  5. [root@localhost etc]# mkdir masterha
  6. [root@localhost ~]# cd mha4mysql-manager-0.57
  7. [root@localhost mha4mysql-manager-0.57]# cd samples/
  8. [root@localhost samples]# ls
  9. conf scripts
  10. [root@localhost samples]# cd conf/
  11. [root@localhost conf]# ls
  12. app1.cnf masterha_default.cnf
  13. [root@localhost conf]# cp app1.cnf /etc/masterha/
  14. [root@localhost conf]# vim /etc/masterha/app1.cnf
  15. [server default]
  16. manager_workdir=/var/log/masterha/app1
  17. manager_log=/var/log/masterha/app1/manager.log
  18. master_binlog_dir=/usr/local/mysql/data
  19. #master_binlog_dir=/var/lib/mysql
  20. master_ip_failover_script= /usr/local/bin/master_ip_failover
  21. master_ip_online_change_script=/usr/local/bin/master_ip_online_change
  22. user=mha
  23. password=manager
  24. ping_interval=1
  25. remote_workdir=/tmp
  26. repl_user=myslave
  27. repl_password=123456
  28. secondary_check_script= /usr/local/bin/masterha_secondary_check -s192.168.10.103 -s 192.168.10.104
  29. shutdown_script=""
  30. ssh_user=root
  31. [server1]
  32. hostname=192.168.10.102
  33. port=3306
  34. [server2]
  35. hostname=192.168.10.103
  36. port=3306
  37. candidate_master=1
  38. check_repl_delay=0
  39. [server3]
  40. hostname=192.168.10.104
  41. port=3306
  42. [root@localhost conf]# mkdir -p /var/log/masterha/app1 #创建这个目录
  43. [root@localhost conf]# vim /etc/masterha/app1.cnf
  44. 注释master_binlog_dir=/usr/local/mysql/data
  45. 使用master_binlog_dir=/var/lib/mysql确认路径位置

测试ssh无密码认证,如果正常最后输出successfully就是运行成功

[root@localhost ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf 

测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常

  1. [root@localhost ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf
  2. MySQL Replication Health is OK.

首次配置MHA的VIP地址需要手动配置(在mysql上)102主机

  1. [root@localhost ~]# ifconfig ens33:1 192.168.10.200
  2. ifconfig #查看和配置网络接口

启动HMA(在mha-manager主机上)101主机

  1. [root@localhost ~]# mkdir -p /var/log/masterha/app1
  2. [root@localhost ~]# 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 &
  3. [1] 14002

查看MHA状态,可以看到当前的master是Mysql1节点

[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app1.cnf

查看MHA日志

[root@localhost ~]# cat /var/log/masterha/app1/manager.log

模拟master故障

用客户端链接群集 105主机

  1. yum -y install mysql
  2. [root@localhost ~]# mysql -umha -pmanager -h 192.168.10.200

关闭当前的master 102

[root@localhost ~]# systemctl stop mariadb

观察MHA日志,如果自动切换成功,最后输出successfully字样

[root@localhost ~]# tailf /var/log/masterha/app1/manager.log

在mysql2上查看状态

mysql> show masterstatus;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/933348
推荐阅读
相关标签
  

闽ICP备14008679号