MySQL高可用

目录

MySQL高可用方案

1、MHA架构(单主)

MHA的工作原理

MHA 架构的优点

MHA 架构的缺点

2、MHA架构的部署

1)关闭防火墙和selinux

2)分别修改master和slave1,slave2的主机名

3)修改master主库服务器的配置文件

4)修改slave从库服务器的配置(slave1,slave2)

5)在 Master、Slave1、Slave2 节点上都创建两个软链接

6)进入master的mysql,给slave节点和manage授权

7)在master节点查看二进制文件和同步位置点

8)在slave1和slave2上执行同步操作,并查看数据同步状态

9)两个从库必须设置为只读模式

10)在主库中创建库创建表,插入数据,从库测试数据同步

11)在所有服务器上安装MHA的依赖环境

12)在所有服务器上安装MHA的node组件

13)在manage服务器上安装manage组件

14)在manage服务器上配置到其他数据库的ssh免密登录

15)master,slave1和slave2之间,也要互相配置ssh免密登录

16)在manage服务器上配置MHA

17)创建 MHA 软件目录并拷贝配置文件

18)第一次配置需要在 Master 节点上手动开启虚拟IP

19)在 manager 节点上测试 ssh 无密码认证

20)在 manager 节点上测试 mysql 主从连接情况

21)启动MHA

22)查看MHA状态,查看日志

23)模拟故障发生

24)关闭 manager 服务的命令

3、MMM架构(双主)

MMM 的工作原理

MMM架构的优点

MMM架构的缺点

4、MMM架构部署

1)首先关闭防火墙和selinux,并安装依赖环境(所有服务器)

2)修改master01的配置文件

3)讲配置文件复制给其他3台mysql数据库服务器

4)其他三台MySQL服务器修改配置文件中的server-id,然后重启mysql服务

5)配置主主复制

6)在从服务器上配置主从复制

7)在master01上创建库创建表,插入数据,master02,slave01,slave02测试同步情况

8)在master01上对mmm进行配置

9)修改所有数据库服务器的代理配置文件 mmm_agent.conf

10)修改monitor监控服务器上的监控配置文件 mmm_mon.conf

11)在所有数据库上为 mmm_agent(代理进程)和 mmm_moniter(监控进程)授权

12)所有服务器开启mysql-mmm-agent

13)在 monitor 服务器上启动 mysql-mmm-monitor

14)在monitor 服务器上测试群集

15)故障测试

16)客户端测试

17)slave01和slave02上都可以查看验证


MySQL高可用方案

mysql高可用的九方案,MAH架构、MMM架构、MGR架构、Mysql  cluster(多主)、Galera  Cluster(多主)、PXC架构(多主)、RAID10(数据可靠性方案)、SAN存储网络、DRBD方案。

本篇文章主要讲述MHA架构MMM架构

1、MHA架构(单主)

MySQL MHA(Master High Availability)是一种用于 MySQL 数据库的高可用性架构。它的设计目标是确保在主数据库发生故障时,能够快速自动地将备库(Slave)提升为新的主库,以保证系统的连续性和可用性。

MHA的工作原理

        1. MHA 通过manage监控 MySQL master主节点的状态来实现故障检测和自动故障转移。

        2. 当master主节点发生故障时,MHA 会自动将其中一个拥有最新数据的slave从节点提升                   为新的master主节点。

        3. 使其他的slave从节点与新master节点做主从复制操作,确保数据库的可用性。

MHA 架构的优点

  1. 自动故障切换:MHA 能够自动检测主库的故障,并快速将备库提升为新的主库,减少了手动干预的需要,提高了系统的可用性。

  2. 实时监测:MHA 通过与 Master 节点和 Slave 节点建立 SSH 连接,实时监测它们的状态,能够及时发现故障并采取相应的措施。

  3. 简化配置:MHA 提供了简单易用的配置文件,可以轻松地配置主库和备库的信息,减少了配置的复杂性。

  4. 高可扩展性:MHA 支持多个备库,可以根据需求灵活地扩展系统的容量和性能。

