故障种类 恢复方式 恢复策略 什么是并发 多个事务同时进行
并发包 概念 在实际开发中不考虑线程安全的情况下,一般不需要做线程安全处理,防止过多的处理导致性能变差 但是开发中有很多业务需要考虑线程安全的相关问题,此时就必须考虑线程安全的处理 Java为很多业务场景提供了性能优异 ,且线程安全的并发包 ConcurrentHashMap package ConcurrentHashMap; import java.util.HashMap; import java.util.Hashtable 在t1,t2执行完之前,后续主线程都不会执行 * 这就避免了提前打出maps长度导致结果并不是最终运行的结果 * 同时t1,t2都用到了join方法,所以二者之间仍然是并发执行 用户8正在执行! 用户7正在执行! 用户0正在执行! 用户9正在执行! 五个任务全部执行完毕,用户7开始执行! 五个任务全部执行完毕,用户9开始执行! 不是被销毁,如果是销毁则后续c执行传入的任务时获取当前线程得到的必然不是这些已经完成命名的线程),并且循环屏障是达到一组屏障就触发一次任务的执行,而不一定只执行一次 Semaphore 主要作用是控制线程的并发数量
value>file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/dfs/nn/snn/edits</value> </property> 故障恢复步骤 start-all.sh 4.浏览器页面正常访问 http://xxxx:50070/explorer.html#/【xxxx为namenode所在节点的ip】 发现一切正常,说明故障恢复成功
如果我们不小心 误删除了这个目录,也不用慌,正因为这个分区,我们除了开机 其他时候基本用不到,所以恢复起来还是很容易的。 而且恢复之后,我们操作系统里的其他服务基本没有影响,我们看一下,如果误删除了/boot,该如何恢复: 由于/boot分区一般就是用于存放镜像和相关启动引导文件,所以误删之后,恢复并不影响系统其他服务的正常运行 挂载光盘镜像 使用其他的Centos8 系统 查看boot目录下vmlinuz和initramfs生成的包 安装内核 Boot目录恢复 已可以正常引导
主要是关于集群恢复过程中,分片恢复并发数调整过大导致集群 hang 住的问题。 场景描述 废话不多说,先来描述场景。 为了加快集群恢复的速度,调整分片恢复并发数,将默认值为2的 node_concurrent_recoveries 调整为100: curl -X PUT "localhost:9200/_cluster 立马修改分片恢复并发数到10,通过管控平台一把重启了全部节点,约15分钟后集群恢复正常。接下来会先介绍一些基本的概念,然后再重现这个问题并做详细分析。 PEER 场景分片恢复并发数主要由如下参数控制: cluster.routing.allocation.node_concurrent_incoming_recoveries :节点上最大接受的分片恢复并发数 几分钟后,观察集群分片恢复数量,卡在固定数值不再变化: [分片恢复统计信息] 通过 allocation explain 查看分片分配状态,未分配的原因是受到最大恢复并发数的限制: [分片恢复限制] 观察线程池的数量
8.ConcurrentHashMap的分段锁统计元素数据(1)ConcurrentHashMap维护数组元素个数思路(2)ConcurrentHashMap维护数组元素个数流程(3)维护数组元素个数的 这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大。如果CAS累加baseCount失败,则尝试使用CounterCell来进行累加。 = null,再尝试对baseCount进行CAS累加 //这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大,这种思想在并发编程中很常见 if ((as = counterCells counterCells = rs; } } finally { //恢复标识 )TreeBin的成员变量和方法(3)TreeBin在构造方法中将链表转为红黑树(4)TreeBin在插入元素时实现红黑树的自平衡(1)treeifyBin()方法的逻辑put操作中当发现链表元素>=8时会调用
via [cluster.routing.allocation.node_concurrent_recoveries])"}]如果 decider 中返回 "throttling" 时,通常表示该节点恢复并发达到上限 ,如果集群资源利用率比较低的话,可以适当调大恢复并发参数,加速分片分配。 cluster.routing.allocation.node_concurrent_incoming_recoveries : 2,控制节点并发进行恢复操作的数量cluster.routing.allocation.node_concurrent_outgoing_recoveries : 2,控制节点并发进行分配操作的数量indices.recovery.max_bytes_per_sec : 40mb,带宽大小解决方案按需调整对应参数,初始化分片数量建议调大,balance数量一般不建议调大 其余并发恢复或分配数量一般建议调整为小于或等于单节点cpu核数。Persistent设置:这些设置是持久的,一旦设置后将一直保持有效,即使集群重启也会保留。
主要是关于集群恢复过程中,分片恢复并发数调整过大导致集群 hang 住的问题。 一、场景描述 废话不多说,先来描述场景。 为了加快集群恢复的速度,调整分片恢复并发数,将默认值为2的 node_concurrent_recoveries 调整为100: curl -X PUT "localhost:9200/_cluster 立马修改分片恢复并发数到10,通过管控平台一把重启了全部节点,约15分钟后集群恢复正常。接下来会先介绍一些基本的概念,然后再重现这个问题并做详细分析。 PEER 场景分片恢复并发数主要由如下参数控制: cluster.routing.allocation.node_concurrent_incoming_recoveries :节点上最大接受的分片恢复并发数 几分钟后,观察集群分片恢复数量,卡在固定数值不再变化: ? 通过 allocation explain 查看分片分配状态,未分配的原因是受到最大恢复并发数的限制: ?
介绍 k8s集群的备份与恢复,主要就是etcd集群的备份与恢复。 /etcd/data /data/k8s/etcd/data.bak mv /data/k8s/etcd/wal /data/k8s/etcd/wal.bak 拷贝 ETCD 备份快照 scp /etcd/data --wal-dir=/data/k8s/etcd/wal 查恢复的name,cluster-token等 [root@etcd_backup_dir]# systemctl status 而恢复时,主要考虑恢复整个顺序: 停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserver 参考链接 https://www.jianshu.com /p/8b483ed49f26
5.ConcurrentHashMap的Node数组初始化6.ConcurrentHashMap对Hash冲突的处理7.ConcurrentHashMap的并发扩容机制8.ConcurrentHashMap 当链表长度大于等于8 + Node数组长度大于64时,链表会转为红黑树,红黑树的存储使用TreeNode来实现。 最后判断链表的长度是否大于等于8,如果链表的长度大于等于8,再调用treeifyBin()方法决定是扩容数组还是将链表转化为红黑树。 >= 8时,ConcurrentHashMap会对链表采用两种方式进行优化。 方式一:对数组进行扩容当数组长度 <= 64,且链表长度 >= 8时,优先选择对数组进行扩容。方式二:把链表转化为红黑树当数组长度 > 64,且链表长度 >= 8时,会将链表转化为红黑树。
主要是关于集群恢复过程中,分片恢复并发数调整过大导致集群 hang 住的问题。 场景描述 废话不多说,先来描述场景。 为了加快集群恢复的速度,手动调整分片恢复并发数,原本想将默认值为2的 node_concurrent_recoveries 调整为10,结果手一抖多加了一个0,设定了如下参数: curl -X PUT 立马修改分片恢复并发数到10,通过管控平台一把重启了全部节点,约15分钟后集群恢复正常。接下来会先介绍一些基本的概念,然后再重现这个问题并做详细分析。 PEER 场景分片恢复并发数主要由如下参数控制: cluster.routing.allocation.node_concurrent_incoming_recoveries :节点上最大接受的分片恢复并发数 一般指分片从其它节点恢复至本节点。 cluster.routing.allocation.node_concurrent_outgoing_recoveries :节点上最大发送的分片恢复并发数。
现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。
错误码(0表示没有错误) 1.6.1 准备数据 -- 建库 drop database if exists testdb; create database testdb character set utf8mb4 collate utf8mb4_0900_ai_ci; use testdb -- 建表 create table t1 ( id bigint not null, name varchar(20) SQL语句,直接复制文件即可 2.1.2 按数据库运行状态划分 冷备份(离线备份):需停止数据库服务后备份,备份过程中数据库服务不可用 影响业务连续性 技术实现较简单,不需要考虑数据一致性和并发控制 (在线备份):在数据库运行时进行备份,备份过程中数据库服务依然可用 备份数据是系统当前最新的 不影响业务连续性 在高负载情况下,可能对数据库性能产生一定影响 技术实现复杂,需要考虑数据一致性和并发控制 Connection id: 8 Current database: *** NONE *** Reading table information for completion of table
介绍 k8s集群的备份与恢复,主要就是etcd集群的备份与恢复。 2. data/k8s/etcd/data.bak mv /data/k8s/etcd/wal /data/k8s/etcd/wal.bak 拷贝 ETCD 备份快照 scp /var/lib/etcd_backup /etcd/data --wal-dir=/data/k8s/etcd/wal 查恢复的name,cluster-token等 [root@etcd_backup_dir]# systemctl status 而恢复时,主要考虑恢复整个顺序: 停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserver 参考链接 https://www.jianshu.com /p/8b483ed49f26
虽然可以通过Etcd v3备份与恢复来实现K8S集群备份,但是这种备份很难恢复单个 Namespace。 今天推荐 Velero 工具,它提供以下功能: 灾备场景:提供备份恢复k8s集群的能力 迁移场景:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置) Velero 阿里云插件地址:https://github.com/AliyunContainerService/velero-plugin Velero 架构 Velero 分为两部分: 服务端:部署在目标 k8s ,只恢复当前集群中不存在的资源。 /huawei-k8s ReadWrite 查看已有的备份 $ velero get backup 查看已有的恢复 $ velero get restores 查看 velero 插件 $ velero
当然,它毕竟不是并发容器,除非大改,否则依然是不能应对高并发场景的,或者说即使没有因多线程访问而造成什么问题,但是效率必然是受到影响的。 本篇文章将要介绍的 ConcurrentHashMap 是 HashMap 的并发版本,它是线程安全的,并且在高并发的情境下,性能优于 HashMap 很多。 我们主要从以下几个方面对其进行学习: 历史版本的实现演变 重要成员属性的介绍 put 方法实现并发添加 remove 方法实现并发删除 其他的一些方法的简单介绍 一、历史版本的实现演变 jdk 1.7 三、put 方法实现并发添加 对于 HashMap 来说,多线程并发添加元素会导致数据丢失等并发问题,那么 ConcurrentHashMap 又是如何做到并发添加的呢? = 0) { //链表深度超过 8 转换为红黑树 if (binCount >= TREEIFY_THRESHOLD) treeifyBin
现在很多公司的招聘信息,都会有这这么一条要求:有分布式、高并发、高负载、高可用系统设计、开发和调优经验者优先。 一提到高并发、分布式、高可用这些词,很多人都会不自然的想到新闻里阿里双11每秒创建几十万笔的交易订单(2019双11订单创建峰值创纪录每秒54.4万笔) 其实,高并发并不神秘,说白了就是想办法搞定两个指标 1、网站并发量上来了?啥都不要管,先扩容,堆机器。机器多了自然需要集群技术、负载均衡了。(提升QPS) 2、机器多了也扛不住了?服务拆分,把集中式部署改成分布式部署。 (降低RT) 7、高并发导致了脏数据?上分布式锁。(保证数据正确性) 8、高并发导致了数据不一致?上分布式事务。(保证数据正确性) 架构从来都不是设计出来的,是演进出来的。
下面具体介绍这8款Linux数据恢复工具: 1、Knoppix Knoppix是从损坏的机器中恢复数据的最佳工具之一。它有一个可引导的CD版本,友好的用户界面。它可以让你轻松安装驱动器,然后复制数据。 它也是免费的数据恢复软件。Test disk可以帮助你修复分区表、恢复已删除的分区、修复FAT表和重建NTFS引导扇区。这个软件还能从备份中恢复NTFS引导扇区。 它简直就是数据恢复专家,配置了免费的开源数据恢复和取证工具的命令行界面环境。这个工具在恢复和救援文件、系统文件,以及修复来自非标准外部驱动器的数据时,非常有用。 它可以轻易地恢复所有可用的硬驱类型数据,包括SCCI、ATA、EIDE和IDE。而且界面非常友好,可以形象化整个硬盘、卷和其他任何选定的区域。 8、R-studio 该软件拥有灵活的参数和自定义设置。 有了这8款Linux数据恢复工具,我们使用Linux系统时遇见数据丢失的情况都能够轻松解决了,它们为我们的数据安全保驾护航。 谢谢收看本期视频,喜欢请关注哦
// MongoDB运维与开发(8)---MongoDB备份与恢复 // 任何数据库都离不开日常的备份与恢复,这二者是数据库安全的前提,MongoDB的备份与恢复方法一般而言都采用自带的工具来进行 在开始讲述备份之前,需要首先了解两个概念,一个是恢复点目标、一个叫恢复时间目标,下面我们分别来看: 恢复点目标:(也叫RPO,recovery point objective) 也就是数据可以恢复到哪个时间点 2 Mongorestore工具 数据备份和数据恢复二者是不可分割的,因为数据的备份,本质上还是为了恢复准备的,如果备份的数据不能恢复,那么备份也就失去了意义。 在MongoDB中,Mongorestore这个工具是用来做数据恢复的,数据恢复命令的常用参数如下: 与mongodump重复的部分不再赘述 -p,--port -h,--host -d,--db -c ,--collection --dir:恢复文件存放的位置,如果指定了数据库文件夹或者集合文件,则只恢复当前数据库或者当前集合,如果没有指定,则恢复当前目录下所有备份数据。
我们现场测试一个场景,drop一张MyISAM表后,单独对这表进行物理恢复首先我们看一下secure_file_priv文件目录的位置mysql> show global variables like / |+------------------+---------------------+如果没有设置这个选项,我们可以在my.cnf配置文件里添加这一项,放在[mysqld]下[root@mysql8_ 3 mysql3308]# systemctl stop mysqld83308.service[root@mysql8_3 mysql3308]# systemctl start mysqld83308 mysql3308/data/test/[root@mysql8_3 test]# chown -R mysql:mysql tmyisam.MYI[root@mysql8_3 test]# chown > select * from tmyisam;+------+| i |+------+| 1 |+------+1 row in set (0.00 sec)mysql>tmyisam表完成恢复