第96讲:MySQL高可用集群MHA的核心概念以及集群搭建

文章目录

    • 1.MHA高可用数据库集群的核心概念
      • 1.1.主从复制架构的演变
      • 1.2.MHA简介以及架构
      • 1.3.MHA的软件结构
      • 1.4.MHA Manager组件的启动过程
      • 1.5.MHA高可用集群的原理
    • 2.搭建MHA高可用数据库集群
      • 2.1.环境架构简介
      • 2.2.搭建基于GTID的主从复制集群
        • 2.2.1.在三台服务器中分别搭建MySQL实例
        • 2.2.2.配置基于GTID的主从复制集群
        • 2.2.3.查看集群各节点的状态
      • 2.3.部署MHA高可用集群
        • 2.3.1.配置三个MySQL服务器之间可信
        • 2.3.2.所有MySQL节点安装MHA Node软件依赖包
        • 2.3.3.在主库上创建MHA高可用需要的用户
        • 2.3.4.安装MHA Manager组件
        • 2.3.5.配置MHA
        • 2.3.6.检测MHA与数据库节点的连接线
        • 2.3.7.启动MHA
        • 2.3.8.查看MHA的状态
    • 3.MHA配置文件详解

1.MHA高可用数据库集群的核心概念

1.1.主从复制架构的演变

在MySQL集群模式的过程中,演变出了很多类的集群,分为以下几种:

1)基础主从

在基础主从中不需要依赖于其他任何的软件,MySQL自身就可以实现的集群模式。

常见的有一主一从、一主多从、多级主从(级联主从,A库复制给B库,B库再复制给C/D/E多库)、双主、环状主从、多主依从。

其中一主一从、一主多从、多级主从是企业中最常用的方案,当然有钱的还会用RDS。

双主模式在高可用环境、分布式架构中会用到。

环状、多主依从几乎不会用,环状指的是A复制B,B复制C,C复制A。

2)高性能架构

实际上一主多从架构不会直接在企业中使用,因为程序只会去连接主库,从库相当于只是在备份主库的数据,毫无意义而言,还浪费资源,基于这种场景,相继推出了高性能架构。

所谓的高性能架构就是我们熟知的读写分离架构,释放主库的读操作,在业务场景,很多的情况下都是读操作,写数据的场景一般很少,有了读写分离结构,所有的读操作就会通过中间件路由到从库上,所有的写操作通过中间件路由到主库上。

读写分离是通过第三方中间件实现的,通过路由机制分发读写操作,企业中用的非常多。

常见的读写分离中间件有:mysql-proxy、atlas、mysqlrouter、proxysql、maxscale、mycat。

3)高可用架构

即使有了读写分离架构,其实也不能保证高可用常见,当主库坏了,从库依旧是从库,不会成为一个主库,接替主库的工作,就会影响全年的宕机率。

为了保证业务高可用,全年0宕机率,高可用环境是必不可少的环节。

常见的高可用架构产品有三类:负载均衡类(lvs、f5、nginx)、主备系统(ka、ha、powerha、mc_sc、mha、mmm)、多活系统(pxc、mgc、mysql cluster、innodb cluster)。

主备系统有切换过程,大概几十秒,因此不能说是准全年0宕机率。

4)分布式架构

分布式架构是未来互联网发展的趋势所在,常见的分布式软件有没有餐厅和dble。

newsql也是未来的趋势。

1.2.MHA简介以及架构

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

mha官网:https://code.google.com/archive/p/mysql-master-ha/
github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

MHA的架构图

MHA可以同时对多组主从复制集群实现高可用架构,首先需要在所有的MySQL服务器中安装MHA Node组件,然后再部署一个MHA Manger管理组件,通过Manger管理组件去维护主从复制集群的高可用性。

使用MHA的前提需要准备至少三台数据库服务器,一主两从的主从复制集群,一台充当主库,一台主从备用主库,另外一台充当从库。

mha

1.3.MHA的软件结构