MHA 架构的缺点

  1. 配置复杂性:尽管 MHA 提供了简化的配置文件,但对于不熟悉 MHA 的用户来说,配置仍然可能是一项复杂的任务。特别是在涉及多个主库和备库的复杂环境中,配置可能变得更加困难。

  2. 依赖 SSH 连接:MHA 使用 SSH 连接与主库和备库进行通信和监控。这意味着在配置和使用 MHA 时,必须确保 SSH 连接的可用性和稳定性。如果 SSH 连接出现问题,可能会导致 MHA 无法正常工作。

  3. 故障切换过程中的数据同步延迟:在故障切换期间,MHA 需要将备库提升为新的主库,并重新配置其他备库作为新的从库。这个过程可能需要一些时间,导致在切换期间存在一定的数据同步延迟。这可能会对某些应用程序的数据一致性产生影响。

  4. 依赖 MySQL 复制功能:MHA 依赖 MySQL 的复制功能来实现数据的同步和复制。如果 MySQL 的复制功能出现问题,可能会导致 MHA 无法正常工作或数据同步不完整。

  5. 需要额外的硬件资源:为了实现高可用性,MHA 需要至少一个备库来作为冗余备份。这意味着需要额外的硬件资源来支持备库的运行和数据复制,增加了系统的成本和复杂性。

2、MHA架构的部署

环境:

master:192.168.3.10                #提前导入mha4mysql-node-0.57.tar.gz

slave1:192.168.3.11                #提前导入mha4mysql-node-0.57.tar.gz

slave2:192.168.3.12                #提前导入mha4mysql-node-0.57.tar.gz

manage:192.168.3.106                #提前导入mha4mysql-node-0.57.tar.gz和mha4mysql-manager-0.57.tar.gz

1)关闭防火墙和selinux

systemctl   stop   firewalld.service

setenforce  0

2)分别修改master和slave1,slave2的主机名

master:#修改master的主机名

hostnamectl set-hostname mysql-1

slave1:#修改slave1的主机名
hostnamectl set-hostname mysql-2

salve2:#修改slave2的主机名
hostnamectl set-hostname mysql-3

3)修改master主库服务器的配置文件

vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = mysql-bin                #开启二进制日志
binlog_format = mixed           #设置二进制日志类型
log-slave-updates = true        #允许slave从master复制数据时可以写入到自己的二进制日志
relay-log = relay-log-bin        #开启中继日志
relay-log-index = slave-relay-bin.index        #中继日志索引

systemctl restart mysqld        #重启mysql服务

4)修改slave从库服务器的配置(slave1,slave2)

vim /etc/my.cnf
server-id = 2                         #三台服务器的 server-id 不能一样
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = true
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

systemctl restart mysqld

5)在 Master、Slave1、Slave2 节点上都创建两个软链接

ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

6)进入master的mysql,给slave节点和manage授权

mysql -uroot -p

#给slave节点授权
grant replication slave on *.* to 'myslave'@'192.168.3.%' identified by '123123';

#给manage授权

grant all privileges on *.* to 'mha'@'192.168.3.%' identified by 'abc123';


#防止从库通过主机名连接主库(master,salve1,salve2上均设置)

grant all privileges on *.* to 'mha'@'mysql1' identified by 'abc123';

grant all privileges on *.* to 'mha'@'mysql2' identified by 'abc123';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'abc123';

flush privileges;        #使授权立即生效

7)在master节点查看二进制文件和同步位置点

master:

show master status;

8)在slave1和slave2上执行同步操作,并查看数据同步状态

change master to master_host='192.168.3.10',master_user='myslave',master_password='123123',

master_log_file='mysql-bin.000001',master_log_pos=1743; 

start slave;

show slave status\G    

9)两个从库必须设置为只读模式

set global read_only=1;

10)在主库中创建库创建表,插入数据,从库测试数据同步

master:

show databases;

create database test;

use test;

create table t1(id int, name varchar(10), age int,primary key(id));

desc t1;

insert into t1 values(1,'张三',18),(2,'李四',19),(3,'王五',20);
select * from t1;


slave1,slave2:

show databases;

select * from test.t1;

11)在所有服务器上安装MHA的依赖环境

yum install epel-release --nogpgcheck -y        #首先安装epel源

