TiDB实战篇-Data Migration (DM) 同步数据

news/2024/5/20 11:31:27/文章来源:https://blog.csdn.net/S1124654/article/details/130302410

目录

简介

原理

任务管理

​编辑同步拓扑示例

使用场景

限制

硬件配置

安装&升级

部署

生成配置文件 

生成配置文件模板

更具自身的机器修改 

部署

启动集群&查看集群

实战

上游数据库前提

配置mysql的相关配置

编写DM的MySQL相关配置

把MySQL和DM master 产生关系

加入第二个MySQL(更具自己的情况选做)

查看数据源的连接信息

下游数据库前提

查看下上游要同步的数据库

编写同步配置问题

启动下游任务

查询任务

查看下DM状态

结果

MySQL1

MySQL2

TiDB

性能优化

结论

相关任务操作


简介

使用Data Migration (DM) 同步数据。

原理

  • DM worker负责读取上游的binlog(它是和上游兼容MySQL协议的数据库一对一的关系)。
  • DM master 监控和管理 DM worker。

任务管理

同步拓扑示例

 

使用场景

全量加增量的同步。

限制

 

  • 如果TiDB5.4之前,不支持其他的数据库的GBK同步数据过来。
  • 使用DM的时候会同步表的DDL语句,如果有些MySQL比较特殊的用法,TiDB不太支持。 

硬件配置

 

安装&升级

#安装
tiup install dm dmctl#升级
tiup update --self && tiup update dm 

部署

生成配置文件 

生成配置文件模板

#生成配置文件
tiup dm template > topology.yaml

更具自身的机器修改 

# The topology template is used deploy a minimal DM cluster, which suitable
# for scenarios with only three machinescontains. The minimal cluster contains
# - 3 master nodes
# - 3 worker nodes
# You can change the hosts according your environment
---
global:user: "root"ssh_port: 22deploy_dir: "/home/tidb/dm/deploy"data_dir: "/home/tidb/dm/data"# arch: "amd64"master_servers:- host: 192.168.66.10- host: 192.168.66.20- host: 192.168.66.21worker_servers:- host: 192.168.66.10- host: 192.168.66.20- host: 192.168.66.21monitoring_servers:- host: 192.168.66.10grafana_servers:- host: 192.168.66.20alertmanager_servers:- host: 192.168.66.21

部署

#查找支持的版本,找一个最新稳定的就行
tiup list dm-mastertiup dm deploy dm-deploy v7.0.0 ./topology.yaml --user root -p

启动集群&查看集群

#查看启动的集群
tiup dm list
#启动集群
tiup dm start dm-deploy
#查看集群状态
tiup dm display dm-deploy

实战

上游数据库前提

配置mysql的相关配置

#设置mysql的相关参数
mysql -h127.0.0.1 -P3306 -uroot -proot
在mysql端先查看下是否开启了binlog 
show variables like 'log_bin';
show variables like '%56%'; 
set global show_compatibility_56 ='ON';

编写DM的MySQL相关配置

注意下面的host不能够写127.0.0.1不然加入不成功。

#密码加密,配置文件里面的password就是这个root加密以后的字符串
tiup dmctl --encrypt 'root'
#创建数据源配置
vi mysql-source-config.yamlsource-id: "mysql-replice-01"
from:host: "192.168.66.10"port: 3306user: "root"password: "7EYsHL8G+fQUQnKp6fd+1UDUe/DO"

把MySQL和DM master 产生关系

#把MySQL和DM master 产生关系
tiup dmctl --master-addr=192.168.66.10:8261 operate-source create mysql-source-config.yaml

打印

[root@master output]# tiup dmctl --master-addr=192.168.66.10:8261 operate-source create mysql-source-config.yaml
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.0.0/dmctl/dmctl --master-addr=192.168.66.10:8261 operate-source create mysql-source-config.yaml
{"result": true,"msg": "","sources": [{"result": true,"msg": "","source": "mysql-replice-01","worker": "dm-192.168.66.10-8262"}]
}