Manger组件主要包括以下几个工具包:

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

Node组件主要包含以下几个工具包:

名称功能
save_binary_logs保存和复制master的二进制日志
apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs清除中继日志(不会阻塞SQL线程)

1.4.MHA Manager组件的启动过程

Manager组件的启动过程:

  • 1)首先读取--conf=/data/mha/app1.cnf参数指定的MHA的配置文件,获取到主从复制集群主库和从库的相关信息。
  • 2)然后调用masterha_check_ssh这个脚本,通过配置文件中指定的ssh_user=root参数,进行互信检查。
  • 3)然后调用masterha_check_repl 这个脚本,检查主从复制的状态。
  • 4)一切准备就绪后,MHA启动成功。

1.5.MHA高可用集群的原理

MHA高可用集群的原理:

在MySQL的每台服务器中都会安装Node组件,MHA的Manager组件会通过masterha_master_monitor脚本,根据配置文件中的ping_interval参数间隔性的持续健康主库的运行状态,包括网络层面以及主库的状态,主库的状态通过我们指定的数据库用户来进行监控,一旦检测到master主库故障时,Manger组件会选举出集群中的某个从库,将这个从库提升为主库,然后剩余的从库去复制这个新主库的,重新生成一个高可用集群。

Manager组件选举新主库的过程:

Manager组件选举新主库有三种算法:

  • 当主库故障后,如果配置文件中有声明哪个节点强制为主库,该节点会强制提升为新的主库。
  • 当主库故障后,判断剩余从库谁的数据最新(根据Position或者GTID来判断),谁复制主库的数据最多,最多的节点提升为新主库。
  • 当主库故障后,如果剩余从库的Position或者GTID都一一致,也就意味着剩余从库复制的数据都一样多,那么此时就会根据配置文件中的书写顺序,从上到下,最上面的那个节点会成为新主库。

选举过程中还有一个小细节:

1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。

2)如果某个从库的check_repl_delay=0,即使落后很多日志,也强制选择其为备选主

新主库上任后数据处理过程:

当主库故障,新主库上任后,所有的库都会去判断故障主库的SSH连通性,如果能连接上主库,此时所有的从库就会去截取从库上没有,但是主库上有的数据,然后保存到各自的本地,避免数据丢失。

当主库故障后,通过SSH连通性,发现连不上主库,此时会进行一个数据补偿,其实就是将剩下的多个从库的数据同步成一致的,因为多个从库和主库复制的数据多多少少有差距,数据量最多的会成为新主库,数据库最少的会去复制新主库,数据补偿就是为了将剩下的这些库的数据量变成一致的。

  • 在传统模式下,数据补偿是通过apply_diff_relay_logs脚本计算新主库和从库的relay-log差异,需要通过内容进行复杂的对比,最终保证数据的统一。
  • 在GTID模式下,数据补偿是通过apply_diff_relay_logs脚本计算新主库和从库的relay-log差异,但是只需要比对GTID号即可,效率更高,因此建议MHA环境下,采用GTID的复制模式。

在主库故障,通过Manage组件自动切换过程中,Manager组件会试图从故障的主库服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的,当主库故障宕机后,主库中的二进制日志就没法保存了,针对这种情况,我们可以提供一台Binlog Server服务器,当主库宕机不可连接时,通过Binlog Server去保存二进制日志,最大程度上减少数据丢失。

MHA高可用切换的完整过程:

1)当Manager组件检测到主库故障时,就触发选举过程。

2)根据算法选举出某个从库作为主从复制集群的新主库,此时所有的从库,包括已经成为新主库的从库,都会去探测故障主库的连通性。

3)如果能连上故障主库,则截取从库与主库差异部分的Binlog,然后进行数据同步,避免数据丢失。

4)如果连不上故障主库,则进行数据补偿,使所有的从库包括新主库的数据统一。

5)解除成为新主库的从库身份,剩余的所有从库与新主库建立主从复制关系。