yum install -y perl-DBD-MySQL \                #其次安装依赖环境
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

12)在所有服务器上安装MHA的node组件

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

13)在manage服务器上安装manage组件

tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

14)在manage服务器上配置到其他数据库的ssh免密登录

ssh-keygen -t rsa                 #一路按回车键
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.11
ssh-copy-id 192.168.3.12

15)master,slave1和slave2之间,也要互相配置ssh免密登录

master:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.11
ssh-copy-id 192.168.3.12

slave1:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.12


 

slave2:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.11

16)在manage服务器上配置MHA

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

cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

#复制故障切换脚本

cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
#修改故障切换脚本

vim /usr/local/bin/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
);
#############################添加内容部分#########################################
#指定vip的地址
my $vip = '192.168.3.254';
#指定vip的广播地址
my $brdc = '192.168.3.255';
#指定vip绑定的网卡
my $ifdev = 'ens33';    
#指定vip绑定的虚拟网卡序列号
my $key = '1';
#代表此变量值为ifconfig ens33:1 192.168.3.254
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";    
#代表此变量值为ifconfig ens33:1 192.168.3.254 down
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
#指定退出状态码为0
my $exit_code = 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";
}

17)创建 MHA 软件目录并拷贝配置文件

#创建相关目录(master,slave1,salve2,manage)

mkdir -p /opt/mysql-mha/mha-node
 

#manager节点

mkdir -p /opt/mysql-mha/mha

#编写配置文件
vim /opt/mysql-mha/mysql_mha.cnf
[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha
master_binlog_dir=/usr/local/mysql/data
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
port=3306
ping_interval=1
remote_workdir=/opt/mysql-mha/mha-node
repl_user=myslave
repl_password=123123
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.3.11 -s 192.168.3.12
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.3.10
port=3306

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

[server3]
hostname=192.168.3.12
port=3306

18)第一次配置需要在 Master 节点上手动开启虚拟IP

master:

/sbin/ifconfig ens33:1 192.168.3.254/24

19)在 manager 节点上测试 ssh 无密码认证

masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf

20)在 manager 节点上测试 mysql 主从连接情况

masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf

21)启动MHA

nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &

22)查看MHA状态,查看日志

masterha_check_status --conf=/opt/mysql-mha/mysql_mha.cnf    #查看MHA状态
cat /opt/mysql-mha/manager.log | grep "current master"    #查看日志

23)模拟故障发生

MHA上:日志监控
tail -f /opt/mysql-mha/manager.log

master上停止mysql服务
systemctl stop mysqld

24)关闭 manager 服务的命令

masterha_stop --conf=/opt/mysql-mha/mysql_mha.cnf

或者

直接采用 kill 进程 ID 的方式关闭。

3、MMM架构(双主)

MySQL 高可用方案之 MMM(Multi-Master Replication Manager)是一种常用的解决方案,用于实现 MySQL 数据库的高可用性和负载均衡。

MMM 基于 MySQL 的复制机制,通过在多个 MySQL 服务器之间进行主从复制,实现了数据的同步和备份。它的主要特点是可以实现多主复制,即多个 MySQL 服务器可以同时作为主节点接收写操作,并将这些写操作同步到其他从节点上。

MMM 的工作原理

  1. MMM 通过监控 MySQL master的状态来实现故障检测和自动故障转移。当一个master主节点发生故障时,MMM 会自动将VIP转到备master节点上,确保数据库的可用性。

  2. MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况,将读操作分发到不同的节点上,从而提高系统的整体性能。

  3. MMM 还提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作。

MMM架构的优点

  1. 高可用性:MMM 通过自动故障检测和故障转移机制,可以快速将一个从节点提升为新的主节点,从而实现数据库的高可用性,减少系统的停机时间。

  2. 负载均衡:MMM 可以根据节点的负载情况,将读操作分发到不同的节点上,从而实现负载均衡,提高系统的整体性能。

  3. 简单易用:MMM 提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作,使得系统的管理和维护变得简单易用。