加入第二个MySQL(更具自己的情况选做)

注意加入多个MySQL的时候source-id不能够相同

vi mysql-source-config1.yamlsource-id: "mysql-replice-02"
from:host: "192.168.66.10"port: 3307user: "root"password: "7EYsHL8G+fQUQnKp6fd+1UDUe/DO"tiup dmctl --master-addr=192.168.66.10:8261 operate-source create mysql-source-config1.yaml

查看数据源的连接信息

#查看所有数据源的连接信息
tiup dmctl --master-addr=192.168.66.10:8261 operate-source show
#查看某一个数据源的连接信息
tiup dmctl --master-addr=192.168.66.10:8261 get-config source mysql-replice-02

打印信息

[root@master output]# tiup dmctl --master-addr=192.168.66.10:8261 operate-source show
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.0.0/dmctl/dmctl --master-addr=192.168.66.10:8261 operate-source show
{"result": true,"msg": "","sources": [{"result": true,"msg": "","source": "mysql-replice-01","worker": "dm-192.168.66.10-8262"},{"result": true,"msg": "","source": "mysql-replice-02","worker": "dm-192.168.66.21-8262"}]
}
[root@master output]# tiup dmctl --master-addr=192.168.66.10:8261 get-config source mysql-replice-02
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.0.0/dmctl/dmctl --master-addr=192.168.66.10:8261 get-config source mysql-replice-02
{"result": true,"msg": "","cfg": "enable: true\nenable-gtid: false\nauto-fix-gtid: false\nrelay-dir: relay-dir\nmeta-dir: \"\"\nflavor: mysql\ncharset: \"\"\nenable-relay: false\nrelay-binlog-name: \"\"\nrelay-binlog-gtid: \"\"\nsource-id: mysql-replice-02\nfrom:\n  host: 192.168.66.10\n  port: 3307\n  user: root\n  password: '******'\n  max-allowed-packet: null\n  session: {}\n  security: null\npurge:\n  interval: 3600\n  expires: 0\n  remain-space: 15\nchecker:\n  check-enable: true\n  backoff-rollback: 5m0s\n  backoff-max: 5m0s\n  check-interval: 5s\n  backoff-min: 1s\n  backoff-jitter: true\n  backoff-factor: 2\nserver-id: 429524188\ntracer: {}\ncase-sensitive: false\nfilters: []\n"
}

下游数据库前提

查看下上游要同步的数据库

#查看有哪些数据库
mysql -h127.0.0.1 -P3306 -uroot -proot
mysql -h127.0.0.1 -P3307 -uroot -proot
show databases;
#创建TiDB的目标数据库
mysql -h127.0.0.1 -P4000 -uroot -ptidb
create database hue_mysql1;
create database gmall_config_mysql2;

编写同步配置问题

vi dm-task.yaml
# 任务名,多个同时运行的任务不能重名。
name: "test"
# 全量+增量 (all) 迁移模式。
task-mode: "all"
# 如果是分表分库里面就忽略自增主键了
ignore-checking-items: ["auto_increment_ID"]
target-database:host: "192.168.66.10"port: 4000user: "root"password: "2hcK5FlVHzKfM8GF6njtPECyxeRz"  #tiup dmctl --encrypt 'tidb' 加密得来
mysql-instances:
-source-id: "mysql-replice-01"block-allow-list: "log-ignored"  #对应下面的block-allow-listmydumper-config-name: "global"   #全量导入的配置route-rules: ["sharding-route-rules-table"] #对应下面的routesfilter-rules: ["trace-filter-rule"] #对应下面的filters
-source-id: "mysql-replice-02"block-allow-list: "log-ignored"         mydumper-config-name: "global"route-rules: ["sharding-route-rules-schema"]routes:sharding-route-rules-table:schema-pattern: gmalltarget-schema: hue_mysql1sharding-route-rules-schema:schema-pattern: gmall_configtarget-schema: gmall_config_mysql2
block-allow-list:                     log-ignored:ignore-dbs: ["test1"]     #在复制的时候忽略MySQL的test1数据库                     
mydumpers:global:threads: 4chunk-filesize: 64
filters: trace-filter-rule:schema-pattern: "hue" #源库hue的desktop_settings的表下面的操作忽略table-pattern: "desktop_settings"events: ["truncate table","drop table","delete"]action: Ignore