6)在MHA的配置文件中移除故障的节点。

7)Manager组件故障迁移工作完成,会自杀。

MHA的工作方式是一次性的,当完成一次故障切换后,就会自动停止运行,此时就需要DBA再次运行起来MHA,否则下次故障时,就不能达到高可用的效果了。

2.搭建MHA高可用数据库集群

本次搭建一个基础的MHA,企业级功能在后面的文章中讲解。

2.1.环境架构简介

由三台服务器组成的基于GTID的主从复制集群,集群架构为一主两从,最后通过MHA形成高可用的数据库集群。

IP主机名主从复制角色端口号组件
192.168.20.11mysql-1master3306mysql
192.168.20.12mysql-2slave3306mysql
192.168.20.13mysql-3slave3305mysql、mha

2.2.搭建基于GTID的主从复制集群

公司很多场景下都是使用的传统主从复制集群,本次我们可以使用基于GTID复制的主从复制集群,搭建更加简单,并且GTIT模式的主从复制集群,能够实现主库并发传输Binlog日志到从库的特性,并且针对从库的SQL线程也可以实现SQL多线程的并行执行Binlog的特性。

#基于GTID的主从复制集群,每个节点的配置文件中一定要配置上这三行参数
gtid-mode=on							#开启gpit功能
enforce-gtid-consistency=true			  #保证主从复制集群模式下,强制GTID的一致性
log-slave-updates=1						 #强制刷新从库的二进制日志
2.2.1.在三台服务器中分别搭建MySQL实例

首先在三台服务器中分别搭建单节点的MySQL实例,然后再配置成主从复制集群。

每个节点的部署方式一模一样,只是配置文件有所不同。

1)mysql-1节点部署MySQL的具体步骤一直配置文件内容如下:

1.解压MySQL二进制包
[root@mysql-1 ~]# tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@mysql-1 ~]# mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql2.设置MySQL的环境变量
[root@mysql-1 ~]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
export LD_LIBRARY_PATH=:/usr/local/mysql/lib3.将mysql、mysqlbinlog命令设置一份超链接到/usr/bin目录(mha会用到这两个命令,但是不会识别我们配置的系统变量)
#在开发的时候将这两个命令写成了绝对路径,必须要改。
[root@mysql-1 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog 
[root@mysql-1 ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql4.创建mysql用户
[root@mysql-1 ~]# groupadd -r mysql
[root@mysql-1 ~]# useradd -M -r -s /sbin/nologin -g mysql mysql4.准备数据目录
[root@mysql-1 ~]# mkdir /data/mysql
[root@mysql-1 ~]# chown -R mysql. /data/mysql5.初始化数据库
[root@mysql-1 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql6.准备mysql配置文件
[root@mysql-1 ~]# vim /etc/my.cnf
[mysqld]	
user=mysql								
port=3306							    
server_id=1							#每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql				
datadir=/data/mysql	
log_bin=mysql-bin
gtid-mode=on							#开启gpit功能
enforce-gtid-consistency=true			  #保证主从复制集群模式下,强制GTID的一致性
log-slave-updates=1						 #强制刷新从库的二进制日志
socket=/tmp/mysql.sock
log_error=/data/mysql/mysql_err.log
character-set-server=utf8[mysql]
socket=/tmp/mysql.sock7.准备服务管理脚本
[root@mysql-1 ~]# vim /etc/systemd/system/mysqld.service 
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 50008.启动数据库
[root@mysql-1 ~]# systemctl daemon-reload 
[root@mysql-1 ~]# systemctl start mysqld9.设置root密码
[root@mysql-1 ~]# mysqladmin -u root -P 3306  password '123456'10.登陆数据库
[root@mysql-1 ~]# mysql -uroot -p123456
mysql>

2)mysql-2节点的配置文件内容

[root@mysql-2 ~]# vim /etc/my.cnf
[mysqld]
user=mysql                                                              
port=3306                                                           
server_id=2                                                     #每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql                                
datadir=/data/mysql     
log_bin=mysql-bin
gtid-mode=on                                                    #开启gpit功能
enforce-gtid-consistency=true                     #保证主从复制集群模式下,强制GTID的一致性
log-slave-updates=1                                              #强制刷新从库的二进制日志
socket=/tmp/mysql.sock
log_error=/data/mysql/mysql_err.log
character-set-server=utf8[mysql]
socket=/tmp/mysql.sock

3)mysql-3节点的配置文件内容

[root@mysql-2 ~]# vim /etc/my.cnf
[mysqld]
user=mysql                                                              
port=3306                                                           
server_id=3                                                     #每个MySQL数据库的server_id都设置成不同的
basedir=/usr/local/mysql                                
datadir=/data/mysql     
log_bin=mysql-bin
gtid-mode=on                                                    #开启gpit功能
enforce-gtid-consistency=true                     #保证主从复制集群模式下,强制GTID的一致性
log-slave-updates=1                                              #强制刷新从库的二进制日志
socket=/tmp/mysql.sock
log_error=/data/mysql/mysql_err.log
character-set-server=utf8[mysql]
socket=/tmp/mysql.sock
2.2.2.配置基于GTID的主从复制集群

1)主库创建复制用户

