Mariadb高可用(四十)

目录

一、概述

(一)概念

(二)组成

(三)特点

(四)工作原理

二、实验要求

三、构建MHA

(一)ssh免密登录

(二)安装mariadb数据库并启动

1、配置 master 机器

2、配置 slave1 机器

3、配置 slave2 机器

4、分别重启服务和设置开机自启

5、分别赋予权限

6、启动从数据库,进行主从数据库同步

6.1、进入数据库

6.2、停止从库

6.3、进行数据同步

(三)MHA安装

(四)停用master的mariadb服务

(五)故障恢复


一、概述

(一)概念

    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进行复制

二、实验

(一)实验介绍

1、实验环境

manager、monitor、master和slave

IP地址搭建主机名
192.168.11.111/24

manager节点     monitor

mgt( managerment )
192.168.11.112/24node节点            mastermaster
192.168.11.113/24node节点             slaveslave1
192.168.11.114/24node节点             slaveslave2

2、实验拓补图

3、实验介绍

       本实验要求通过 MHA 监控 MySQL 数据库在master故障时进行自动切换到master salve,不影响业务。 

4、配置过程

4.1、配置 MySQL 一主两从

4.2、安装 MHA 软件

4.3、配置无密码认证

4.4、配置 MySQL MHA 高可用

4.5、模拟 master 故障切换

(二)实验基础配置

关闭防火墙、关闭SELinux、关闭图形化网络、配置静态IP地址

1、配置各台主机的主机名

hostnamectl set-hostname mgt
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

2、刷新主机命令

bash

3、分别为四台虚拟机添加本地缓存

vim /etc/hosts

 内容:

192.168.11.111 mgt
192.168.11.112 master
192.168.11.113 slave1
192.168.11.114 slave2

scp /etc/hosts 192.168.11.113:/etc/
scp /etc/hosts 192.168.11.113:/etc/
scp /etc/hosts 192.168.11.114:/etc/

三、构建MHA

(一)ssh免密登录

mgt 端 192.168.11.111 需进行的操作

ssh-keygen

ssh-copy-id mgt

 查看是否创建成功

       注:余下三台机器均将生成密钥对上传至192.168.11.111服务端上,而后进行密钥文件回传,保证互为免密登录

master端 192.168.11.112 需进行的操作

ssh-keygen
ssh-copy-id mgt

slave1 端 192.168.11.113 需进行的操作

ssh-keygen
ssh-copy-id mgt

slave2 端 192.168.11.114 需进行的操作

ssh-keygen
ssh-copy-id mgt

 此时我们去IP地址为111的服务端查看密钥对是否接收到

将生成的密钥文件分别在四台机器上进行一次互传

for i in 2 3 4;do scp /root/.ssh/authorized_keys  root@192.168.11.11$i:/root/.ssh/;done

 

 

       注:此时需要在四台主机上分别进行一次免密登录,从而避免后续使用脚本时发生故障问题。(包括自己本身也需进行一次免密登录)

 这里演示一台机器,其余机器同理

(二)安装mariadb数据库并启动

yum install -y mariadb mariadb-server

 启动服务

systemctl start mariadb

 配置流程

1、配置 master 机器

vim /etc/my.cnf

插入内容: 

server-id = 20
log-bin = master-bin
log-slave-updates = true

2、配置 slave1 机器

vim /etc/my.cnf

插入内容: 

server-id=30
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

3、配置 slave2 机器

vim /etc/my.cnf

插入内容: 

server-id=40
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

4、分别重启服务和设置开机自启

systemctl restart mariadb
systemctl enable mariadb

5、分别赋予权限

master端

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.111' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.113' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.114' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'mgt' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'slave1' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'slave2' identified by '123123';"

 注:本来只需赋予第一条命令即可使用,为了防止出现异常,指定后续三个ip段。

slave1端

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.111' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.112' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.114' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'mgt' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'master' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'slave2' identified by '123123';"

slave2端

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.%' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.111' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.112' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.11.113' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'mgt' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'master' identified by '123123';"
mysql -e "grant all privileges on *.* to 'mha'@'slave1' identified by '123123';"

6、启动从数据库,进行主从数据库同步

6.1、进入数据库

mysql

6.2、停止从库

stop slave;
exit

6.3、进行数据同步

主库查看文件编号,pos值

mysql -e "show master status;"

 从库输入命令:(两个从库都是一样的)