启动下游任务

tiup dmctl --master-addr="192.168.66.10:8261" start-task dm-task.yaml

打印

[root@master output]# tiup dmctl --master-addr="192.168.66.10:8261" start-task dm-task.yarml
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.0.0/dmctl/dmctl --master-addr=192.168.66.10:8261 start-task dm-task.yarml
{"result": true,"msg": "","sources": [{"result": true,"msg": "","source": "mysql-replice-01","worker": "dm-192.168.66.10-8262"},{"result": true,"msg": "","source": "mysql-replice-02","worker": "dm-192.168.66.21-8262"}],"checkResult": "fail to check synchronization configuration with type: no errors but some warningsdetail: {"results": [{"id": 22,"name": "table structure compatibility check","desc": "check compatibility of table structure","state": "warn","errors": [{"severity": "warn","short_error": "table `metastore`.`SORT_COLS` Foreign Key SORT_COLS_FK1 is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `hue`.`oozie_email` Foreign Key oozie_email_node_ptr_id_b6164766_fk_oozie_node_id is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `gmall`.`base_province` primary/unique key does not exist"},{"severity": "warn","short_error": "table `metastore`.`PARTITION_KEYS` Foreign Key PARTITION_KEYS_FK1 is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `metastore`.`SKEWED_COL_NAMES` Foreign Key SKEWED_COL_NAMES_FK1 is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `hue`.`oozie_kill` Foreign Key oozie_kill_node_ptr_id_6e3b4c7f_fk_oozie_node_id is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `metastore`.`TBL_PRIVS` Foreign Key TBL_PRIVS_FK1 is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `hue`.`oozie_bundledcoordinator` Foreign Key oozie_bundledcoordin_bundle_id_c0a51e15_fk_oozie_bun is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `hue`.`oozie_bundledcoordinator` Foreign Key oozie_bundledcoordin_coordinator_id_deb5052a_fk_oozie_coo is parsed but ignored by TiDB."},{"severity": "warn","short_error": "table `metastore`.`SKEWED_STRING_LIST_VALUES` Foreign Key SKEWED_STRING_LIST_VALUES_FK1 is parsed but ignored by TiDB."}],"instruction": "TiDB does not support foreign key constraints. See the document: https://docs.pingcap.com/tidb/stable/mysql-compatibility#unsupported-features; You need to set primary/unique keys for the table. Otherwise replication efficiency might become very low and exactly-once replication cannot be guaranteed."}],"summary": {"passed": true,"total": 23,"successful": 22,"failed": 0,"warning": 1}}"
}

查询任务

tiup dmctl --master-addr="192.168.66.10:8261" query-status test

打印

[root@master output]# tiup dmctl --master-addr="192.168.66.10:8261" query-status test
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.0.0/dmctl/dmctl --master-addr=192.168.66.10:8261 query-status test
{"result": true,"msg": "","sources": [{"result": true,"msg": "","sourceStatus": {"source": "mysql-replice-01","worker": "dm-192.168.66.10-8262","result": null,"relayStatus": null},"subTaskStatus": [{"name": "test","stage": "Running","unit": "Load","result": null,"unresolvedDDLLockID": "","load": {"finishedBytes": "0","totalBytes": "0","progress": "0.00 %","metaBinlog": "(mysql-bin.000046, 154)","metaBinlogGTID": "","bps": "0"},"validation": null}]},{"result": true,"msg": "","sourceStatus": {"source": "mysql-replice-02","worker": "dm-192.168.66.21-8262","result": null,"relayStatus": null},"subTaskStatus": [{"name": "test","stage": "Running","unit": "Sync","result": null,"unresolvedDDLLockID": "","sync": {"totalEvents": "0","totalTps": "0","recentTps": "0","masterBinlog": "(mysql-bin.000045, 154)","masterBinlogGtid": "","syncerBinlog": "(mysql-bin.000045, 154)","syncerBinlogGtid": "","blockingDDLs": [],"unresolvedGroups": [],"synced": true,"binlogType": "remote","secondsBehindMaster": "0","blockDDLOwner": "","conflictMsg": "","totalRows": "0","totalRps": "0","recentRps": "0"},"validation": null}]}]
}

