6种MySQL高可用方案对比分析
大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。
V 哥推荐:2024 最适合入门的 JAVA 课程
MySQL的高可用方案有多种,常见的包括以下几种:
1. 主从复制(Master-Slave Replication)
- 原理:主库进行写操作,数据通过异步或半同步复制到从库。可以通过从库进行读操作,实现读写分离。
- 优点:实现简单,适用于读多写少的场景。
- 缺点:主库故障时,手动提升从库为主库,切换较慢。可以借助管理工具,如MHA(Master High Availability)来自动切换主从。
**主从复制(Master-Slave Replication)**是一种常见的MySQL高可用方案,主要用于数据读写分离、备份、故障恢复等场景。以下是适合的业务场景和实现步骤的详细介绍。
一、主从复制适合的业务场景
-
读多写少的业务
- 在一些业务场景中,数据库的读操作远多于写操作。通过将读操作分发到从库,减轻主库的压力。
- 例如:电商平台中的商品展示页面,读操作远多于写操作。
-
数据备份
- 主从复制可以为数据提供实时备份,从库上的数据几乎实时同步主库。即便主库故障或出现问题,也可以通过提升从库为主库来确保业务的持续运行。
-
故障恢复
- 主库故障时,可以快速切换到从库,提供一定程度上的高可用性。
-
数据分析
- 数据分析或报表生成往往对实时性要求不高,可以从从库中读取数据进行分析,避免影响主库的性能。
二、主从复制的实现步骤
1. 准备工作
- 环境要求:假设有两台服务器,分别作为主库(Master)和从库(Slave)。IP地址假设为:
- 主库IP:192.168.1.100
- 从库IP:192.168.1.101
- 安装MySQL:确保主库和从库都已经安装了MySQL,并进行基础配置。
2. 主库(Master)配置
-
修改主库的MySQL配置文件
-
编辑主库的MySQL配置文件
my.cnf
或my.ini
(路径根据系统不同有所差异,一般在/etc/my.cnf
或/etc/mysql/my.cnf
)。[mysqld]
开启二进制日志 (Master必须开启)
log-bin=mysql-bin
设置server-id,确保在集群中唯一
server-id=1
设置binlog格式,推荐ROW
binlog_format=ROW
可选:限制binlog大小
max_binlog_size=100M
可选:保留二进制日志的天数
expire_logs_days=7
-
-
重启MySQL服务
在修改配置文件后,需要重启MySQL服务以使配置生效:
sudo systemctl restart mysqld
-
创建用于复制的用户
在主库上为从库创建一个专门用于复制的用户,并授予复制权限:
CREATE USER ‘replica’@‘192.168.1.101’ IDENTIFIED BY ‘replica_password’;
GRANT REPLICATION SLAVE ON . TO ‘replica’@‘192.168.1.101’;
FLUSH PRIVILEGES; -
锁定数据库并获取二进制日志文件和位置
由于复制需要基于二进制日志来同步数据,所以需要锁定表来确保数据的一致性:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
运行SHOW MASTER STATUS;
命令后,MySQL会返回类似如下信息:
+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 | 120 | | |+------------------+----------+--------------+------------------+
记录下File
和Position
的值,例如:mysql-bin.000001
和 120
。它们将在配置从库时使用。
-
备份主库数据
使用
mysqldump
进行全量备份,将数据导出并导入从库:mysqldump -u root -p --all-databases --master-data > master_backup.sql
-
解锁表
完成备份后,解除数据库锁定:
UNLOCK TABLES;
3. 从库(Slave)配置
-
修改从库的MySQL配置文件
-
编辑从库的MySQL配置文件
my.cnf
或my.ini
。[mysqld]
设置server-id,确保在集群中唯一
server-id=2
从库不需要开启二进制日志,除非需要级联复制
log-bin=mysql-slave-bin
其他可选配置
relay-log=relay-bin
-
-
重启从库MySQL服务
使配置生效:
sudo systemctl restart mysqld
-
导入主库数据
将在主库导出的备份文件导入到从库:
mysql -u root -p < master_backup.sql
-
配置复制
使用主库的二进制日志文件名和位置,配置从库的复制:
CHANGE MASTER TO
MASTER_HOST=‘192.168.1.100’,
MASTER_USER=‘replica’,
MASTER_PASSWORD=‘replica_password’,
MASTER_LOG_FILE=‘mysql-bin.000001’,
MASTER_LOG_POS=120; -
启动复制
配置完成后,启动从库的复制进程:
START SLAVE;
-
检查复制状态
通过以下命令查看从库的复制状态:
SHOW SLAVE STATUSG;
需要确认以下两个字段为Yes
,表明复制正常运行:
Slave_IO_Running: YesSlave_SQL_Running: Yes
4. 读写分离配置(可选)
-
应用层处理读写分离
- 应用程序可以通过代码配置,将写操作定向到主库,将读操作定向到从库。
- 例如:在Java Spring中,使用
AbstractRoutingDataSource
来根据操作类型选择不同的数据库连接。
-
使用中间件(例如Mycat、ProxySQL)
- 可以使用数据库中间件,将读写分离的逻辑下沉到中间件层,实现更灵活的负载均衡。
三、维护和监控
-
监控主从同步延迟
- 通过
Seconds_Behind_Master
字段监控从库的延迟,确保数据同步及时。
- 通过
-
定期备份从库
- 虽然从库的数据是实时同步的,但仍需定期备份从库,防止意外数据丢失。
-
故障切换
-
当主库故障时,可以手动提升从库为主库:
STOP SLAVE;
RESET SLAVE ALL;
-
主从复制可以为读多写少的业务场景提供一个简单而有效的解决方案,既提升了读操作的性能,也增强了数据库的可靠性。
2. 半同步复制(Semi-Synchronous Replication)
- 原理:在主库提交事务之前,至少一个从库确认收到数据,才算提交成功。相比于异步复制,有一定的延迟但更安全。
- 优点:保证数据一致性较强,适用于对数据一致性要求高的业务。
- 缺点:相比异步复制延迟较大,尤其在网络状况不佳时。
**半同步复制(Semi-Synchronous Replication)**是介于异步复制和全同步复制之间的一种高可用方案。它在写操作时不仅要求主库将数据写入二进制日志文件,还要求至少一个从库确认收到数据后,主库才认为提交成功。相比异步复制,它提供了更好的数据一致性保障,但又不像全同步复制那样带来较大的性能开销。以下将详细介绍它的适用业务场景和具体实现步骤。
一、半同步复制适合的业务场景
-
对数据一致性要求较高的业务
- 半同步复制适用于那些对数据一致性要求较高的业务场景。例如,金融系统、银行交易系统或电子商务平台,这些业务对数据的一致性要求非常严格,需要确保主库上的数据已经被至少一个从库接收到。
-
高并发写操作下保证数据的安全
- 如果某个业务场景具有大量的写操作,同时不能容忍数据丢失,半同步复制可以确保主库在提交事务时至少有一个从库已经收到数据,从而保证在主库崩溃时,数据依然是安全的。
-
低容忍度的故障恢复
- 在需要快速故障恢复的场景下,半同步复制可以确保数据在主库发生故障时不会丢失,这样可以快速地将从库提升为主库,以确保业务的连续性。
-
跨地域分布的数据库
- 当主库和从库位于不同数据中心时,半同步复制可以确保至少一个从库位于不同地理位置,保证在单个数据中心故障时,数据仍然可用。
二、半同步复制的实现步骤
1. 准备工作
- 假设我们有两台服务器,一台作为主库(Master),另一台作为从库(Slave)。我们将配置半同步复制,确保在事务提交时,至少一个从库已经收到数据。
- 假设主库的IP为
192.168.1.100
,从库的IP为192.168.1.101
。
2. 主库(Master)配置
-
修改主库的MySQL配置文件
-
编辑主库的MySQL配置文件
my.cnf
或my.ini
。[mysqld]
启用二进制日志(必须开启)
log-bin=mysql-bin
设置server-id,必须在主从库中唯一
server-id=1
设置binlog格式,推荐ROW格式
binlog_format=ROW
启用半同步复制的插件
plugin-load=rpl_semi_sync_master=semisync_master.so
启用半同步复制,并设置半同步超时时间
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000 # 以毫秒为单位,超时时间为10秒
-
-
重启MySQL服务
-
使配置生效:
sudo systemctl restart mysqld
-
-
启用半同步复制插件
-
如果没有在配置文件中加载插件,也可以通过以下命令动态加载:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled = 1;
-
-
创建复制用户
-
在主库上创建一个专门用于复制的用户,并授予
REPLICATION SLAVE
权限:CREATE USER ‘replica’@‘192.168.1.101’ IDENTIFIED BY ‘replica_password’;
GRANT REPLICATION SLAVE ON . TO ‘replica’@‘192.168.1.101’;
FLUSH PRIVILEGES;
-
-
查看主库状态
-
确认主库的半同步插件是否已启用:
SHOW VARIABLES LIKE ‘rpl_semi_sync%’;
-
确认rpl_semi_sync_master_enabled
为ON
。
3. 从库(Slave)配置
-
修改从库的MySQL配置文件
-
编辑从库的MySQL配置文件
my.cnf
或my.ini
:[mysqld]
设置server-id,确保唯一
server-id=2
启用半同步复制的插件
plugin-load=rpl_semi_sync_slave=semisync_slave.so
启用半同步复制
rpl_semi_sync_slave_enabled=1
-
-
重启MySQL服务
-
使配置生效:
sudo systemctl restart mysqld
-
-
启用半同步复制插件
-
如果没有在配置文件中加载插件,也可以动态加载:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
-
-
配置复制
-
配置从库的复制,首先确保从库与主库同步。在从库上执行以下命令:
CHANGE MASTER TO
MASTER_HOST=‘192.168.1.100’,
MASTER_USER=‘replica’,
MASTER_PASSWORD=‘replica_password’,
MASTER_LOG_FILE=‘mysql-bin.000001’,
MASTER_LOG_POS=120;
-
这里的MASTER_LOG_FILE
和MASTER_LOG_POS
的值可以从主库上通过SHOW MASTER STATUS
获得。
-
启动复制
-
在从库上启动复制进程:
START SLAVE;
-
-
检查复制状态
-
通过以下命令查看复制状态,确保
Slave_IO_Running
和Slave_SQL_Running
为Yes
:SHOW SLAVE STATUSG;
-
4. 验证半同步复制状态
- 检查主库的复制状态
-
使用以下命令查看主库上的半同步复制状态:
SHOW STATUS LIKE ‘Rpl_semi_sync_master%’;
-
关键字段:
Rpl_semi_sync_master_status
:ON
表示主库启用了半同步复制。Rpl_semi_sync_master_clients
: 表示当前确认半同步复制的从库数量。
- 检查从库的复制状态
-
在从库上执行以下命令,查看半同步复制是否正常:
SHOW STATUS LIKE ‘Rpl_semi_sync_slave%’;
-
关键字段:
Rpl_semi_sync_slave_status
:ON
表示从库启用了半同步复制。
三、半同步复制中的细节配置
-
超时时间配置
rpl_semi_sync_master_timeout
控制主库等待从库确认的超时时间。默认值是10秒,如果从库在该时间内未响应,主库将退回到异步模式,继续执行写操作。- 根据业务需求,可以调整该时间来平衡性能和一致性。
-
读写分离
- 半同步复制一般配合读写分离的架构。主库负责写操作,而从库负责读操作。这种模式可以有效减轻主库的压力,并且在半同步模式下从库能保持与主库的数据高度一致。
-
多从库配置
- 在实际部署中,可能会有多个从库。半同步复制要求至少一个从库确认写入日志后,主库才能认为事务成功。因此,即使有多个从库,只要一个从库响应,写操作就可以继续执行。
四、半同步复制的优势与注意事项
优势
- 数据安全性提高:半同步复制在主库提交事务之前,至少有一个从库已经收到数据,确保数据不会丢失。
- 故障切换更快速:因为从库已经接收到了主库的最新数据,当主库发生故障时,从库可以立即切换为主库,而不会有数据不一致的问题。
- 适合跨数据中心架构:当主库和从库位于不同数据中心时,可以减少因单个数据中心故障导致的数据丢失风险。
要注意的事
- 性能损耗:因为主库必须等待从库的确认响应,写操作的性能会有所下降,特别是在网络延迟较大的情况下。
- 超时机制:如果从库无法在规定的超时时间内响应,主库会退回到异步复制,这可能会导致短时间内的数据不一致性。
通过配置半同步复制,业务可以在数据安全性与性能之间找到一个较好的平衡。它适用于对数据一致性要求高,但又不想完全牺牲性能的场景,是金融、银行等关键业务系统中的常见选择
3. Galera Cluster
- 原理:是一种多主集群架构,支持多点读写。每个节点同步数据并维持一致性。
- 优点:数据实时同步、没有单点故障,适合高可用和高一致性要求的场景。
- 缺点:复杂度较高,对网络质量要求较高,适用于小范围分布式架构。
Galera Cluster是一种基于多主(Multi-master)复制的高可用数据库集群方案,提供了高并发、高可用性、强一致性和容错能力。它允许多个节点同时进行读写操作,并确保所有节点的数据一致性。下面详细介绍它适合的业务场景以及实现步骤。
一、Galera Cluster适合的业务场景
-
高并发读写的业务场景
- Galera Cluster允许多个节点同时进行读写操作,适合具有高并发读写需求的业务场景。例如,社交平台、在线支付系统等高并发场景,多个节点可以同时处理请求,大大提升系统的并发处理能力。
-
需要高可用性和容灾的业务
- Galera Cluster通过多主节点架构提供高可用性。当任意一个节点发生故障时,集群中的其他节点可以继续处理请求,保证业务不间断运行。这对那些对高可用性要求较高的业务至关重要,如金融系统、电子商务平台等。
-
地理分布的数据库集群
- Galera Cluster可以支持多个数据中心的数据库同步,适合跨地理区域部署,确保数据在不同地区保持一致。例如,跨区域的业务系统,如全球范围内的物流管理系统,能够在不同地区保持数据实时一致。
-
对强一致性要求较高的业务
- Galera Cluster使用同步复制技术,保证了集群中所有节点的数据强一致性。适合数据一致性要求较高的业务场景,如银行系统、交易平台等,这些场景中的数据一致性至关重要。
二、Galera Cluster的实现步骤
1. 准备工作
- 假设我们要搭建一个包含3个节点的Galera Cluster,节点IP如下:
- 节点1:192.168.1.101
- 节点2:192.168.1.102
- 节点3:192.168.1.103
- 系统要求:确保每个节点上已经安装了MySQL(或Percona、MariaDB等兼容Galera的数据库版本),并且它们可以相互通信(通常通过开放3306端口)。
- 时间同步:确保所有节点的系统时间同步,可以使用
ntp
或chrony
服务来保持各节点时间的一致性。
2. 安装Galera插件和数据库
-
安装数据库
-
在每个节点上安装MySQL或MariaDB,推荐使用MariaDB或Percona XtraDB,因为它们对Galera的支持较好。
-
以MariaDB为例,安装命令如下:
sudo apt-get update
sudo apt-get install mariadb-server
-
-
安装Galera插件
-
MariaDB和Percona通常会自带Galera插件。如果没有,手动安装Galera插件:
sudo apt-get install galera-4
-
3. 配置MySQL节点
-
修改MySQL配置文件
-
在每个节点上编辑MySQL配置文件
my.cnf
(路径可能是/etc/mysql/my.cnf
或/etc/my.cnf
,根据系统的不同有所差异)。 -
在
[mysqld]
部分添加以下配置:[mysqld]
服务器唯一ID
server-id=1
开启二进制日志(但Galera不使用它,兼容性需求)
log-bin
在所有节点启用同步复制功能
binlog_format=ROW
必须启用的选项
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0启用Galera同步协议
wsrep_on=ON
连接到集群的URL
wsrep_cluster_address=“gcomm://192.168.1.101,192.168.1.102,192.168.1.103”
指定Galera库
wsrep_provider=/usr/lib/galera/libgalera_smm.so
集群名称,所有节点应保持一致
wsrep_cluster_name=“my_galera_cluster”
节点名称,确保在集群中唯一
wsrep_node_name=“node1”
节点的IP地址
wsrep_node_address=“192.168.1.101”
数据库用户名和密码,供节点间认证使用
wsrep_sst_auth=“sst_user:sst_password”
SST(State Snapshot Transfer)时使用的方式
wsrep_sst_method=rsync # 可选择rsync或xtrabackup
-
- 在其他节点上重复此操作,注意修改
server-id
、wsrep_node_name
和wsrep_node_address
,以保证每个节点的配置唯一。
-
创建SST传输用户
-
SST用于在节点间传输数据。在主节点上为SST传输创建一个用户:
CREATE USER ‘sst_user’@‘%’ IDENTIFIED BY ‘sst_password’;
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON . TO ‘sst_user’@‘%’;
FLUSH PRIVILEGES;
-
-
防火墙设置
- 确保集群节点间的通信端口是开放的,主要端口包括:
- 4567:节点间的数据复制通信端口。
- 4568:增量状态转移(IST)时使用的端口。
- 4444:状态快照传输(SST)时使用的端口。
可以使用以下命令开放这些端口:
sudo ufw allow 3306/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4444/tcp - 确保集群节点间的通信端口是开放的,主要端口包括:
4. 启动Galera Cluster
-
启动第一个节点
-
第一个节点的启动稍有不同,因为它需要引导整个集群。使用以下命令在第一个节点上启动MySQL:
sudo galera_new_cluster
-
- 这将会引导整个集群,后续的节点将会连接到这个节点。
-
启动其他节点
-
在其他节点上,正常启动MySQL服务,它们会自动连接到第一个节点并同步数据:
sudo systemctl start mysql
-
-
验证集群状态
-
在每个节点上运行以下命令,确认节点是否成功加入集群:
SHOW STATUS LIKE ‘wsrep_cluster_size’;
-
如果一切顺利,wsrep_cluster_size
的值应该为3,表示集群中有3个节点。
5. 读写操作的配置
-
负载均衡
- 在多节点的Galera Cluster中,可以通过数据库中间件(例如ProxySQL)实现读写分离或负载均衡,确保不同的读写操作能够均匀地分布在不同的节点上,进一步提高性能。
-
多主读写
- Galera支持多主读写,所有节点都可以同时处理读写请求。在应用程序层面,可以通过负载均衡策略将读写操作分发到不同节点。
6. 监控和维护
-
监控集群健康状态
- 通过监控wsrep_status的几个重要字段来确保集群健康:
wsrep_cluster_size
: 当前集群的节点数。wsrep_cluster_status
: 应为Primary
,表示集群处于正常状态。wsrep_ready
: 应为ON
,表示节点可以处理请求。
- 通过监控wsrep_status的几个重要字段来确保集群健康:
-
节点故障恢复
- 如果某个节点发生故障,可以简单地重新启动该节点,它将自动加入集群并恢复数据。如果节点数据过多,可以使用xtrabackup替代rsync进行SST传输以减少影响。
三、Galera Cluster的优势与注意事项
优势
- 强一致性:Galera Cluster通过同步复制提供了数据的强一致性,保证集群中所有节点数据的准确同步。
- 多主架构:多个节点可以同时处理读写请求,极大地提高了并发性能。
- 高可用性:即使某个节点宕机,其他节点也能继续工作,保证系统的高可用性和容错能力。
- 自动故障恢复:节点崩溃后可以自动加入集群并恢复数据,不需要人工干预。
注意事项
-
性能损耗:由于Galera使用同步复制技术,所有节点都需要在事务提交时进行数据同步,因此延迟较大,可能会影响。这在地理上分散的节点部署时尤为明显。
-
网络要求:Galera Cluster对网络延迟较为敏感,要求节点间的网络连接稳定且带宽充足。如果集群节点分布在不同的数据中心或地理位置上,确保低延迟的网络连接非常重要。
-
写扩展性有限:虽然Galera Cluster允许多主写操作,但因为所有写操作需要同步到其他节点,写操作的扩展性有限。在高写入负载的场景下,Galera的性能可能不如其他基于异步复制的方案。
-
SST和IST操作:当新节点加入集群或发生节点故障时,Galera使用SST(State Snapshot Transfer)或IST(Incremental State Transfer)来同步数据。SST会导致性能损耗,因为它需要进行全量数据传输。为了避免大规模的SST操作,可以使用xtrabackup等更高效的工具,并确保节点尽量避免长时间离线。
-
事务冲突处理:由于多主复制,可能会发生事务冲突。Galera采用乐观并发控制(OCC),当两个节点同时尝试修改相同的数据时,后提交的事务会回滚。因此,虽然多主写操作提供了更高的并发性,但在高写入冲突的场景下可能导致回滚次数增多,影响整体性能。
四、小结一下
Galera Cluster 是一种适用于高可用、高一致性、高并发读写业务场景的数据库集群解决方案。通过多主节点和同步复制机制,Galera能够确保数据的一致性和集群的高可用性,特别适合那些对数据一致性要求高且需要处理大量读写请求的业务。
噢了,现在你可以成功部署一个稳定、高效的Galera Cluster,满足大规模、跨地域、高一致性业务场景的需求。
4. MySQL Group Replication
- 原理:MySQL自带的多主复制技术,基于Paxos算法的集群一致性协议。
- 优点:提供数据强一致性,自动故障恢复,多主模式。
- 缺点:性能和扩展性较受限于集群规模,适合对一致性要求极高的场景。
MySQL Group Replication是MySQL 5.7及以上版本提供的一种原生高可用性解决方案。它采用多主复制的架构,支持强一致性和高可用性。以下是MySQL Group Replication适合的业务场景,以及具体的实现步骤。
一、MySQL Group Replication适合的业务场景
-
高可用性需求的业务
- 对于金融、电子商务等对可用性要求极高的系统,MySQL Group Replication可以确保在节点故障的情况下,其他节点能够继续提供服务。
-
高并发的读写操作
- 在需要高并发读写操作的业务场景中(如社交平台、在线游戏等),Group Replication允许多个节点同时处理请求,提高了系统的并发性能。
-
跨地域的数据库应用
- MySQL Group Replication可以支持跨地理位置的数据库复制,适用于国际化的业务系统。这对于需要在不同地区保持数据一致性的企业至关重要。
-
数据一致性要求高的应用
- 对数据一致性要求严格的应用,如在线支付、库存管理等,MySQL Group Replication通过保证所有节点的强一致性,满足这些场景的需求。
-
自动故障恢复
- MySQL Group Replication具有自动故障恢复能力,适合对系统可用性和自动化管理要求高的业务。
二、MySQL Group Replication的实现步骤
1. 准备工作
-
假设我们要搭建一个包含3个节点的MySQL Group Replication集群,节点IP如下:
- 节点1:192.168.1.101
- 节点2:192.168.1.102
- 节点3:192.168.1.103
-
系统要求:确保每个节点上已经安装了MySQL(5.7或以上版本)。
-
时间同步:使用
ntp
或chrony
确保所有节点的系统时间一致。
2. 安装MySQL
-
在每个节点上安装MySQL(5.7或以上版本)。以Ubuntu为例,安装命令如下:
sudo apt-get update
sudo apt-get install mysql-server -
确认MySQL版本:
mysql --version
3. 配置MySQL节点
-
修改MySQL配置文件
-
在每个节点上编辑MySQL配置文件
my.cnf
(路径通常是/etc/mysql/my.cnf
或/etc/my.cnf
)。 -
在
[mysqld]
部分添加以下配置:[mysqld]
server-id=1 # 每个节点的唯一ID,依次为1, 2, 3
log_bin=binlog # 启用二进制日志
binlog_format=ROW # 设置二进制日志格式为ROW
gtid_mode=ON # 启用GTID
enforce-gtid-consistency=true # 强制GTID一致性
transaction_write_set_extraction=FULL # 设置事务写集提取为FULL启用Group Replication
plugin-load=group_replication.so # 加载Group Replication插件
group_replication_group_name=“aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee” # 设置组的UUID
group_replication_start_on_boot=on # 启动时自动启动Group Replication
group_replication_ssl_mode=DISABLED # 禁用SSL(如需使用SSL,可更改配置)
group_replication_group_seeds=“192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061” # 所有节点的地址
group_replication_local_address=“192.168.1.101:33061” # 当前节点的地址(根据实际节点修改)
-
- 在其他节点上重复此操作,确保
server-id
唯一,并修改group_replication_local_address
。
-
创建复制用户
-
在每个节点上创建用于Group Replication的复制用户:
CREATE USER ‘repl_user’@‘%’ IDENTIFIED BY ‘repl_password’;
GRANT REPLICATION SLAVE ON . TO ‘repl_user’@‘%’;
FLUSH PRIVILEGES;
-
-
防火墙设置
- 确保集群节点间的通信端口是开放的,主要端口包括:
- 3306:MySQL默认端口。
- 33061:Group Replication协议的端口。
可以使用以下命令开放这些端口:
sudo ufw allow 3306/tcp
sudo ufw allow 33061/tcp - 确保集群节点间的通信端口是开放的,主要端口包括:
4. 启动MySQL服务
-
在每个节点上启动MySQL服务:
sudo systemctl start mysql
5. 配置Group Replication
-
启动Group Replication
-
在每个节点上执行以下命令启动Group Replication:
START GROUP REPLICATION;
-
-
验证集群状态
-
在任意一个节点上,运行以下命令确认Group Replication是否正常运行:
SELECT * FROM performance_schema.replication_group_members;
-
- 此命令将返回当前Group Replication的成员列表,包括每个节点的状态。
-
监控Group Replication状态
-
监控Group Replication状态的关键字段:
SHOW STATUS LIKE ‘group_replication%’;
-
- 重要字段说明:
group_replication_members
: 集群中节点的数量。group_replication_state
: 集群状态,正常情况下应为ONLINE
。group_replication_primary_member
: 当前主节点的ID。
6. 读写操作配置
- 通过负载均衡策略(如使用ProxySQL)实现读写分离,以提高性能和响应速度。所有节点都可以同时进行读写操作。
7. 监控和维护
-
监控集群健康状态
- 通过监控各节点的健康状态和性能指标,确保系统正常运行。
-
节点故障处理
- 如果某个节点发生故障,Group Replication会自动检测并调整状态,其他节点会继续提供服务。
-
节点恢复
-
当故障节点恢复后,可以通过以下命令重新加入集群:
STOP GROUP REPLICATION;
START GROUP REPLICATION;
-
三、MySQL Group Replication的优势与注意事项
优势
- 强一致性:Group Replication确保所有节点的强一致性,适合需要确保数据准确性的业务。
- 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
- 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
- 原生集成:MySQL Group Replication是MySQL的原生功能,易于安装和配置。
注意事项
- 网络延迟敏感:Group Replication对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
- 性能考量:虽然Group Replication支持高并发,但在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
- 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。MySQL Group Replication使用乐观并发控制(OCC)来处理冲突。
- 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。
四、小结一下
MySQL Group Replication是一种非常灵活且强大的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。
5. MySQL InnoDB Cluster
- 原理:由MySQL Group Replication、MySQL Shell 和MySQL Router组成的高可用集群解决方案。
- 优点:官方支持,集成度高,自动化程度高,方便维护。
- 缺点:运维管理上需要一定的技术门槛,适用于中大型企业环境。
MySQL InnoDB Cluster是MySQL 5.7及以上版本提供的一个集成高可用性解决方案。它结合了MySQL Group Replication、MySQL Shell和MySQL Router,为用户提供了一个简化的部署和管理高可用集群的方式。以下是MySQL InnoDB Cluster适合的业务场景,以及具体的实现步骤。
一、MySQL InnoDB Cluster适合的业务场景
-
高可用性需求的应用
- 对于对可用性要求极高的应用,例如在线支付、金融服务等,InnoDB Cluster能够在节点故障时快速切换,确保服务持续可用。
-
需要读写分离的高并发系统
- 在社交网络、电商平台等高并发场景中,InnoDB Cluster能够通过MySQL Router实现智能的读写分离,提高系统的处理能力。
-
跨地域部署的应用
- InnoDB Cluster支持地理分布式的节点部署,适用于跨多个数据中心的业务需求,能够在不同地区保持数据一致性。
-
自动故障恢复
- InnoDB Cluster能够自动检测并处理节点故障,适合对自动化管理要求高的系统。
-
需要简单管理和运维的环境
- 对于缺乏运维经验的小型团队或企业,InnoDB Cluster提供了简化的管理界面和工具,适合快速上手和维护。
二、MySQL InnoDB Cluster的实现步骤
1. 准备工作
-
假设我们要搭建一个包含3个节点的MySQL InnoDB Cluster,节点IP如下:
- 节点1:192.168.1.101
- 节点2:192.168.1.102
- 节点3:192.168.1.103
-
系统要求:确保每个节点上已经安装了MySQL(5.7或以上版本)。
-
时间同步:使用
ntp
或chrony
确保所有节点的系统时间一致。
2. 安装MySQL和相关工具
-
安装MySQL
在每个节点上安装MySQL(5.7或以上版本)。以Ubuntu为例,安装命令如下:
sudo apt-get update
sudo apt-get install mysql-server -
安装MySQL Shell
MySQL Shell是InnoDB Cluster的管理工具,安装命令如下:
sudo apt-get install mysql-shell
-
安装MySQL Router
MySQL Router是用于应用程序和InnoDB Cluster之间的连接中介,安装命令如下:
sudo apt-get install mysql-router
3. 配置MySQL节点
-
修改MySQL配置文件
在每个节点上编辑MySQL配置文件
my.cnf
(路径通常是/etc/mysql/my.cnf
或/etc/my.cnf
)。在
[mysqld]
部分添加以下配置:[mysqld]
server-id=1 # 每个节点的唯一ID,依次为1, 2, 3
log_bin=binlog # 启用二进制日志
binlog_format=ROW # 设置二进制日志格式为ROW
gtid_mode=ON # 启用GTID
enforce-gtid-consistency=true # 强制GTID一致性
transaction_write_set_extraction=FULL # 设置事务写集提取为FULLInnoDB Cluster配置
plugin-load=group_replication.so # 加载Group Replication插件
group_replication_group_name=“aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee” # 设置组的UUID
group_replication_start_on_boot=on # 启动时自动启动Group Replication
group_replication_ssl_mode=DISABLED # 禁用SSL(如需使用SSL,可更改配置)
group_replication_group_seeds=“192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061” # 所有节点的地址
group_replication_local_address=“192.168.1.101:33061” # 当前节点的地址(根据实际节点修改)
- 在其他节点上重复此操作,确保
server-id
唯一,并修改group_replication_local_address
。
-
创建复制用户
在每个节点上创建用于InnoDB Cluster的复制用户:
CREATE USER ‘repl_user’@‘%’ IDENTIFIED BY ‘repl_password’;
GRANT REPLICATION SLAVE ON . TO ‘repl_user’@‘%’;
FLUSH PRIVILEGES; -
防火墙设置
确保集群节点间的通信端口是开放的,主要端口包括:
- 3306:MySQL默认端口。
- 33061:Group Replication协议的端口。
可以使用以下命令开放这些端口:
sudo ufw allow 3306/tcp
sudo ufw allow 33061/tcp
4. 启动MySQL服务
在每个节点上启动MySQL服务:
sudo systemctl start mysql
5. 配置InnoDB Cluster
-
使用MySQL Shell创建集群
- 登录MySQL Shell(使用root用户):
mysqlsh --uri root@192.168.1.101
-
进入SQL模式:
sql
-
创建InnoDB Cluster:
var cluster = dba.createCluster(‘myCluster’);
-
向集群添加节点:
cluster.addInstance(‘repl_user@192.168.1.102:3306’);
cluster.addInstance(‘repl_user@192.168.1.103:3306’); -
完成后,查看集群状态:
cluster.status();
-
配置MySQL Router
- 使用MySQL Router连接到InnoDB Cluster:
mysqlrouter --bootstrap repl_user@192.168.1.101:3306 --user=mysqlrouter
- 配置文件通常位于
/etc/mysqlrouter/mysqlrouter.conf
,可以根据需要进行修改。
6. 读写操作配置
- 通过MySQL Router实现读写分离。应用程序通过MySQL Router连接到集群,Router会根据配置智能地将读写请求分发到相应的节点。
7. 监控和维护
-
监控集群健康状态
- 通过MySQL Shell,使用以下命令监控集群状态:
cluster.status();
-
节点故障处理
- 如果某个节点发生故障,InnoDB Cluster会自动检测并调整状态,其他节点会继续提供服务。
-
节点恢复
- 当故障节点恢复后,可以通过以下命令重新加入集群:
cluster.addInstance(‘repl_user@192.168.1.102:3306’);
三、MySQL InnoDB Cluster的优势与注意事项
优势
- 强一致性:InnoDB Cluster确保所有节点的强一致性,适合需要确保数据准确性的业务。
- 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
- 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
- 简化管理:通过MySQL Shell和MySQL Router,简化了集群的管理和监控。
注意事项
- 网络延迟敏感:InnoDB Cluster对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
- 性能考量:虽然InnoDB Cluster支持高并发,但在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
- 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。InnoDB Cluster使用乐观并发控制(OCC)来处理冲突。
- 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。
四、总结
MySQL InnoDB Cluster是一个强大且灵活的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。
6. Percona XtraDB Cluster (PXC)
- 原理:基于Galera的多主集群解决方案,提供高可用性和高一致性。
- 优点:数据强一致性、自动故障恢复,兼容MySQL和Percona Server。
- 缺点:与Galera类似,网络延迟会影响性能。
**Percona XtraDB Cluster (PXC)**是一个基于MySQL和Galera库的高可用性解决方案,提供多主集群的特性。它支持强一致性、自动故障转移和扩展性。以下是Percona XtraDB Cluster适合的业务场景,以及具体的实现步骤。
一、Percona XtraDB Cluster适合的业务场景
-
高可用性和高可靠性需求
- 对于金融、电子商务和在线服务等对可用性和可靠性要求极高的系统,PXC能够确保在节点故障的情况下,其他节点能够继续提供服务。
-
需要强一致性的应用
- 适用于需要保证数据强一致性的应用,例如库存管理和在线支付,这些系统在数据更新时需要确保所有节点的数据一致。
-
大规模并发处理
- 在高并发的应用场景下,如社交媒体、在线游戏和大数据分析,PXC能够通过多个主节点处理写请求,支持高并发的读写操作。
-
跨地理位置的集群
- PXC支持地理分布式的节点部署,适合需要在不同地区保持数据一致性的业务需求。
-
自动故障恢复
- PXC能够自动检测节点故障并进行恢复,适合对系统可用性和自动化管理要求高的业务。
二、Percona XtraDB Cluster的实现步骤
1. 准备工作
假设我们要搭建一个包含3个节点的Percona XtraDB Cluster,节点IP如下:
-
节点1:192.168.1.101
-
节点2:192.168.1.102
-
节点3:192.168.1.103
-
系统要求:确保每个节点上已经安装了Percona Server和Galera库。
-
时间同步:使用
ntp
或chrony
确保所有节点的系统时间一致。
2. 安装Percona Server和相关工具
-
安装Percona Server
在每个节点上安装Percona Server。以Ubuntu为例,安装命令如下:
sudo apt-get update
sudo apt-get install percona-server-server-5.7 -
安装Galera库
在每个节点上安装Galera库:
sudo apt-get install percona-xtradb-cluster-galera
3. 配置Percona XtraDB Cluster节点
-
修改MySQL配置文件
在每个节点上编辑MySQL配置文件
my.cnf
(路径通常是/etc/mysql/my.cnf
或/etc/my.cnf
)。在
[mysqld]
部分添加以下配置:[mysqld]
server-id=1 # 每个节点的唯一ID,依次为1, 2, 3
log_bin=binlog # 启用二进制日志
binlog_format=ROW # 设置二进制日志格式为ROW
default-storage-engine=InnoDB # 设置默认存储引擎为InnoDB
innodb_flush_log_at_trx_commit=1 # 每次事务提交后将日志刷新到磁盘
innodb_file_per_table=ON # 为每个表使用单独的表空间
innodb_buffer_pool_size=1G # 根据实际情况调整缓冲池大小Galera配置
wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera库路径
wsrep_cluster_name=“my_cluster” # 设置集群名称
wsrep_cluster_address=“gcomm://192.168.1.101,192.168.1.102,192.168.1.103” # 所有节点的地址
wsrep_node_address=“192.168.1.101” # 当前节点的地址(根据实际节点修改)
wsrep_node_name=“node1” # 当前节点的名称
wsrep_sst_method=rsync # 设置状态快照传输方法
- 在其他节点上重复此操作,确保
server-id
唯一,并修改wsrep_node_address
和wsrep_node_name
。
-
创建复制用户
在每个节点上创建用于集群的复制用户:
CREATE USER ‘repl_user’@‘%’ IDENTIFIED BY ‘repl_password’;
GRANT ALL PRIVILEGES ON . TO ‘repl_user’@‘%’;
FLUSH PRIVILEGES; -
防火墙设置
确保集群节点间的通信端口是开放的,主要端口包括:
- 3306:MySQL默认端口。
- 4567:Galera集群节点间通信端口。
- 9200:状态快照传输端口。
可以使用以下命令开放这些端口:
sudo ufw allow 3306/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 9200/tcp
4. 启动集群节点
-
启动第一个节点
在第一个节点上启动MySQL服务:
sudo systemctl start mysql
由于这是第一个节点,因此它将自动初始化集群。
-
启动其他节点
在第二个节点和第三个节点上,首先以
gcomm://
开头启动服务以加入集群:sudo systemctl stop mysql # 停止MySQL服务
sudo galera_new_cluster # 初始化Galera集群
然后启动第二个节点和第三个节点:
sudo systemctl start mysql
5. 验证集群状态
-
检查节点状态
在任意一个节点上,运行以下命令以检查集群状态:
SHOW STATUS LIKE ‘wsrep_cluster_size’;
此命令将返回集群中节点的数量,确保所有节点都已成功加入集群。
-
检查集群成员
SHOW STATUS LIKE ‘wsrep_connected’;
返回值应为ON
,表示节点已连接。
6. 读写操作配置
- 可以直接通过任意一个节点进行读写操作。对于高并发的应用场景,可以使用负载均衡器(如HAProxy)在节点之间进行负载均衡。
7. 监控和维护
-
监控集群健康状态
- 使用以下命令监控集群的健康状态:
SHOW STATUS LIKE ‘wsrep%’;
关键字段包括:
wsrep_cluster_size
:集群中节点的数量。wsrep_ready
:表示节点是否准备好进行写操作。wsrep_connected
:表示节点是否连接到集群。
-
节点故障处理
- 如果某个节点发生故障,PXC会自动检测并调整状态,其他节点会继续提供服务。
-
节点恢复
- 当故障节点恢复后,可以通过以下命令重新加入集群:
sudo systemctl stop mysql # 停止MySQL服务
sudo galera_new_cluster # 初始化Galera集群
sudo systemctl start mysql # 启动MySQL服务
三、Percona XtraDB Cluster的优势与注意事项
优势
- 强一致性:PXC确保所有节点的强一致性,适合需要确保数据准确性的业务。
- 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
- 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
- 负载均衡:可以通过HAProxy等负载均衡器实现请求分发,提高系统性能。
注意事项
- 网络延迟敏感:PXC对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
- 性能考量:在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
- 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。PXC使用乐观并发控制(OCC)来处理冲突。
- 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。
四、总结
Percona XtraDB Cluster是一个强大且灵活的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。
最后
以上6种高可用方案详解,希望可以帮助小伙伴们,欢迎关注威哥爱编程,插播一下,服票大涨,会意味着大环境将走出低迷吗?
相关文章:
6种MySQL高可用方案对比分析
大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。 V 哥推荐:2024 最适合入…...
CLK敏感源和完整GND平面
SPI Flash芯片辐射发射(RE)问题: 某款产品在3米法电波暗室进行辐射(RE)发射测试时,发现多个频点余量不满足6dB管控要求. 通过频谱分析仪近场探头分析定位到干扰频点来自于SPI Flash时钟信号的高次谐波干扰,深入分析发…...
团体程序设计天梯赛-练习集——L1-034 点赞
前言 20分的题目题目不难,理解也不难,做起来有点问题 L1-034 点赞 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本…...
独立成分分析 (ICA):用于信号分离或降维
人工智能例子汇总:AI常见的算法和例子-CSDN博客 独立成分分析 (Independent Component Analysis, ICA) 是一种用于信号分离和降维的统计方法,常用于盲源分离 (Blind Source Separation, BSS) 问题,例如音频信号分离或脑电信号 (EEG) 处理。…...
【EdgeAI实战】(2)STM32 AI 扩展包的安装与使用
【EdgeAI实战】(1)STM32 边缘 AI 生态系统 【EdgeAI实战】(2)STM32 AI 扩展包的安装与使用 【EdgeAI实战】(2)STM32 AI 扩展包的安装与使用 1. STM32Cube.AI 简介1.1 STM32Cube.AI 简介1.2 X-CUBE-AI 内核引…...
【Java】MyBatis动态SQL
在MyBatis中使用动态SQL语句。 动态SQL是指根据参数数据动态组织SQL的技术。 生活中的案例: 在京东上买东西时,用户搜索商品,可以选择筛选条件,比如品牌,价格,材质等,也可以不使用筛选条件。这时…...
Spring Boot篇
为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…...
深入理解Node.js_架构与最佳实践
1. 引言 1.1 什么是Node.js Node.js简介:Node.js是一个基于Chrome V8引擎的JavaScript运行时,用于构建快速、可扩展的网络应用。Node.js的历史背景和发展:Node.js最初由Ryan Dahl在2009年发布,旨在解决I/O密集型应用的性能问题。随着时间的推移,Node.js社区不断壮大,提供…...
使用mockttp库模拟HTTP服务器和客户端进行单元测试
简介 mockttp 是一个用于在 Node.js 中模拟 HTTP 服务器和客户端的库。它可以帮助我们进行单元测试和集成测试,而不需要实际发送 HTTP 请求。 安装 npm install mockttp types/mockttp模拟http服务测试 首先导入并创建一个本地服务器实例 import { getLocal } …...
响应式编程_02基本概念:背压机制 Backpressure
文章目录 Pre流流的处理模型拉模式推模式 流量控制产者生产数据的速率小于消费者的场景生产者生产数据的速率大于消费者消费数据无界队列有界丢弃队列有界阻塞队列 背压机制响应式流规范响应式流的核心接口PublisherSubscriberSubscription 响应式流的技术生态圈 小结 Pre 响应…...
Jason配置环境变量
jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统,请按照以下具体步骤操作 视窗 下载 Jason 的最新版本,选择“jason-bin-3.3.0.zip”…...
[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置
2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方,在空白处鼠标右键选择通过Code打开 打开Vscode,点击platformIO图标,选择PIO Home下的open,最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…...
java开发面试自我介绍模板_java面试自我介绍3篇
java 面试自我介绍 3 篇 java 面试自我介绍篇一: 我叫赵,我的同学更都喜欢称呼我的英文名字,叫,六月的 意思,是君的谐音。我来自安徽的市,在 21 年我以市全市第一名 的成绩考上了大学,…...
intra-mart实现简易登录页面笔记
一、前言 最近在学习intra-mart框架,在此总结下笔记。 intra-mart是一个前后端不分离的框架,开发时主要用的就是xml、html、js这几个文件; xml文件当做配置文件,html当做前端页面文件,js当做后端文件(js里…...
2025最新软件测试面试大全
前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些面试题…...
JDK17主要特性
JDK 17,也被称为Java 17或Java Platform, Standard Edition 17,是Java编程语言的第十七个主要版本,由Oracle公司在2021年9月发布。Java 17是一个长期支持(LTS,Long-Term Support)版本,这意味着它…...
基于SpringBoot的在线远程考试系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Android Studio:Application 和 Activity的区别
Application 和 Activity 是 Android 中非常重要的两个组件,它们分别负责不同的生命周期管理和应用的不同层次的操作。 Application 是应用级别的生命周期管理,它在整个应用运行时只有一个实例,负责应用的全局初始化和资源管理。Activity 是…...
GAN(生成对抗网络,Generative Adversarial Network)
https://www.bilibili.com/video/BV1mp4y187dm/?spm_id_from333.788.recommend_more_video.2&vd_source35b06c13f470dff84c947fa3045bafc3...
大模型Dense、MoE 与 Hybrid-MoE 架构的比较
在大模型架构设计中,Dense(全连接)、MoE(混合专家)和Hybrid-MoE(混合式MoE)是三种主流的参数组织方式,它们在模型容量、计算效率和应用场景上存在显著差异。以下从核心原理、技术特点…...
Java进阶学习之路
Java进阶之路 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 Java进阶之路前言一、Java入门 Java基础 1、Java概述 1.1 什…...
Django 多数据库
django 支持项目连接多个数据库 DATABASES = {default: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxxx,HOST: xxxx,PORT: 3306,},bak: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxx,HOST: xxx…...
Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)
目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…...
6-图像金字塔与轮廓检测
文章目录 6.图像金字塔与轮廓检测(1)图像金字塔定义(2)金字塔制作方法(3)轮廓检测方法(4)轮廓特征与近似(5)模板匹配方法6.图像金字塔与轮廓检测 (1)图像金字塔定义 高斯金字塔拉普拉斯金字塔 高斯金字塔:向下采样方法(缩小) 高斯金字塔:向上采样方法(放大)…...
【学Rust写CAD】4 相对坐标系详解与实现要素概览
相对坐标系(Relative Coordinate System, RCS)是一个强大且灵活的工具,尤其在绘图、三维建模等领域中发挥着重要作用。以下是对相对坐标系的详细解析,包括其定义、应用、特性、与绝对坐标的区别、在CAD中的应用以及实现方式。 一…...
win编译openssl
一、perl执行脚本 1、安装perl脚本 perl安装 2、配置perl脚本 perl Configure VC-WIN32 no-asm no-shared --prefixE:\openssl-x.x.x\install二、编译openssl 1、使用vs工具编译nmake 如果使用命令行nmake编译会提示“无法打开包括文件: “limits.h”“ 等错误信息 所以…...
Kafka 使用说明(kafka官方文档中文)
文章来源:kafka -- 南京筱麦软件有限公司 第 1 步:获取 KAFKA 下载最新的 Kafka 版本并提取它: $ tar -xzf kafka_{{scalaVersion}}-{{fullDotVersion}}.tgz $ cd kafka_{{scalaVersion}}-{{fullDotVersion}} 第 2 步:启动 KAFKA 环境 注意:您的本地环境必须安装 Java 8+。…...
PyTorch数据建模
回归分析 import torch import numpy as np import pandas as pd from torch.utils.data import DataLoader,TensorDataset import time strat = time.perf_counter()...
Node.js与嵌入式开发:打破界限的创新结合
文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js?1.2 嵌入式开发的范式转变二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案三、实战案例:智能农业监测系统3.1 硬件配置3.2 软件架构3.3 核心代码片段四、…...
CVPR | CNN融合注意力机制,芜湖起飞!
**标题:**On the Integration of Self-Attention and Convolution **论文链接:**https://arxiv.org/pdf/2111.14556 **代码链接:**https://github.com/LeapLabTHU/ACmix 创新点 1. 揭示卷积和自注意力的内在联系 文章通过重新分解卷积和自…...
Markdown转换器中间件
目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式;不被浏览器支持;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上,并且在它之前运…...
https是如何保证安全的,又是如何保证不被中间人攻击的?
HTTPS如何保证安全,以及如何防止中间人攻击 保护用户隐私和数据安全已经成为了一个不可忽视的问题。随着网络攻击的不断升级,HTTPS(超文本传输安全协议)成为了我们在网络上交流时的一道重要防线。以下是HTTPS是如何保证安全的&am…...
2025.2.5
Web [SWPUCTF 2021 新生赛]ez_unserialize: 这个题先了解一下反序列化:反序列化是序列化的逆过程。序列化是将对象或数据结构转换为可以存储或传输的格式(如JSON、XML或二进制格式)的过程。反序列化则是将这个格式的数据转换回原始的对象或…...
TGT-HC:一种用于无线时间敏感网络的时隙感知整形MAC方案的调研、设计与评估
论文标题 中文标题:TGT-HC:一种用于无线时间敏感网络的时隙感知整形MAC方案的调研、设计与评估 英文标题:Survey, Design and Evaluation of TGT-HC: A Time-Aware Shaper MAC for Wireless TSN 作者信息 Raymond J. Jayabal(I…...
Ollama教程:轻松上手本地大语言模型部署
Ollama教程:轻松上手本地大语言模型部署 在大语言模型(LLM)飞速发展的今天,越来越多的开发者希望能够在本地部署和使用这些模型,以便更好地控制数据隐私和计算资源。Ollama作为一个开源工具,旨在简化大语言…...
《Redis4.0数据持久化》
【redis持久化导读】Redis作为一款高性能的内存数据库,支持key-value键值对的形式存储数据,为业务层提供了高效的数据查询能力,但大家有思考过一个问题没?假如redis服务所在的主机突然挂了,那么之前缓存在内存的数据是…...
如何利用Docker和.NET Core实现环境一致性、简化依赖管理、快速部署与扩展,同时提高资源利用率、确保安全性和生态系统支持
目录 1. 环境一致性 2. 简化依赖管理 3. 快速部署与扩展 4. 提高资源利用率 5. 确保安全性 6. 生态系统支持 总结 使用 Docker 和 .NET Core 结合,可以有效地实现环境一致性、简化依赖管理、快速部署与扩展,同时提高资源利用率、确保安全性和生态…...
前端js高级25.1.30
原型:函数的组成结构 通过这个图我们需要知道。 假设我们创建了一个Foo函数。 规则:Function.protoType是函数显示原型。__proto__是隐式对象。 Function、Object、Foo函数的__proto__指向了Function.protoType说明。这三个都依托function函数来创建。…...
C语言打印输出星号图形(三角形、菱形、漏斗)
文章目录 1. 介绍2. 案例分析3. 漏斗型4. 直角三角形4.1 左上直角三角形4.2 右上直角三角形4.3 左下直角三角形4.4 右下直角三角形 5. 等腰三角形5.1 正等腰三角形5.2 倒等腰三角形 6. 平行四边形6.1 纵向左下平行四边形6.2 纵向左上平行四边形6.3 横向左上平行四边形6.4 横向左…...
litemall,又一个小商场系统
litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端 代码地址:litemall: 又一个小商城。 litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端...
消费kafka消息示例
以下是使用 Java 结合 Spring Kafka 框架来监听 updated-topic-test 这个 Kafka Topic 的详细实现步骤及代码示例,用于捕获人员信息变更的事件。 1. 添加依赖 在 pom.xml 文件中添加 Spring Kafka 相关依赖: <dependencies><!-- Spring Boot…...
ShardingSphere--03--SpringBoot整合案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 SpringBoot整合案例1.建表2.nacos 配置ShardingSphere 规则3.java 依赖4.sql5.java 代码 SpringBoot整合案例 1.建表 CREATE TABLE t_audience_customer_0 (audid …...
K8S运行时切换-从Docker到Containerd的切换实战
1. 切换的原因 性能提升:Containerd通过减少抽象层提升了整体性能。 安全性增强:它提供了更直接的系统调用,减少了潜在的安全风险。 简化架构:Containerd拥有更简洁的设计,使得维护和故障排除更为容易。 官方支持趋…...
C# yield 关键字
前言 在 C# 中,yield 关键字是一个非常独特且强大的语言特性,它主要用于迭代器块(Iterator Block)中,能够让开发者以一种简洁高效的方式实现自定义的可迭代类型,轻松地生成并返回一个序列的值ÿ…...
软件设计模式
目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…...
【Leetcode 每日一题 - 补卡】922. 按奇偶排序数组 II
问题背景 给定一个非负整数数组 n u m s nums nums, n u m s nums nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 n u m s [ i ] nums[i] nums[i] 为奇数时, i i i 也是 奇数 ;当 n u m s [ …...
Redis缓存穿透、击穿、雪崩介绍以及解决方案
一、缓存穿透 1.1 什么是缓存穿透? 指的是,外部进来的请求,查询一个不存在的数据。Redis中没有,数据库中也没有,这时候如果外部恶意大量请求,所有请求会直接查询数据库,导致数据库崩溃 1.2 解决…...
Django框架丨从零开始的Django入门学习
Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django是一个高度模块化的框架,使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能…...
AI绘画:解锁商业设计新宇宙(6/10)
1.AI 绘画:商业领域的潜力新星 近年来,AI 绘画技术以惊人的速度发展,从最初简单的图像生成,逐渐演变为能够创造出高度逼真、富有创意的艺术作品。随着深度学习算法的不断优化,AI 绘画工具如 Midjourney、Stable Diffu…...
.net的一些知识点
1.public,protected,private的区别 从访问权限来说是 public>protecd>private 翻译成汉字:公有的>受保护的>私有的 但是在拿那种旧版本(2017及之前)的vs创建class的时候,这个类是没有修饰符的。现在vs2022版本创建带了默认修饰符&#x…...