我们继续来查看 k8s 的卷,上一次我们分享了将磁盘挂载到容器中,empyDir 和 gitRepo 都是会随着 pod 的启动而创建,随着 pod 的删除而销毁 那么我们或许会有这样的需求,期望在 若节点上的副本发生异常,那么会马上在当前节点立刻创建一个 新的 pod ,因此,新的 pod ,自然就能够正常的访问到 上一个 pod 留下来的数据了,自然就可以接着上一个 pod 的运行状态运行下去了 持久化存储 61ed74f43c34bef84d2f5a4c"), "name" : "xiaomotong888" } 第二步: 通过上图已经证实了我们上述的想法,这是符合预期的,哪怕 pod 被删除后重建,持久化存储的磁盘中仍然有 pod 实例中持久化的数据 另外一个持久化存储卷 还记得之前我们列的一堆卷类型,emptyDir,gitRepo,hostPath 都说了,现在就差 NFS 卷了 NFS 卷 NFS 卷是啥呢? 这个用起来就没有那么多幺蛾子,数据挂载了别的地方,这些数据都是持久化的,跟 pod 的启动,删除,就没有什么关系了
为什么需要持久化存储: 1、使得使用资源的pod的生命周期与存储卷的生命周期分开 2、使得使用资源的pod在被重启后仍然能够使用之前的存储卷 3、使得使用资源的pod在被调度到其它节点后仍然能够使用之前的存储卷 Host类型volume 测试用 - 仅适用于单节点k8s apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment name: www-storage persistentVolumeClaim: claimName: www-pvc StorageClass 详见 k8s
数据的持久化一直都是需要我们非常关心的问题,docker如此,K8s也不例外。在k8s中,有一个数据卷的概念。 说白了,emptyDir的数据持久化的生命周期和使用的pod一致。一般是作为临时存储使用。 这种数据持久化的方式,使用场景不多,因为它增加了pod与节点之间的耦合。 集群本身的数据持久化和docker本身的数据持久化会使用这种方式。 nfs本地目录下的数据,但是,一旦这个PVC被删除,那么本地的数据就会随着PVC的销毁而不复存在,也就是说,采用PV这种数据卷来实现数据的持久化,它这个数据持久化的生命周期是和PVC的生命周期是一致的。
本文主要讨论下 MySQL 8.0 版本的新特性:全局参数持久化 文末送书 ???? 活动 《MySQL 8 查询性能优化》,走过路过,不要错过! 全局参数持久化 MySQL 8.0 版本支持在线修改全局参数并持久化,通过加上 PERSIST 关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启 MySQL 时,可以从该配置文件获取到最新的配置参数 ----------+----------------+ 1 row in set (0.00 sec) 系统会在数据目录下生成一个包含 json 格式的 mysqld-auto.cnf 的文件,格式化后如下所示 max_connections | 151 | +-----------------+----------------+ 1 row in set (0.00 sec) 如果想要移除所有的全局持久化参数
上一篇提到了Redis的RDB持久化方式,同时也提到了一点关于AOF的内容。 RDB(snapshotting) 是一种内存快照的方式进行持久化,AOF(append-only-file)是通过追加写入命令的方式进行持久化,混合持久化是指RDB和AOF协同完成持久化工作来发挥各自有点的持久化方式 协议格式来保存命令内容的,有兴趣可以看一下: https://redis.io/topics/protocol 很显然,如果命令操作量非常大的时候,与RDB不同,AOF因为是追加命令,所以很大概率上AOF持久化文件会越来越大 混合持久化: 混合持久化是Redis 4.X之后的一个新特性,说是新特性其实更像是一种RDB&AOF的结合,持久化文件变成了RDB + AOF,首先由RDB定期完成内存快照的备份,然后再由AOF完成两次 在大多数场景下RDB + AOF的混合持久化模式其实还是很合适的。
作者:Arunjith Aravindan 翻译:管长龙 本文来源:https://www.percona.com/blog/2020/10/27/using-mysql-8-persisted-system-variables / ---- MySQL 8 之前,使用的动态变量不是永久性的,并且在重启后会重置。 可在运行时使用 SET 语句更改这些变量,以影响当前实例的操作,但是我们必须手动更新 my.cnf 配置文件以使其持久化。 持久化系统变量是 MySQL 8 中引入的功能之一。新功能可帮助 DBA 动态更新变量并注册它们,而无需从服务器端访问配置文件。 如何持久化全局系统变量? 是的,persisted_globals_load 参数用于启用或禁用持久化的系统变量。禁用后,服务器启动顺序将忽略 mysqld-auto.cnf 文件。
在任何数据库中统计信息是帮助数据库查询中走更适合的查询路径的基础,MYSQL 8 中持久化的统计信息怎么做,怎么能持久化后提高执行计划的稳定性。 所以上面的截图就是一个类似细微调整的参数 stats_persistent = 1 是要持久化性能计数器 stats_auto_recale 是控制这个表到底要不要进行自动的性能分析,例如有人ORACLE
1、搭建nfs存储 [root@docker-k8s01 ~]# yum -y install nfs-utils [root@docker-k8s01 ~]# mkdir /nfsdata/mysql -p [root@docker-k8s01 ~]# cat /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@docker-k8s01 ~]# systemctl restart nfs-server [root@docker-k8s01 ~]# systemctl enable rpcbind [root@docker-k8s01 ~]# mysql-persistent-storage mountPath: /var/lib/mysql //MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化 ; +------+ | id | +------+ | 1234 | +------+ 1 row in set (0.01 sec) 证明:当使用PV来做数据持久化的话,容器的新陈代谢并不会造成丢失数据的
Redis 相对于其他NoSQL 内存数据库而言,除了更富的数据结构和速度快之外,Redis 的丰富的持久化方案也就一个很显著的优势,Redis 支持RDB、AOF、混合持久化三种模式。 RDB(snapshotting) 是一种内存快照的方式进行持久化,AOF(append-only-file)是通过追加写入命令的方式进行持久化,混合持久化是指RDB和AOF协同完成持久化工作来发挥各自有点的持久化方式 RDB 持久化有自动触发、手动触发两种方式。 自动触发 具体可以看一下redis.conf 中的配置项及对应注释来了解这一部分内容,翻一下注释就很明了了: 当达到如下条件的时候就出发自动持久化,这种持久化在后台进行的bgsave 先看一下save选项 恢复: 数据恢复的过程,整个Redis 都是被阻塞在那里的,一直到持久化完成才正常工作。具体恢复步骤就是把文件移到刚才dir指定的文件下,然后启动redis 就可以啦。
---- Kubernetes为了能更好的支持有状态应用的数据存储问题,除了基本的HostPath和EmptyDir提供的数据持久化方案之外,还提供了PV,PVC和StorageClass资源对象来对存储进行管理 PV的全称是Persistent Volume(持久化卷),是对底层数据存储的抽象,PV由管理员创建、维护以及配置,它和底层的数据存储实现方法有关,比如Ceph,NFS,ClusterFS等,都是通过插件机制完成和共享存储对接 PVC的全称是Persistent Volume Claim(持久化卷声明),我们可以将PV比喻为接口,里面封装了我们底层的数据存储,PVC就是调用接口实现数据存储操作,PVC消耗的是PV的资源。 (3)、persistentVolumeReclaimPolicy:回收策略,也就是释放持久化卷时的策略,其有以下几种: Retain:保留数据,如果要清理需要手动清理数据,默认的策略; Delete: 总结 在Kubernetes中,虽然我们建议使用无状态应用,但是对于有些特殊应用,数据持久化还是必不可少的。
RDD 数据的持久化 每个 job 都会重新进行计算, 在有些情况下是没有必要, 如何解决这个问题呢? Spark 一个重要能力就是可以持久化数据集在内存中. 当我们持久化一个 RDD 时, 每个节点都会存储他在内存中计算的那些分区, 然后在其他的 action 中可以重用这些数据. 这个特性会让将来的 action 计算起来更快(通常块 10 倍). 可以使用方法persist()或者cache()来持久化一个 RDD. 在第一个 action 会计算这个 RDD, 然后把结果的存储到他的节点的内存中. RDD 的各个 Partition 是相对独立的, 因此只需要计算丢失的部分即可, 并不需要重算全部 Partition 另外, 允许我们对持久化的 RDD 使用不同的存储级别. 有一点需要说明的是, 即使我们不手动设置持久化, Spark 也会自动的对一些 shuffle 操作的中间数据做持久化操作(比如: reduceByKey).
Kubernetes 使用Persistent Volume和Persistent Volume Claim 两种API资源来管理存储。
引入持久化volume 之前我们都说过,容器间是独立存储的,并且容器内部的修改是没有被持久化的。 这就要引入今天要讲的持久化volume。 怎么玩volume 我们先以守护进程的方式启动一个进程,然后将里面的某个虚拟地址映射到本机的某个实际地址,具体命令如下。 ?
实现k8s的数据持久化的流程为:搭建nfs底层存储---->创建PV---->创建PVC---->创建pod。最终pod中的container实现数据的持久化。 就算不考虑这个问题,我们每次手动去创建PV也就比较麻烦的事情,这时,我们就需要一个自动化的工具来替我们创建PV。 1、搭建nfs服务 [root@docker-k8s01 ~]# yum -y install nfs-utils [root@docker-k8s01 ~]# mkdir /nfsdata [root @docker-k8s01 ~]# cat /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@docker-k8s01 ~]# systemctl enable rpcbind [root@docker-k8s01 ~]# showmount -e Export list for docker-k8s01: /nfsdata * 2、创建rbac
在容器化方面,数据的持久化存储是个难题。临时容器是一个短暂的计算环境,其中代码不会永远存储。但是您仍然需要将数据存储在某个物理磁盘上! CNCF 拥有广泛的与 Kubernetes 集成的持久数据存储工具,以帮助管理使用持久存储卷的管理任务。下面,我们将回顾 CNCF 托管的其中一些工具。 Rook 是 Kubernetes 的开源云原生存储实用程序,旨在自动化存储管理员的一些任务,例如程序化存储、迁移、灾难恢复、监控和资源管理。Rook 支持文件、块和对象存储类型。 K8up 可通过 Helm Chart 方便地分发,易于为特定的云原生备份用例部署和定制。K8up 可用于自动备份任何标记为ReadWriteMany或带有自定义标签的持久卷声明 (PVC)。 借助 OpenEBS,开发人员可以使用熟悉的 K8s 命令和 API 来控制特定容器的工作负载存储。存储软件本身由 Kubernetes 容器化和编排。该项目将此设置称为容器附加存储 (CAS)。
完整系列k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装1k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装2k8s系列(2)-Servicek8s系列(3)-StatefulSet 的MongoDB实战k8s系列(4)-MongoDB数据持久化k8s系列(5)-Configmap和Secretk8s系列(6)-Helmk8s系列(7)-命名空间k8s系列(8)-Ingressk8s 应用新的mongo.yaml[root@VM-79-37-centos ~/work/test-k8s/yaml/storage]# kubectl apply -f . 数据持久化保存正确存储数据> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBuse testswitched to db testdb.users.save /sc.yaml storageclass.storage.k8s.io/local-storage created[root@VM-0-14-centos storage]# kubectl get
前言 什么是持久化? 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。 持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。 持久化是将程序数据在持久状态和瞬时状态间转换的机制。 Redis提供了两种持久化方式 RDB持久化(快照) AOF持久化(只追加操作的文件 Append-only file) 先来看看RDB持久化 RDB持久化 RDB持久化是指在客户端输入save、bgsave AOF持久化 AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态,也就是每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。 那么我们如何开启AOF持久化功能呢?
前言 什么是持久化? 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。 持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。 持久化是将程序数据在持久状态和瞬时状态间转换的机制。 Redis提供了两种持久化方式 RDB持久化(快照) AOF持久化(只追加操作的文件 Append-only file) 先来看看RDB持久化 RDB持久化 RDB持久化是指在客户端输入save AOF持久化 AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态,也就是每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。 那么我们如何开启AOF持久化功能呢?
一. redis持久化的介绍 Redis的持久化指的是将内存中redis数据库运行的数据,写到硬盘文件上。 Redis持久化的意义主要在于故障恢复,比如你部署一个Redis,作为缓存有可能里边有一些比较重要的数据,如果没有持久化的时候,redis遇到灾难性故障的时候就会丢失所有的数据。 Redis持久化的两种方式: 1. RDB:Redis DataBase 默认的持久化方式,以二进制的方式将数据写入文件中,每隔一段时间写入一次。 2. RDB机制 2.1 介绍 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 AOF机制 3.1 介绍 与快照持久化相比,AOF持久化 的实时性更好,因此已成为主流的持久化方案。
涉及数据存储的的过程称之为持久化。下面golang中的数据持久化做简单的介绍。主要包括内存存储,文件存储和数据库存储。 内存持久化比较简单,严格来说这也不算是持久化,比较程序退出会清空内存,所保存的数据也会消失。这种持久化只是相对程序运行时而言。 基本上涉及的都有纯文本,格式化文本和二进制文本的读写操作。通过文件持久化数据比起内存才是真正的持久化。然而很多应用的开发,持久化更多还是和数据库打交道。 关于数据库,又是一个很大的话题。 总结 数据持久化我们介绍了内存,文件和数据库三种持久化方案。其中内存并不是严格意义的持久化,但是对于一些需要频繁操作,并且程序启动后就需要处理的数据,可以考虑内存持久化。 对于简单的配置,可以使用文件持久化,更多时候,数据的持久化方案还是依托于数据库。如今数据库种类繁多,无论是sql还是nosql,都需要考虑具体的使用场景。