MMM架构的缺点

  1. 数据一致性:由于 MMM 采用的是异步复制机制,主节点和从节点之间存在一定的延迟,可能导致数据的不一致。在某些场景下,可能需要额外的措施来确保数据的一致性。

  2. 配置复杂性:MMM 的配置相对复杂,需要对 MySQL 的复制机制和 MMM 的工作原理有一定的了解。在配置过程中,需要注意各个节点的配置一致性和正确性。

4、MMM架构部署

环境:

master01(db1):192.168.3.10                 # 提前导入 mysql5.7、mysql-mmm
master02(db2):192.168.3.11                 # 提前导入mysql5.7、mysql-mmm
slave01(db3):192.168.3.12                   # 提前导入 mysql5.7、mysql-mmm
slave02(db4):192.168.3.13                   # 提前导入 mysql5.7、mysql-mmm
monitor  :192.168.80.106                           # 提前导入mysql-mmm

1)首先关闭防火墙和selinux,并安装依赖环境(所有服务器)

systemctl stop firewalld.service

setenforce 0

#下载aliyun的repo源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release        #安装epel源
yum -y install mysql-mmm*        #安装mmm

2)修改master01的配置文件

vim /etc/my.cnf

......
[mysqld]

......

server-id = 1                                               #每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log             #错误日志
general_log=ON                                              #通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON                                           #慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema        #不需要同步的库名
log_bin=mysql_bin                                #开启二进制日志用于主从数据复制
log_slave_updates=true                           #允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1                            #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去    
innodb_flush_log_at_trx_commit=1         #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2               #自增字段一次递增多少
auto_increment_offset=1  

3)讲配置文件复制给其他3台mysql数据库服务器

scp /etc/my.cnf root@192.168.3.11:/etc/
scp /etc/my.cnf root@192.168.3.12:/etc/
scp /etc/my.cnf root@192.168.3.13:/etc/

4)其他三台MySQL服务器修改配置文件中的server-id,然后重启mysql服务

master02:

vim /etc/my.cnf

server-id = 2

systemctl restart mysqld.service

slave01:

vim /etc/my.cnf

server-id = 3

systemctl restart mysqld.servicel

slave02:

vim /etc/my.cnf

server-id = 4

systemctl restart mysqld.service

5)配置主主复制

#在master01和master02服务器上为彼此授权

grant replication slave on *.* to 'replication'@'192.168.3.%' identified by '123123';

show master status;        #在master01和master02服务器上查看日志文件名称和同步点


master01:

change master to master_host='192.168.3.11',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

master02:

change master to master_host='192.168.3.10',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

6)在从服务器上配置主从复制

change master to master_host='192.168.3.10',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

7)在master01上创建库创建表,插入数据,master02,slave01,slave02测试同步情况

master01:

master:

show databases;

create database test;

use test;

create table t1(id int, name varchar(10), age int,primary key(id));

desc t1;

insert into t1 values(1,'张三',18),(2,'李四',19),(3,'王五',20);
select * from t1;


master02,slave01,slave02:

show databases;

select * from test.t1;

8)在master01上对mmm进行配置

cd /etc/mysql-mmm/

vim mmm_common.conf
……
<host default>
    cluster_interface       ens33
    ……
    replication_user        replication
    replication_password    123123
    agent_user              mmm_agent
    agent_password          123123

<host db1>
    ip      192.168.3.10
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.3.11
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.3.12
    mode    slave
</host>

<host db4>
    ip      192.168.3.13
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.3.254
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.3.154, 192.168.3.155
    mode    balanced            #多个 slave 主机可以进行读操作模式
</role>

9)修改所有数据库服务器的代理配置文件 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf

this db1                #根据不同的主机分别修改为 db1,db2,db3,db4

10)修改monitor监控服务器上的监控配置文件 mmm_mon.conf

vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf
<monitor>
.....
    ping_ips            192.168.3.10,192.168.3.11,192.168.3.12,192.168.3.13    #指定所有数据库服务器的 IP
    auto_set_online        10                #指定自动上线时间
</monitor>

<host default>
    monitor_user        mmm_monitor        #指定 mmm_monitor 的用户名
    monitor_password    123123          #指定 mmm_monitor 的密码
</host>