查看下DM状态

#查看下DM状态 发现对饮的 dm-worker 变成了Bound状态
tiup dm list
tiup dm display dm-deploy

打印

[root@master output]# tiup dm display dm-deploy
tiup is checking updates for component dm ...
Starting component `dm`: /root/.tiup/components/dm/v1.12.1/tiup-dm display dm-deploy
Cluster type:       dm
Cluster name:       dm-deploy
Cluster version:    v7.0.0
Deploy user:        tidb
SSH type:           builtin
Grafana URL:        http://192.168.66.20:3000
ID                  Role          Host           Ports      OS/Arch       Status     Data Dir                              Deploy Dir
--                  ----          ----           -----      -------       ------     --------                              ----------
192.168.66.21:9093  alertmanager  192.168.66.21  9093/9094  linux/x86_64  Up         /home/tidb/dm/data/alertmanager-9093  /home/tidb/dm/deploy/alertmanager-9093
192.168.66.10:8261  dm-master     192.168.66.10  8261/8291  linux/x86_64  Healthy    /home/tidb/dm/data/dm-master-8261     /home/tidb/dm/deploy/dm-master-8261
192.168.66.20:8261  dm-master     192.168.66.20  8261/8291  linux/x86_64  Healthy    /home/tidb/dm/data/dm-master-8261     /home/tidb/dm/deploy/dm-master-8261
192.168.66.21:8261  dm-master     192.168.66.21  8261/8291  linux/x86_64  Healthy|L  /home/tidb/dm/data/dm-master-8261     /home/tidb/dm/deploy/dm-master-8261
192.168.66.10:8262  dm-worker     192.168.66.10  8262       linux/x86_64  Bound      /home/tidb/dm/data/dm-worker-8262     /home/tidb/dm/deploy/dm-worker-8262
192.168.66.20:8262  dm-worker     192.168.66.20  8262       linux/x86_64  Free       /home/tidb/dm/data/dm-worker-8262     /home/tidb/dm/deploy/dm-worker-8262
192.168.66.21:8262  dm-worker     192.168.66.21  8262       linux/x86_64  Bound      /home/tidb/dm/data/dm-worker-8262     /home/tidb/dm/deploy/dm-worker-8262
192.168.66.20:3000  grafana       192.168.66.20  3000       linux/x86_64  Up         -                                     /home/tidb/dm/deploy/grafana-3000
192.168.66.10:9090  prometheus    192.168.66.10  9090       linux/x86_64  Up         /home/tidb/dm/data/prometheus-9090    /home/tidb/dm/deploy/prometheus-9090
Total nodes: 9

结果

MySQL1

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dolphinscheduler   |
| gmall              |
| gmall_config       |
| hivemetastore      |
| hue                |
| metastore          |
| mysql              |
| performance_schema |
| shishimaxwell      |
| sys                |
| test1              |
| uploadfile         |
+--------------------+
13 rows in set (0.00 sec)

MySQL2

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| gmall_config       |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

TiDB

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| INFORMATION_SCHEMA  |
| METRICS_SCHEMA      |
| PERFORMANCE_SCHEMA  |
| dm_meta             |
| dolphinscheduler    |
| gmall_config        |
| gmall_config_mysql2 |
| hivemetastore       |
| hue                 |
| hue_mysql1          |
| metastore           |
| mysql               |
| shishimaxwell       |
| test                |
| test1               |
| uploadfile          |
+---------------------+
16 rows in set (0.00 sec)

性能优化

 

 

结论

Table BlockAllow: 作用是过滤掉不同步的库。

