MHA高可用配置及故障切换

MHA高可用配置及故障切换HMA MasterHighAv 是一套优秀的 Mysql 高可用环境下的故障切换和主从复制的软件解决 MySLQ 单点的问题 MySQL 故障切换过程中 MHA 能做到 0 30 秒内自动完

大家好,欢迎来到IT知识分享网。

目录

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 组件

案例拓扑图

MHA高可用配置及故障切换

案例实施

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

[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# vim /etc/sysconfig/selinux SELINUX=disabled

设置host文件

修改每个节点的hosts文件

[root@localhost ~]# vim /etc/hosts 192.168.10.101 MHA-manager 192.168.10.102 Mysql1 192.168.10.103 Mysql2 192.168.10.104 Mysql3

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

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

关闭掉101的同步

设置主库配置

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

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

从服务器配置

server-id=103 log-bin=master-bin binlog-format=MIXED relay-log-purge=0 log-slave-updates=true server-id=104 log-bin=master-bin binlog-format=MIXED relay-log-purge=0 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上授权

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

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

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

同步103、104会话

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

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

安装MHA软件

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

MHA高可用配置及故障切换

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

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

ftp的基础源 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo yum clean all 阿里的基础源 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo 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组件

[root@localhost ~]# tar zxvf mha4mysql-node-0.57.tar.gz [root@localhost ~]# cd mha4mysql-node-0.57 [root@localhost mha4mysql-node-0.57]# perl Makefile.PL [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上

MHA高可用配置及故障切换

[root@localhost ~]# tar zxvf mha4mysql-manager-0.57.tar.gz [root@localhost ~]# cd mha4mysql-manager-0.57 [root@localhost mha4mysql-manager-0.57]# perl Makefile.PL [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 上配置到所有节点的无密码认证

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

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

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

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

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

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

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

配置MHA

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

cd/mha4mysql-manager-0.57/samples [root@localhost samples]# cd scripts/ [root@localhost scripts]# ls master_ip_failover master_ip_online_change power_manager send_report [root@localhost scripts]# cp * /usr/local/bin/ [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

MHA高可用配置及故障切换

[root@localhost bin]# rm -rf master_ip_failover #删除该文件 [root@localhost bin]# chmod +x master_ip_failover 给该文件添加执行权 [root@localhost bin]# cd [root@localhost ~]# cd /etc/ [root@localhost etc]# mkdir masterha [root@localhost ~]# cd mha4mysql-manager-0.57 [root@localhost mha4mysql-manager-0.57]# cd samples/ [root@localhost samples]# ls conf scripts [root@localhost samples]# cd conf/ [root@localhost conf]# ls app1.cnf masterha_default.cnf [root@localhost conf]# cp app1.cnf /etc/masterha/ [root@localhost conf]# vim /etc/masterha/app1.cnf [server default] manager_workdir=/var/log/masterha/app1 manager_log=/var/log/masterha/app1/manager.log master_binlog_dir=/usr/local/mysql/data #master_binlog_dir=/var/lib/mysql master_ip_failover_script= /usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change user=mha password=manager ping_interval=1 remote_workdir=/tmp repl_user=myslave repl_password= secondary_check_script= /usr/local/bin/masterha_secondary_check -s192.168.10.103 -s 192.168.10.104 shutdown_script="" ssh_user=root [server1] hostname=192.168.10.102 port=3306 [server2] hostname=192.168.10.103 port=3306 candidate_master=1 check_repl_delay=0 [server3] hostname=192.168.10.104 port=3306 [root@localhost conf]# mkdir -p /var/log/masterha/app1 #创建这个目录 [root@localhost conf]# vim /etc/masterha/app1.cnf 注释master_binlog_dir=/usr/local/mysql/data 使用master_binlog_dir=/var/lib/mysql确认路径位置 

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

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

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

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

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

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

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

[root@localhost ~]# mkdir -p /var/log/masterha/app1 [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 & [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主机

yum -y install mysql [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;

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156754.html

(0)
上一篇 2025-02-10 15:10
下一篇 2025-02-10 15:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信