mysql -e "change master to master_host='192.168.11.112',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=1159;"

 分别进入两个从库启动slave

mysql

 进入MySQL数据库

start slave;

 启动从服务

show slave status\G;
exit

查看状态

 主库创建数据库,从库进行查看

mysql -e "create database zn;"

 从:(两个从数据库都是一样的命令,在此不过多追述)

mysql -e "show databases;"

 

 此时基本的主从复制已经搭建完成

(三)MHA安装

    所有节点安装perl环境(使用此命令两次,升级到最新的epel源)

yum install -y epel-release

     下载后续使用安装包缺失的依赖

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

node节点

node节点是计算机网络中的一个设备或主机

        所有节点安装node

tar xf mha4mysql-node-0.57.tar.gz 
cd mha4mysql-node-0.57/
perl Makefile.PL && make && make install

  在一台机器上远程将tar包传给其余三台机器 

for i in master slave1 slave2;do scp mha4mysql-node-0.57.tar.gz $i:/root/;done

步骤同上,进行安装 

  验证:看到脚本就OK

cd /usr/local/bin
ls

    manager

tar xf mha4mysql-manager-0.57.tar.gz
cd /root/mha4mysql-manager-0.57
perl Makefile.PL && make && make install

cp /root/mha4mysql-manager-0.57/samples/scripts/master_ip_failover /usr/local/bin/
cp /root/mha4mysql-manager-0.57/samples/scripts/master_ip_online_change /usr/local/bin/

        脚本说明

cd /root/mha4mysql-manager-0.57/samples/scripts

            master_ip_failover    自动切换时 VIP 管理的脚本

            master_ip_online_change    在线切换时 vip 的管理

            power_manager    故障发生后关闭主机的脚本

            send_report    因故障切换后发送报警的脚本

 注:master_ip_failover安装包自带的配置文件有问题,脚本没有写全,需重新进行编辑

这里使用以下命令将其备份

mv master_ip_failover master_ip_failover_bak

然后创建新的文件,并赋予权限

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.11.100';								#指定vip的地址
my $brdc = '192.168.11.255';								#指定vip的广播地址
my $ifdev = 'ens33';										#指定vip绑定的网卡
my $key = '1';												#指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		#代表此变量值为ifconfig ens33:1 192.168.11.100
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		#代表此变量值为ifconfig ens33:1 192.168.11.100 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";
}

赋予权限:

chmod 755 master_ip_failover
ll

        创建配置文件