mysql> grant replication slave on *.* to replicas@'192.168.20.%' identified by '123456';

2)配置从库连接主库

基于GTID的主从复制集群,如果是新的集群,可以不用再备份数据,然后还原到从库,可以直接填写要从主库的第一个GTID处开始复制,当然如果你的主库时运行很久的数据库,需要备份数据还原到从库,否则之前数据库的所有数据肯定不在Binlog了,会导旧数据无法同步到从库。

本次就不备份了,全新的主从复制集群,直接指向主库的第一个GTID号开始复制数据,下面直接来配置从库连接主库。

#mysql-2第一个从库的配置
[root@mysql-2 ~]# mysql -uroot -p123456
mysql> CHANGE MASTER TOMASTER_HOST='192.168.20.11',MASTER_USER='replicas',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
mysql> start slave;#mysql-3第二个从库的配置
[root@mysql-3 ~]# mysql -uroot -p123456
mysql> CHANGE MASTER TOMASTER_HOST='192.168.20.11',MASTER_USER='replicas',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
mysql> start slave;

基于GTID的主从和传统的主从配置方面的差别:只是获取主库Binlog的方式不同,GTID的主从通过 MASTER_AUTO_POSITION=1参数读取到主库第一个GTID号,从第一个GTID号处开始复制数据,传统的主从是指定主库正在使用的binlog以及开始标识位号。

#GTID的主从
mysql> CHANGE MASTER TOMASTER_HOST='192.168.20.11',MASTER_USER='replicas',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
mysql> start slave;#传统的主从
mysql> CHANGE MASTER TOMASTER_HOST='192.168.20.11',MASTER_USER='replicas',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=452,MASTER_CONNECT_RETRY=10;  
2.2.3.查看集群各节点的状态

基于GTID模式的主从复制集群已经搭建完毕,下面我们来查看三个节点各自的状态。

show master status\G;
show slave status\G;

两个从库的线程都是Yes状态。

image-20220708231541175

2.3.部署MHA高可用集群

2.3.1.配置三个MySQL服务器之间可信

MHA在主备切换时,需要拷贝备用master与主master缺失的数据,因此所有节点需要与MHA主机建立免密登陆。

ssh-keygen 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@数据库地址#三台服务器互相指
2.3.2.所有MySQL节点安装MHA Node软件依赖包

所有的MySQL节点都需要去安装这个Node软件包。

yum install perl-DBD-MySQL ncftp -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm 
2.3.3.在主库上创建MHA高可用需要的用户

MHA需要通过主从复制集群中的一个用户,监控主从节点的状态,主库创建即可,会同步到从库。

