系统学习Linux-Mariadb高可用MHA

这篇具有很好参考价值的文章主要介绍了系统学习Linux-Mariadb高可用MHA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。

MHA 的出现就是解决MySQL 单点的问题。

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

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

组成

MHA manager——管理节点

MHA node——数据节点(每个节点上都需要安装)

特点

自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性

目前MHA支持一主多从架构,最少三台服务,即一主两从

工作原理

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

识别含有最新的更新slave日志

应用差异的中继日志(relay log)到其他的slave

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

提升一个slave为新的master

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


案例
192.168.31.24 manager(MHA) mgt
192.168.31.25 master master node
192.168.31.26 slave slave1
192.168.31.27 slave slave2

搭建实验环境4台虚拟机分别配置基础环境与ip

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

修改每台虚拟机主机名方便实验

 系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

修改etc/hosts文件

vim /etc/hosts

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

配置所有hosts的节点后scp到其他虚拟机

scp /etc/hosts ip:/etc

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

去每台虚拟机验证是否存在hosts内容系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

验证连通性

一定每台机器都要测试

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

配置ssh免密登陆(每台ssh-keygen)

[root@mgt ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:OFdoPhxC3bHTgT9y7PN+z0Xr6pcpfB4fwz8tzsDfDwM root@mgt
The key's randomart image is:
+---[RSA 2048]----+
|      .. ..o.    |
|     .  ..oo .   |
|      . + +o.    |
|       * o..=    |
|      o S  +E.  .|
|       o . .o....|
|            +oo*=|
|             *+@X|
|            .=@=@|
+----[SHA256]-----+

[root@mgt]# cd ./ssh
[root@mgt .ssh]# ls
id_rsa  id_rsa.pub  known_hosts

将循环迭代252627,并分别执行ssh-copy-id命令来将公钥复制到

远程主机192.168.31.$i中的root用户下

for i in 25 26 27;do ssh-copy-id root@192.168.31.$i;done
系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

测试每台主机的免密并一定把yes输入一遍

ssh-keygen(每台虚拟机)

虚拟机

mgt:for i in 25 26 27;do ssh-copy-id root@192.168.31.$i;done

master:for i in 24 26 27;do ssh-copy-id root@192.168.31.$i;done

slave1:for i in 24 25 27;do ssh-copy-id root@192.168.31.$i;done

slave2:for i in 24 26 25;do ssh-copy-id root@192.168.31.$i;done

mgt虚拟机需要远程的ip与名

ssh master/slave1/slave2

ssh 192.168.31.25/26/27

master虚拟机需要远程的ip与名

ssh mgt/slave1/slave2

ssh 192.168.31.24/26/27

slave1虚拟机需要远程的ip与名

ssh mgt/master/slave2

ssh 192.168.31.24/25/27

slave2虚拟机需要远程的ip与名

ssh mgt/master/slave1

ssh 192.168.31.24/25/26

ssh master/slave1/slave2   与  ssh 192.168.31.25/26/27

安装mariadb并启动

搭配master配置

 系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

重启

systemctl restart mariadb

添加用户权限

grant replication slave on *.* to 'myslave'@'192.168.31.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.31.%' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.31.24' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.31.26' identified by '123.com';
grant all privileges on *.* to 'mha'@'192.168.31.27' identified by '123.com';

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

slave1\2服务器进行

vim /etc/my.conf

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

slave1赋予权限

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.31.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.24' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.25' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.27' identified by '123.com';"

slave2赋予权限

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.31.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.24' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.25' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.31.26' identified by '123.com';"

登陆Mysql绑定主

change master to master_host='192.168.31.25',master_user='myslave',master_password='123.com',master_log_file='master-bin.000002',master_log_pos=326;"

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

slave start;

show slave status\G

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

master创建数据库测试

create database lwj1;

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

 slave1/2查看是否存在

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb


MHA安装

所有节点安装perl环境(安装两次更新成统一版本) 

yum install epel-release -y

更新完后安装编译

yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN

所有节点安装node包(如果有包导入进去解压安装)

tar xf mha4mysql-node-0.57.tar.gz

cd mha4mysql-node-0.57

perl Makefile.PL && make && make install

验证看到脚本就可以  原始没脚本

cd /usr/local/ bin

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

其他虚拟机也安装以上所有


安装manager(只有mgt服务需要)

tar xf mha4mysql-manager-0.57.tar.gz

cd /root/mha4mysql-manager-0.57

perl Makefile.PL && make && make install

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

编译后复制脚本到usr/local/bin

cp sample/scripts/master_ip_failover /usr/local/bin/

cp sample/scripts/master_ip_online_change     /usr/local/bin/

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

配置文件建立

mkdir /etc/masterha

vim /etc/masterha/app1.cnf

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

可以当做日后模板文件
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
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
password=123.com
ping_interval=1
remote_workdir=/tmp
repl_password=123.com
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.31.26 -s 192.168.31.27
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=192.168.31.25
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.31.26
port=3306

[server3]
hostname=192.168.31.27
port=3306

修改master_ip_failover脚本

cd /usr/local/bin

删除 master_ip_failover 自己写入准备好的脚本内容 不然容易报错

vim master_ip_failover

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
#############################添加内容部分#########################################
my $vip = '192.168.31.100';								#指定vip的地址
my $brdc = '192.168.31.255';								#指定vip的广播地址
my $ifdev = 'ens33';										#指定vip绑定的网卡
my $key = '1';												#指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		#代表此变量值为ifconfig ens33:1 192.168.184.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		#代表此变量值为ifconfig ens33:1 192.168.184.200 down
my $exit_code = 0;											#指定退出状态码为0
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
##################################################################################
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);