Binlog Event Fliter: 作用是表级别的操作过滤 ,比如不监听Delete那么源删除数据,目标不会删除数据。

Table Routing: 库和表的路由配置,也就是分表分库的合表合库操作。

上面没有把MySQL的库全部配置在  Routing 里面,但是其他的库也同步过去了,配置  Routing 的库,也成功同步过去了。也就是说默认是全库同步,可以配置Table BlockAllow忽略那些库不同步。

相关任务操作

#启动
tiup dmctl --master-addr="192.168.66.10:8261" start-task dm-task.yaml
#暂停(Binlog暂时不读)
tiup dmctl --master-addr="192.168.66.10:8261" pause-task dm-task.yaml
#恢复(开始从Binlog暂停的地方读取)
tiup dmctl --master-addr="192.168.66.10:8261" resume-task dm-task.yaml
#查询
tiup dmctl --master-addr="192.168.66.10:8261" query-status dm-task.yaml
#停止任务(这个停止以后不会记录Binlog)
tiup dmctl --master-addr="192.168.66.10:8261" stop-task dm-task.yaml

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

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

相关文章

jsp+springboot基于ssm的人才招聘求职网站推荐模拟考试系统java idea

登录需要随机数字验证码 管理员: 招聘管理 求职信息管理 , 招聘信息管理 人员管理 管理注册的用户进行审核操作 公告管理 发布公告新闻 (公告我想不到啥意思,可修改或增加别的) 个人信息 修改个人信息 招聘者&am…

KDZRS-40A三通道变压器直流电阻测试仪

一、产品概述 变压器绕组的直流电阻测试是变压器在交接、大修和改变分接开关后的试验项目。在通常情况下,用传统的方法(电桥法和压降法)测量变压器绕组以及大功率电感设备(发电机)的直流电阻是一项费时费工的工作。为了…

solidworks2022 - feature works 变灰的解决方法

文章目录 solidworks2022 - feature works 变灰的解决方法概述实验feature works 变灰问题的重现备注END solidworks2022 - feature works 变灰的解决方法 概述 feature works 用于step文件转零件. 一般是不同版本的solidworks交换文件的方法. 今天突然发现, 我自己转出的ste…

为什么要学习微服务?

文章目录 1.认识微服务1.1微服务由来1.2为什么需要微服务? 2.两种架构2.1.单体架构2.2.分布式架构 3.微服务的特点4.SpringCloud5.总结最后说一句 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为…

chatGPT衣食住行10种场景系列教程(01)使用chatGPT设计发型、P图变漂亮~真帅哈哈哈~

导读 时隔5个多月,chatGPT可谓是一日千里,越演越火,携带着AIGC行业一起飞了起来,那么在短短5个月当中有那些值得我们关注的事件?有那些好玩的场景?以及有那些chatGPT好用的工具?本文都将一一告…

Linux 远程访问控制 SSH SCP SFTP TCP-Wrappers

SSH&#xff08;secure shell&#xff09;协议 一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令 SSH客户端<-----------------网络------------------…

WPF教程(十一)---数据绑定(4)--数据类绑定

一、排序 如果想以特定的方式对数据进行排序&#xff0c;可以绑定到 CollectionViewSource&#xff0c;而不是直接绑定到 ObjectDataProvider。CollectionViewSource 则会成为数据源&#xff0c;并充当截取 ObjectDataProvider 中的数据的媒介&#xff0c;并提供排序、分组和筛…

ubuntu虚拟机增加磁盘后,虚拟机内部应该如何分配对应空间

fdisk -l 输入命令 parted /dev/sda 输入命令 unit s 设置Size单位&#xff0c;方便追加输入 输入命令 p free 查看详情 输入命令 resizepart 3 追加容量到sda3 输入命令 83886046s 空闲容量区间Free Space结束位置 输入命令 q 退出 输入命令 pvresize /dev/sda3 更新pv物…

设计模式 --- 概述

一、设计模式概述 1.1、软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 克里斯托夫亚历山大 &#xff08;Christopher Alexander&…