mysql> grant all privileges on *.* to mha@'192.168.20.%' identified by '123456';
2.3.4.安装MHA Manager组件

在mysql-1节点中搭建Manager组件即可,在企业生产环境中为了避免主从节点宕机,导致MHA不可用,一mysq般都会将MHA安装到主从复制集群之外,在学习环境中搭建在哪里都可以,另外也建议搭建在最后一个从库mysql-3中,因为主库mysql-1宕机就会导致MHA失去作用,当mysql-1宕了,mysql-2可能会成为新的主库,因此建议将MHA装载mysql-3中。

[root@mysql-3 ~]# yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
[root@mysql-3 ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
2.3.5.配置MHA
1.创建MHA目录
[root@mysql-1 ~]# mkdir /data/mha2.创建MHA日志目录
[root@mysql-1 ~]# mkdir /data/mha/logs3.编写MHA配置文件
[root@mysql-1 ~]# vim /data/mha/app1.cnf
[server default]				#默认全局配置
manager_log=/data/mha/logs/manager.log       		#MHA主备切换的日志路径 
manager_workdir=/data/mha                    		#MHA的工作目录
master_binlog_dir=/data/mysql             			#设置Master主库保存Binlog的路径,以便MHA找到Master的Binloguser=mha                                   			#设置MHA监控用户和密码
password=123456                            
ping_interval=2									  #设置监控主库发送ping包的时间间隔,默认3秒
repl_user=replicas								   #主从复制的用户账号和密码
repl_password=123456
ssh_user=root                               		#ssh登陆的用户名#下面的就是关于MySQL各节点的信息配置了,默认情况下从上到进行主备切换,按照主从从的顺序填写
[server1]                                   
hostname=192.168.20.11						#实例地址
port=3306                                  	  #端口号[server2]            
hostname=192.168.20.12
port=3306[server3]
hostname=192.168.20.13
port=3306
2.3.6.检测MHA与数据库节点的连接线

1)检查MHA Manger到所有MHA Node的SSH连接状态

[root@mysql-3 ~]# masterha_check_ssh --conf=/data/mha/app1.cnf

出现这一行表示成功。

image-20220709143336542

2)通过masterha_check_repl脚本查看整个集群的状态

[root@mysql-3 ~]# masterha_check_repl --conf=/data/mha/app1.cnf

出现这一行就表示MHA搭建完成了。

image-20220709143404315

2.3.7.启动MHA
[root@mysql-3 ~]# nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /data/mha/logs/manager.log 2>&1 &#--conf=:指定MHA配置文件路径。 
#--remove_dead_master_conf:当主库宕机后,自动从配置文件中将其移除。
#--ignore_last_failover:忽略故障转移,忽略掉总是宕机不够可靠的机器,在默认情况下,MHA发现某台机器咋8小时内多次宕机,则不会再切换到该主机,我们忽略这项配置,因为测试过程中,肯定会多次切换。
2.3.8.查看MHA的状态
[root@mysql-3 ~]# masterha_check_status --conf=/data/mha/app1.cnf
app1 (pid:10744) is running(0:PING_OK), master:192.168.20.11

3.MHA配置文件详解

[server default]				#默认全局配置
manager_log=/data/mha/logs/manager.log       		#MHA主备切换的日志路径 
manager_workdir=/data/mha                    		#MHA的工作目录
master_binlog_dir=/data/mysql             			#设置Master主库保存Binlog的路径,以便MHA找到Master的Binloguser=mha                                   			#设置MHA监控用户和密码
password=123456                            
ping_interval=2									  #设置监控主库发送ping包的时间间隔,默认3秒
repl_user=replicas								   #主从复制的用户账号和密码
repl_password=123456
ssh_user=root                               		#ssh登陆的用户名master_ip_failover_script=/data/mha/scripts/master_ip_failover			#当主库故障后,VIP地址的脚本
report_script=/data/mha/scripts/send								  #当主库故障后,发送邮件,执行动作#下面的就是关于MySQL各节点的信息配置了,默认情况下从上到进行主备切换,按照主从从的顺序填写
[server1]                                   
hostname=192.168.20.11						#实例地址
port=3306                                  	  #端口号[server2]            
hostname=192.168.20.12
port=3306
candidate_master=1					#当主库出现故障后,即使该节点不是集群中数据最多的,也强制提升该节点为主库,一般不设置,除非是两地三机房的环境,当A机房的主库挂了,指定B机房的一个从库成为主库
check_repl_delay=0				#默认情况下如果一个slave与master的数据差异在100M,则会跳过强制,还是会选择其他节点,通过此参数可以强强制就选此节点为新主库。[server3]
hostname=192.168.20.13
port=3306

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

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