11)在所有数据库上为 mmm_agent(代理进程)和 mmm_moniter(监控进程)授权

#为 mmm_agent(代理进程)授权(所有MySQL服务器上)

grant super, replication client, process on *.* to 'mmm_agent'@'192.168.3.%' identified by '123123';

#为 mmm_moniter(监控进程)授权(所有MySQL服务器上)

grant replication client on *.* to 'mmm_monitor'@'192.168.3.%' identified by '123123';

flush privileges;        #授权立即生效

12)所有服务器开启mysql-mmm-agent

systemctl start mysql-mmm-agent.service

13)在 monitor 服务器上启动 mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service

14)在monitor 服务器上测试群集

#查看各节点的情况
mmm_control show

#检测监控功能是否都完善,需要各种OK
mmm_control checks all

#指定绑定 VIP 的主机
mmm_control move_role writer db2

15)故障测试

#停止 master02 确认 VIP 是否移动到 master01 上。

注意:master01 主服务器恢复服务后,不会抢占

mater02:

systemctl stop mysqld.service

16)客户端测试

#在 master01 服务器上为 monitor 服务器地址授权登录
grant all on *.* to 'abc'@'192.168.3.106' identified by '123123';
flush privileges;

#在 monitor 服务器上使用 VIP 登录
yum install -y mariadb-server mariadb
systemctl start mariadb.service

mysql -uabc -p -h 192.168.3.254

#创建数据,测试同步情况
create database abc;

17)slave01和slave02上都可以查看验证

show databases;

select * from abc.a1;

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

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

相关文章

(09_22)【有奖体验】轻点鼠标,让古籍数字化“重生_

卷帙浩繁的古籍是古典文化的载体&#xff0c;珍贵的古籍往往很难轻易示人&#xff0c;数字化是解决古籍‘藏’与‘用’之间矛盾的最好方式&#xff0c;函数计算联合开发者宋杰开发“古籍识别“应用&#xff0c;希望更多开发者行动起来&#xff0c;用Serverless AI 让古籍“活”…

2023蓝帽杯南部赛区半决赛取证复现

首先嗷&#xff0c;仅代表个人评价一下就是说赛委会在出题的时候不严谨&#xff0c;我一度怀疑我的语文阅读能力有问题&#xff0c;但是呢&#xff0c;这次的取证题目虽然不是很难&#xff0c;但是有些地方我也是依旧没有找到&#xff0c;说了这么多&#xff0c;接下来&#xf…

Qt地铁智慧换乘系统浅学( 三 )最少路径和最少换乘实现

本算法全都基于广度优先 概念最短路径实现所用容器算法思路 最少换乘实现所需容器算法思路 成果展示代码实现判断是最短路径还是最少换乘最短路径代码实现最少换乘代码实现根据所得List画出线路 ui界面的维护&#xff08;前提条件&#xff09;界面初始化combox控件建立槽函数 概…

Java中的数组

1.数组的概念 数组概念&#xff1a; 数组就是用于存储数据的长度固定的容器&#xff0c;保证多个数据的数据类型要一致。 百度百科中对数组的定义&#xff1a; 所谓数组(array)&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;就是把有限个类型相同的变…

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么&#xff1f; 2.2 Redis读写是单线程为何这么快&#xff1f; 2.3 Redis如何处理并发操作命令&#xff1f; 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

华为云云耀云服务器L实例评测|华为云上安装kafka

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上安装kafka一、kafka介绍二、华为云主机准备三、kafka安装1. 安装什么版本java2. 安装zookeeper服务3. 使用systemctl 管理启动ZooKeeper服务4. 修改kafka配置5. 使用systemctl 管理启动kafka服务6. 创建一个测试 topi…

Vue路由及Node.js环境搭建

目录 一.Vue路由 1.1 定义 1.2 应用领域 1.3 代码展示 二、Node.js 2.1 定义 2.2 特点 三.Node.js安装与配置 3.1.下载 3.2.安装 3.3.环境搭建 好啦今天到这了&#xff0c;希望帮到你&#xff01;&#xff01;&#xff01; 一.Vue路由 1.1 定义 Vue路由是指使用Vue Router…

大数据-hadoop