Unity-ML-Agents-训练生成的results文件解读-PushBlock

前言 训练结果文件路径&#xff1a;E:\ml-agents-release_19\results\push_block_test_02&#xff08;具体路径以自己电脑为准&#xff09; ML-Agents安装和PushBlock训练过程请见&#xff1a;&#xff08;注意&#xff1a;push_block_test_02没有全部训练完毕&#xff09; …

认识网络随机丢包

考虑一根漏水的管子&#xff0c;希望出水口接到和不漏的管子等量的水&#xff0c;要么靠时间&#xff0c;反复将漏掉的水重新注入&#xff0c;直到漏掉的水可忽略&#xff1a; ​ 要么靠空间&#xff0c;在漏的地方将管子加粗&#xff0c;一次性注入更多的水&#xff1a; 不…

如何在云服务器/云主机上部署最新版本的Hadoop3.3.5(Ubuntu20.0.4)

在云服务器上部署Hadoop 步骤1&#xff1a;更新系统 sudo apt-get update sudo apt-get upgrade步骤2&#xff1a;安装Java Hadoop需要Java运行环境。首先&#xff0c;安装OpenJDK 8&#xff1a; sudo apt-get install openjdk-8-jdk检查Java版本&#xff1a; java -versi…

掌握Linux指令和权限:一个入门教程

目录 一.Linux基本指令1.ls指令2.pwd指令3.cd指令4.touch指令5.mkair指令6.rmdir和rm指令 一.Linux基本指令 1.ls指令 语法格式:ls [选项][目录或者文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其…

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

小伙伴们&#xff0c;我们又来了。上期大概介绍了EtherCAT的一些特性&#xff0c;本期我们将会更详细的介绍一下EtherCAT的实现方式&#xff0c;通信周期的意义到底是什么、SDO和PDO到底是什么等概念。 首先要声明&#xff0c;尽管本期介绍略微深入&#xff0c;实际上小伙伴使…

响应式开发HTML5CSS3实现视频播放器的功能案例

目录 前言 一、本视频播放器需要实现的功能 ​二、代码分布结构 三、部分主要代码 1.index01.html 2.video1.css 3.video1.js 四、images图片资源及视频 五、运行效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5视频播放器等…

AIPRM for ChatGPT插件让ChatGPT如虎添翼

ChatGPT大热&#xff0c;家人们都申请到了账号&#xff0c;可是总是在一问一答的基础上来完成基本的应用&#xff0c;而不能很好的使用「咒语」&#xff08;Prompt&#xff09;&#xff0c;收获的答案不是通过很多次的反复问获取答案&#xff0c;就是获取的不是想要的答案。所以…

【HCIP】Huawei设备下IPV4IPV6共存实验

目录 方法一、普通的GRE将V6基于V4通讯 方法二、6to4的tunnel 方法三、双栈 方法一、普通的GRE将V6基于V4通讯 //方法一和方法二的前提&#xff0c;搭个简单的V4网络就行 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.1.1.1 24 [r1]router id 1.1.1.1 [r1-Gigabi…

分布式数据一致性解决方案推理过程

redis是一个极轻量级的进程&#xff0c;单机单线程单进程。 使用redis很容易实现分布式锁&#xff1a;setnx&#xff0c;同一个key&#xff0c;谁设置成功了&#xff0c;谁就抢到了锁&#xff0c;所以就产生了多锁问题。 假设客户端1抢到了锁&#xff0c;redis挂了&#xff0c…

不懂就问,Milvus 新上线的资源组功能到底怎么样?

在近期更新的 Milvus 2.x 版本中&#xff0c;我们上线了在社区中呼声一直很高的【资源组功能】。有了这个功能&#xff0c;用户再也不需要“为每个 collection 部署一套 Milvus 服务”的方案&#xff0c;轻松实现对 Query Node 资源进行分组管理&#xff0c;达到物理资源隔离的…

运行时内存数据区之执行引擎(一)

执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引擎则是由软…