相关文章

Prometheus 企业级监控使用总结

一、监控概念&误区 监控是管理基础设施和业务的核心工具&#xff0c;监控应该和应用程序一起构建和部署&#xff0c;没有监控&#xff0c;将无法了解你的系统运行环境&#xff0c;进行故障诊断&#xff0c;也无法阻止提供系统性的性能、成本和状态等信息。 误区&#xff…

法兰缺损零件设计加工替换盾构机扫描建模厂家抄数修图出CAD图纸

在现代工业生产中&#xff0c;法兰缺损零件的问题时有发生&#xff0c;这不仅会影响设备的正常运行&#xff0c;还会给企业带来巨大的经济损失。为了解决这一问题&#xff0c;CASAIM中科广电三维扫描和3D打印设计加工技术的运用成为了关键。 首先&#xff0c;CASAIM中科广电需要…

“与客户,共昂首”——Anzo Capital昂首资本尽释行业进取之姿

“以匠心&#xff0c;铸不凡” 活动的现场&#xff0c;Anzo Capital 作为演讲嘉宾分享“以匠心&#xff0c;铸不凡”的产品理念。Anzo Capital积淀九载&#xff0c;匠心打造出“STP”和“ECN”两大核心账户&#xff0c;以光之速度将交易中的订单直达市场和流动性提供商&#…

Unity通过物理带动实现传输带运输物品

前言&#xff1a;遇到个听起来挺简单的需求&#xff0c;就是实现一个传输带&#xff0c;传输物品。但细想发现如果是直接设置物品的速度&#xff0c;或者通过设置父物体的方式带动物品&#xff0c;都挺不好&#xff0c;关联性太强。最后选择用到一个很实用的API, Rigidbody.M…

Vue+OpenLayers7入门到实战:OpenLayers7加载天地图

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章介绍如何使用OpenLayers7在地图上加载天地图. 天地图瓦片访问需要先到天地图申请key。天地图官网链接 本文使用xyz方式加载天地图,并且介绍如何加载xyz格式天地图url,包括天地图纯底图(无标记)、卫星影像图…

SpringMVC入门学习(十)----mvc:annotation-driven标签介绍

目录 1、关于mvc:annotation-driven作用2、mvc:annotation-driven在什么时候必须配置3、关于mvc:annotation-driven配合使用的几种情况 回到顶部 1、关于mvc:annotation-driven作用 [1]、<mvc:annotation-driven /> 会自动向容器中注册如下组件&#xff0c;并且会代替…

0101appscan安装与使用入门-扫描-信息收集

1 简介 HCL AppScan&#xff08;原IBM Security AppScan&#xff09;是原IBM的Rational软件部门的一组网络安全测试和监控工具&#xff0c;2019年被HCL技术公司收购。AppScan旨在在开发过程中对Web应用程序的安全漏洞进行测试[1]。该产品学习每个应用程序的行为&#xff0c;无…

【蓝桥杯51单片机入门记录】LED

目录 一、基础 &#xff08;1&#xff09;新建工程 &#xff08;2&#xff09;编写前准备 二、LED &#xff08;1&#xff09;点亮LED灯 &#xff08;2&#xff09;LED闪烁 延时函数的生成&#xff08;stc-isp中生成&#xff09; 实现 &#xff08;3&#xff09;流水灯…