mkdir /etc/masterha
vim /etc/masterha/app1.cnf
[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=manager
[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=123123
ping_interval=1
remote_workdir=/tmp
repl_password=123123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.11.113 -s 192.168.11.114
shutdown_script=""
ssh_user=root
user=mha[server1]
hostname=192.168.11.112
port=3306[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.11.113
port=3306[server3]
hostname=192.168.11.114
port=3306

文件内容解析: 

  • manager_log:MHA管理器的日志文件路径。
  • manager_workdir:MHA管理器的工作目录。
  • master_binlog_dir:MySQL主服务器的二进制日志目录。
  • master_ip_failover_script:用于执行IP故障切换的脚本路径。
  • master_ip_online_change_script:用于执行在线IP更改的脚本路径。
  • password:MySQL的密码。
  • ping_interval:MHA管理器检测服务器存活状态的时间间隔。
  • remote_workdir:远程主机的工作目录。
  • repl_password:复制用户的密码。
  • repl_user:复制用户的用户名。
  • secondary_check_script:用于检查从服务器的脚本路径。
  • shutdown_script:关机时执行的脚本路径。
  • ssh_user:用于通过SSH连接到服务器的用户名。
  • user:MHA管理器的用户名。

接下来是每个服务器的具体配置:

  • server1:主服务器的配置。

  • hostname:服务器的主机名或IP地址。

  • port:MySQL服务的端口号。

  • server2:备选主服务器的配置。

  • candidate_master:指示该服务器是否可以成为主服务器的标志。1表示是,0表示否。

  • check_repl_delay:检查复制延迟的时间(以秒为单位)。

  • server3:从服务器的配置。

  • hostname:服务器的主机名或IP地址。

  • port:MySQL服务的端口号。

 

mkdir /var/log/masterha/app1 -p

        测试MHA

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

 显示ok即为成功,没有错误

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

        启动命令

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 &

 命令解析:

  • nohup: 这是一个命令,用于在后台运行指定的命令,并忽略挂起信号。这意味着即使关闭终端也不会停止该进程。
  • masterha_manager: 这是要运行的命令或可执行文件的名称,即masterha_manager。
  • --conf=/etc/masterha/app1.cnf: 这是指定masterha_manager的配置文件路径和名称。
  • --remove_dead_master_conf: 这是masterha_manager的一个选项,用于在故障转移后自动删除已死亡主节点的配置。
  • --ignore_last_failover: 这是masterha_manager的一个选项,用于忽略最后一次故障转移。
  • < /dev/null: 这是将空设备/dev/null作为masterha_manager的输入。这意味着不会从标准输入读取任何输入。
  • > /var/log/masterha/app1/manager.log: 这是将masterha_manager的输出重定向到指定的日志文件,即/var/log/masterha/app1/manager.log。
  • 2>&1: 这是将标准错误输出也重定向到与标准输出相同的位置,即将错误信息写入到manager.log中。
  • &: 这是一个特殊符号,表示将命令放入后台运行。

因此,这段命令的意思是以后台模式运行masterha_manager,并将其输出重定向到指定的日志文件中。同时,还忽略了最后一次故障转移的记录,自动删除已死亡主节点的配置,并且不从标准输入读取任何输入。

  查看

jobs

         启动时masterIP异常

            需要工程手动配置VIP

(四)停用master的mariadb服务,模拟故障

systemctl stop mariadb

 在slave1里查看

ip a

  注:服务在完成以后自动回掉,此时需手动重启

停止命令

jobs
fg 1

将后台进程掉到前台,ctrl+c进行打断即可 

(五)故障恢复

在停掉master以后,配置文件中内容回消失

vim /etc/masterha/app1.cnf 

     修改app1.cnf启动配置,添加master主机配置信息

将内容添加进去即可

[server1]
hostname=192.168.11.112
port=3306

     分别在slave上重新指定master主机及binlog日志同步信息

master 端进行操作

启动服务

systemctl start mariadb

进入数据库

mysql

 停止从库

stop slave;
exit

 查看状态

mysql -e "show master status;"

 slave1 、2端进行操作

重启服务

systemctl restart mariadb

进入数据库 

mysql

停止从服务 

stop slave;
exit

同步数据

mysql -e "change master to master_host='192.168.11.112',master_user='myslave',master_password='123123',master_log_file='master-bin.000003',master_log_pos=245;"

分别从两个从库进入数据库

mysql

启动 

start slave;

查看状态并退出 

show slave status\G;
exit

 主库创建内容

mysql -e "create database zm;"

从库进行查看

mysql -e "show databases;"

这样可以看到主从复制又恢复原有了

注:但是有一点需要注意,在恢复完毕后,在主的机器上还是看不见设置的虚IP地址。如果想看见的话,就关闭主的服务,然后去从上进行查看!!!感觉不是很灵活的样子,做完还得重新进行配置然后再给改回来,然后还是看不见。。。陷入了俄罗斯套娃。。。。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124814.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工作技术栈】【源码解读】一次springboot注入bean失败问题的排查过程

目录 前言现象分析原因解决方法思考感悟 前言 对这次的过程排查如果要形容的话&#xff0c;我觉得更像是悬疑剧&#xff0c;bean not found 这种错误&#xff0c;已经看腻了&#xff0c;甚至有时候都看不起这种错误&#xff0c;但是似乎这个想法被springboot听见了&#xff0c…

云服务器下如何部署Flask项目详细操作步骤

参考网上各种方案&#xff0c;再结合之前学过的Django部署方案&#xff0c;最后确定Flask总体部署是基于&#xff1a;centos7nginxuwsgipython3Flask之上做的。 本地windows开发测试好了我的OCR项目&#xff0c;现在要部署我的OCR项目到云服务器上验证下。 第一步&#xff1a…

java 整合 swagger-ui 步骤

1.在xml 中添加Swagger 相关依赖 <!-- springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- springfox-swa…

Git 命令行查看仓库信息

目录 查看系统config ​编辑查看当前用户&#xff08;global&#xff09;配置 查看当前仓库配置信息 查看系统config git config --system --list 1 查看当前用户&#xff08;global&#xff09;配置 git config --global --list 1 查到的是email , name 等ssl签名信息&a…

测试岗位的不足和缺点-思考

软件测试岗位在实际工作中可能会面临一些不足和缺点&#xff0c;以下是一些常见的问题&#xff1a; 高压力、高强度的工作&#xff1a;软件测试工作往往需要在项目截止日期前完成测试&#xff0c;这可能会带来巨大的压力。同时&#xff0c;如果开发团队在项目中进行了大量的更改…

CRM软件系统能否监控手机的使用

CRM可以监控手机吗&#xff1f;答案是不可以。CRM是一款帮助企业优化业务流程&#xff0c;提高销售效率的工具。例如Zoho CRM&#xff0c;最多也就是听一下销售的通话录音&#xff0c;却不可以监控手机&#xff0c;毕竟CRM不是一款监控软件。 CRM的主要作用有以下几点&#xf…

《Go 语言第一课》课程学习笔记(十四)

接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合&#xff0c;其中&#xff0c;方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…

深入探索KVM虚拟化技术:全面掌握虚拟机的创建与管理

文章目录 安装KVM开启cpu虚拟化安装KVM检查环境是否正常 KVM图形化创建虚拟机上传ISO创建虚拟机加载镜像配置内存添加磁盘能否手工指定存储路径呢&#xff1f;创建成功安装完成查看虚拟机 KVM命令行创建虚拟机创建磁盘通过命令行创建虚拟机手动安装虚拟机 KVM命令行创建虚拟机-…

攻防世界-WEB-ics-05

打开靶机 只有设备维护中心可以点开 点标签得到新的url pageindex 想到文件包含漏洞&#xff08;URL中出现path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼 利用php伪协议查看源码 出现一段base64源码&#xff0c;进行转码得出源码 ?pagephp://filter…

驱动开发--day2

实现三盏灯的控制&#xff0c;编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

LeetCode刷题笔记【30】:动态规划专题-2(不同路径、不同路径 II)

文章目录 前置知识62.不同路径题目描述解题思路代码 63. 不同路径 II题目描述障碍信息传递法(比较复杂)被障碍物阻挡后直接清空计数法(更简洁) 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【29】&#xff1a;动态规划专题-1&#xff08;斐波那契数、爬楼梯…

【深入理解Linux内核锁】七、互斥体

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、互斥体API2、API实现2.1 mutex2.2 mutex_init2.3 mutex_lock2.4 mutex_un…

2023外贸SEO推广怎么做?

答案是&#xff1a;2023外贸SEO推广可以选择谷歌SEO谷歌Ads双向运营。 外贸SEO的核心要素 外贸SEO不仅仅是关于关键词排名&#xff0c;它更多的是关于品牌建设和目标受众的吸引。 要想成功&#xff0c;必须认识到几个关键要素。 了解目标市场 首先&#xff0c;要深入了解目…

vue3+ts+vite项目引入echarts,vue3项目echarts组件封装

概述 技术栈&#xff1a;Vue3 Ts Vite Echarts 简介&#xff1a; 图文详解&#xff0c;教你如何在Vue3项目中引入Echarts&#xff0c;封装Echarts组件&#xff0c;并实现常用Echarts图例 文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、话不多数&#xff0c;引入 …

redis持久化

Redis高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供…

ARM的异常处理

概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序 异常处理机制 不同的处理器对异常的处理的流程大体相似&#xff0c;但是不同的处理器…

面试如何回答弹性盒子布局这个问题呢?

在我们面试中如果被问道css方面的面试题 那么极有可能被问到的一道面试题就是弹性盒子&#xff0c;本篇文章通过一张图带你拿捏这道面试题。 1、首先需要说一说弹性盒子的基本概念&#xff1a;弹性盒子是一种用于网页布局中创建灵活和响应式设计的CSS布局模型。 2、其次需要说…

IDEA找不到Maven窗口

有时候导入项目或者创建项目时候Maven窗口找不到了 然后指定项目的pom.xml文件

力扣(LeetCode)算法_C++——有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; …

JMeter压力测试 5分钟让你学会如何并发压测接口

文章目录 地址下载启动 使用 地址 JMeter官网下载&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 下载 最新款的jmeter需要java8的支持&#xff0c;请自行安装jdk8或以上的版本 根据系统不同系统下载zip或者是tgz格式的压缩包&#xff0c;并解压&#xff0c;博…