exit &main();

sub main {

print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

if ( $command eq "stop" || $command eq "stopssh" ) {

my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {

my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

测试MHA

masterha_check_ssh --conf=/etc/masterha/app1.cnf

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

 

masterha_check_repl --conf=/etc/masterha/app1.cnf系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

启动命令

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 &
查看命令jobs

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

此时会master会出现一个ens33:1 192.168.31.100的虚拟地址

停用master后测试

此时可以看到ens33:1跳到了slave1

高可用成功

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

再次查看/etc/masterha/app1.cnf

此时配置文件已被脚本修改slave1的配置被删除

系统学习Linux-Mariadb高可用MHA,linux,运维,服务器,redis,mariadb

 

故障恢复

修改app1.cnf启动配置

添加master主机配置信息

分别在slave上重新指定master主机及binlog日志同步信息文章来源地址https://www.toymoban.com/news/detail-657340.html

到了这里,关于系统学习Linux-Mariadb高可用MHA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux——mysql的高可用MHA

    目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager         MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制

    2024年02月12日
    浏览(27)
  • 【Linux】MHA高可用配置及故障切换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切

    2024年02月11日
    浏览(40)
  • 小白到运维工程师自学之路 第四十四集 (mariadb高可用集群故障转移)

            故障转移是指在集群中某个节点发生故障时,自动将服务转移到其他正常节点上的 过程。在MariaDB高可用集群中,通常使用主从复制的方式来实现故障转移。其中一个 节点被指定为主节点,负责处理所有的写操作和部分读操作,其他节点作为从节点,负 责复制主

    2024年02月11日
    浏览(35)
  • Linux中常用数据库管理系统之MariaDB

    我们生活在信息化时代,经常要跟数据打交道,它在我们的日常生活中无处不在,比如手机支付,微信聊天,淘宝购物,使用的这些在后台都会对应一个叫数据库的存在。数据库就是存储这些数据资料的仓库,那么这些数据是如何被管理的呢?今天我们就来一起了解下数据库

    2024年02月12日
    浏览(31)
  • 【运维工程师学习五】数据库之MariaDB

    db根据存储模型划分,数据库类型主要可分为: 网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database) 等。商业应用中主要是关系数据库,而关系数据库中常见的软件有比如Oracle、DB2、Sybase、MS SQL Server、In

    2024年02月16日
    浏览(38)
  • 【运维工程师学习】Centos中MySQL替换MariaDB

    把搜索出来的全删除 查看路径里那里还有mysql 全删除 再找 再删 MySQL官网tar包下载链接:https://dev.mysql.com/downloads/mysql/ 如果报错 提示: 可以执行以下命令 打开 /etc/profile 在底部添加如下命令 执行 如果不行进到 /etc/my.cnf 里 在 [mysqld] 下添加 改完密码记得回来去掉 第一次登录

    2024年02月16日
    浏览(36)
  • 《Linux运维篇:Linux系统运维指南》

    《Linux运维总结:Ubuntu20.04+Ubuntu22.04配置静态固定IP地址》 《Linux运维总结:使用U盘制作Linux镜像》 《Linux运维实战:不重启识别新挂载磁盘》 《Linux运维实战:使用parted进行磁盘分区》 《Linux运维实战:fdisk和parted一键分盘格式化分区》 《Linux运维实战:Centos7.9系统实现在线

    2023年04月24日
    浏览(49)
  • Linux运维学习笔记

    此笔记为学习https://www.bilibili.com/video/BV1nW411L7xm/?vd_source=3f851e85e66ef33269a2eefee664cec2的学习记录,希望能找到运维的实习吖O(≧▽≦)O 目录 导航 Linux的终端 终端组成部分 Linux关机命令 使用VMware备份操作系统 快照 克隆 Linux系统的文件 文件与文件夹 Linux系统的文件目录结构 Li

    2024年02月08日
    浏览(36)
  • 云计算Linux运维——Linux系统管理——软件管理

    目录 点关注不迷路 1RPM软件管理 1、软件安装包类型 2、RPM软件安装包的组成 二、RPM软件管理操作 rpm命令 1、安装软件 2、查看软件 3、卸载软件 2yum工具介绍 一、yum工具介绍 1、优势 2、yum源配置文件 二、配置本地源安装软件 1、备份自带的HTTP源 2、编写本地源 3、清除旧的

    2024年02月06日
    浏览(42)
  • 云计算Linux运维——Linux系统管理——磁盘管理

    点关注不迷路 目录 1磁盘分区管理 一、硬盘基础知识 1、硬盘的表示方法 2、查看块设备 3、硬盘分区的表示方法 4、创建文件系统/格式化 5、操作磁盘的流程 二、管理磁盘分区工具 fdisk 1、使用格式 2、查看磁盘分区 三、磁盘分区案例 1、规划 2、创建分区 3、让内核识别硬盘

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包