MG7050HAN 基于声表的差分多输出 晶体振荡器 (HCSL)

基于MG7050 HAN的声表差分多输出晶体振荡器(HCSL)&#xff0c;采用两路或四路差分HCSL&#xff08;高速电流驱动逻辑&#xff09;输出&#xff0c;可以减少外部扇出缓冲区&#xff0c;特别适用于需要超低抖动、高频率范围内稳定工作的应用场合。其输出特性曲线超低抖动&#xf…

降维(Dimensionality Reduction)

一、动机一&#xff1a;数据压缩 这节我将开始谈论第二种类型的无监督学习问题&#xff0c;称为降维。有几个原因使我们可能想要做降维&#xff0c;其一是数据压缩&#xff0c;它不仅允许我们压缩数据使用较少的计算机内存或磁盘空间&#xff0c;而且它可以加快我们的学习算法。…

90年代的黄河路,大家都在用什么方式互相联络?

1992 年的上海&#xff0c;霓虹养眼&#xff0c;万花如海… 新年伊始&#xff0c;一部《繁花》爆火出圈&#xff0c;带观众穿越回了那个灯红酒绿的上海。90 年代的黄河路遍地是机会&#xff0c;商业战场上&#xff0c;信息成了最宝贵的财富&#xff0c;谁能获得最真实有用的资讯…

Python学习之路-DRF基础:视图

Python学习之路-DRF基础:视图 视图概览 简介 REST framework 提供了众多的通用视图基类与扩展类&#xff0c;以简化视图的编写。 视图的继承关系 视图的方法与属性 视图说明 两个基类 APIView 简介 rest_framework.views.APIView APIView是REST framework提供的所有视…

微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)

客户端流程 客户端心跳与实例往服务端注册

vue3.0中从proxy中取值

使用vue3.0时&#xff0c;因为底层是使用proxy进行代理的所以当我们打印一些值的时候是proxy代理之后的&#xff0c;是Proxy 对象&#xff0c;Proxy对象里边的[[Target]]才是真实的对象。也是我们需要的 第一种获取target值的方式&#xff1a; import { toRaw } from vue; le…

openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c

文章目录 openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c概述学到的知识点笔记PEM证书可以拼接实验 pkcs12 - pkwrite.c用win10的证书管理器安装P12证书是成功的END openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c 概述 openssl3.2 - 官方demo学习 - 索引贴 上次PKCS12的…

大数据 - Spark系列《一》- 分区 partition数目设置详解

目录 &#x1f436;3.2.1 分区过程 &#x1f436;3.2.2 SplitSize计算和分区个数计算 &#x1f436;3.2.3 Partition的数目设置 1. &#x1f959;对于数据读入阶段&#xff0c;输入文件被划分为多少个InputSplit就会需要多少初始task. 2. &#x1f959;对于转换算子产生的…

中国文化之光:微博数据的探索与可视化分析

大家好&#xff0c;我是八块腹肌的小胖 下面我们针对主题“中国文化”相关的微博数据进行爬取 使用LDA、情感分析、情感演化、词云等可视化操作进行相关的展示 1、导包 第一步我们开始导包工作 下面这段代码&#xff0c;首先&#xff0c;pandas被请来了&#xff0c;因为它是…

2024年美赛 (A题MCM)| 海蟒鳗鱼 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看美赛的A题&#xff01; 完整内容可以在文章末尾领…

Camunda流程引擎概念

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;流程定义 …

服务器C盘突然满了,是什么问题

随着时代的发展、互联网的普及&#xff0c;加上近几年云计算服务的诞生以及大规模普及&#xff0c;对于服务器的使用目前是非常普遍的&#xff0c;用户运维的主要对象一般也主要是服务器方面。在日常使用服务器的过程中&#xff0c;我们也会遇到各式各样的问题。最近就有遇到用…