1.hadoop介绍 1.1 起源 1.2 版本 1.3生产环境版本选择 Hadoop三大发行版本:Apache、Cloudera、Hortonworks Apache版本最原始的版本 Cloudera在大型互联网企业中用的较多 Hortonworks文档较好 1.4架构 hadoop由三个模块组成 分布式存储HDFS 分布式计算MapReduce 资源调度引擎Y…

单片机上软字库换32进制存储,空间占用少20%

在之前的单片机字库建立的推送中: https://blog.csdn.net/platform/article/details/130742775&#xff0c; 存储了GB2312字符集对应的软字库文件&#xff0c;在16*16的编码下总字库的507KB&#xff0c;后来把字体切换成了12*12&#xff0c;软字库缩减到了301KB。当然这里面对…

Android---底部弹窗之BottomSheetDialog

BottomSheetDialog 是Android开发中的一个弹出式对话框&#xff0c;它从屏幕底部弹出并覆盖部分主界面。 1. BottomSheetDialog的使用 // 参数2&#xff1a;设置BottomSheetDialog的主题样式&#xff1b;将背景设置为transparent&#xff0c;这样我们写的shape_bottom_sheet_…

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别 2023/9/18 20:58 ffmpeg -i 1.mka -acodec aac 1.mp4 ffmpeg -i 1.mka -vn -c:a aac 2.aac ffmpeg -i 1.mka -vn -c:a aac 2.MP4 ffmpeg mka 转 aacmp4 https://avmedia.0voice.com/?id42526 用ffmpeg将mka格式转化…

华为云云耀云服务器L实例评测 | Docker 部署 Reids容器

文章目录 一、使用Docker部署的好处二、Docker 与 Kubernetes 对比三、云耀云服务器L实例 Docker 部署 Redis四、可视化工具连接Redis⛵小结 一、使用Docker部署的好处 Docker的好处在于&#xff1a;在不同实例上运行相同的容器 Docker的五大优点&#xff1a; 持续部署与测试…

AI绘图提示词Stable Diffusion Prompt 笔记

基础 提示词分为正向提示词&#xff08;positive prompt&#xff09;和反向提示词&#xff08;negative prompt&#xff09;&#xff0c;用来告诉AI哪些需要&#xff0c;哪些不需要词缀的权重默认值都是1&#xff0c;从左到右依次减弱&#xff0c;权重会影响画面生成结果。AI …

Spring Boot集成Redis实现数据缓存

🌿欢迎来到@衍生星球的CSDN博文🌿 🍁本文主要学习Spring Boot集成Redis实现数据缓存 🍁 🌱我是衍生星球,一个从事集成开发的打工人🌱 ⭐️喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路⭐️💠作为一名热衷于分享知识的程序员,我乐于在CSDN上与广大开发者…

C++标准模板库STL——list的使用及其模拟实现

1.list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个…

【C++】开源:单元测试框架gtest配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍单元测试框架gtest配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff…

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1. export 数据采集工具 简介&#xff1a; export是prometheus是的数据采集组件的总称&#xff0c;它可以将采集到的数据转为prometheus支持的格式 node_export: 用来监控服务器硬件资源的采集器&#xff0c;端口号为9100mysql_export: 用来监控mysql数据库资源的采集器&…

性能测试 —— Tomcat监控与调优:Jconsole监控

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具&#xff0c;JConsole使用Java虚拟机(Java VM)&#xff0c;提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台&#xff0c;标准版(Java SE平台)6&#xff0c;JConsole的已经更新到目前的外观…

前端新轮子Nue,号称替代Vue、React和Svelte

新的简约前端开发工具集Nue.js 于周三发布。在 Hacker News 上介绍它时&#xff0c;前端开发者和Nue.js 的创作者Tero Piirainen表示&#xff0c;它是 React、Vue、Next.js、Vite、Svelte 和 Astro 的替代品。他在 Nue.js的 FAQ 中进一步解释说&#xff0c;它是为网站和响应式用…

力扣刷题-链表-两两交换链表中的节点

24.两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 解题思路 采用正常模拟的方法。 建议使用虚拟头结点&#xff0c;这样会方便很多&am…