Longhorn+K8S+KubeSphere云端数据管理,实战 Sentry PostgreSQL 数据卷增量快照/备份与还原

image

云端实验环境配置

VKE K8S Cluster

  1. Vultr 托管集群
  • http://vultr.com/

image

  1. 3worker 节点,kubectl get nodes
k8s-paas-71a68ebbc45b   Ready    <none>   12d   v1.23.14
k8s-paas-dbbd42d034e6   Ready    <none>   12d   v1.23.14
k8s-paas-f7788d4f4a38   Ready    <none>   12d   v1.23.14

Kubesphere v3.3.1 集群可视化管理

全栈的 Kubernetes 容器云 PaaS 解决方案。

  • http://kubesphere.io/

image

Longhorn 1.14

Kubernetes 的云原生分布式块存储。

  • http://longhorn.io/

image

Sentry Helm Charts

非官方 k8s helm charts,大规模吞吐需建设微服务集群/中间件集群/边缘存储集群

  • http://github.com/sentry-kubernetes/charts
helm repo add sentry http://sentry-kubernetes.github.io/charts

kubectl create ns sentry
helm install sentry sentry/sentry -f values.yaml -n sentry
# helm install sentry sentry/sentry -n sentry

为 Sentry PostgreSQL 数据卷不同状态下创建快照

创建快照

这里我们创建 3 个 PostgreSQL 数据卷快照,分别对应 Sentry 后台面板的不同状态。

Sentry 后台面板状态-1

image

Sentry 后台面板状态-2

image

Sentry 后台面板状态-3

image

分别创建 3 个快照

image

创建备份

配置备份目标服务器

用于访问备份存储的端点。支持 NFS 和 S3 协议的服务器。

image

针对快照 2 创建备份

image

image

查看备份卷

备份卷创建时间取决于你的卷大小和网络带宽。

image

Longhorn 为 K8S StatefulSets 恢复卷的示例

官方文档:http://longhorn.io/docs/1.4.0/snapshots-and-backups/backup-and-restore/restore-statefulset/

Longhorn 支持恢复备份,此功能的一个用例是恢复用于 Kubernetes StatefulSet 的数据,这需要为备份的每个副本恢复一个卷。

要恢复,请按照以下说明进行操作。 下面的示例使用了一个 StatefulSet,其中一个卷附加到每个 Pod 和两个副本。

  1. 在您的 Web 浏览器中连接到 Longhorn UI 页面。在 Backup 选项卡下,选择 StatefulSet 卷的名称。 单击卷条目的下拉菜单并将其还原。将卷命名为稍后可以轻松引用的 Persistent Volumes
  • 对需要恢复的每个卷重复此步骤。
  • 例如,如果恢复一个有两个副本的 StatefulSet,这些副本的卷名为 pvc-01apvc-02b,则恢复可能如下所示:
Backup Name Restored Volume
pvc-01a statefulset-vol-0
pvc-02b statefulset-vol-1
  1. 在 Kubernetes 中,为创建的每个 Longhorn 卷创建一个 Persistent Volume。将卷命名为以后可以轻松引用的 Persistent Volume Claims。下面必须替换 storage 容量、numberOfReplicasstorageClassNamevolumeHandle。在示例中,我们在 Longhorn 中引用 statefulset-vol-0statefulset-vol-1,并使用 longhorn 作为我们的 storageClassName
apiVersion: v1
kind: PersistentVolume
metadata:
  name: statefulset-vol-0
spec:
  capacity:
    storage: <size> # must match size of Longhorn volume
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  csi:
    driver: driver.longhorn.io # driver must match this
    fsType: ext4
    volumeAttributes:
      numberOfReplicas: <replicas> # must match Longhorn volume value
      staleReplicaTimeout: '30' # in minutes
    volumeHandle: statefulset-vol-0 # must match volume name from Longhorn
  storageClassName: longhorn # must be same name that we will use later
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: statefulset-vol-1
spec:
  capacity:
    storage: <size>  # must match size of Longhorn volume
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  csi:
    driver: driver.longhorn.io # driver must match this
    fsType: ext4
    volumeAttributes:
      numberOfReplicas: <replicas> # must match Longhorn volume value
      staleReplicaTimeout: '30'
    volumeHandle: statefulset-vol-1 # must match volume name from Longhorn
  storageClassName: longhorn # must be same name that we will use later
  1. 在将部署 StatefulSetnamespace 中,为每个 Persistent Volume 创建 PersistentVolume ClaimsPersistent Volume Claim 的名称必须遵循以下命名方案:
<name of Volume Claim Template>-<name of StatefulSet>-<index>

StatefulSet Pod 是零索引的。在这个例子中,Volume Claim Template 的名称是 dataStatefulSet 的名称是 webapp,并且有两个副本,分别是索引 01

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-webapp-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi # must match size from earlier
storageClassName: longhorn # must match name from earlier
volumeName: statefulset-vol-0 # must reference Persistent Volume
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-webapp-1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi # must match size from earlier
storageClassName: longhorn # must match name from earlier
volumeName: statefulset-vol-1 # must reference Persistent Volume
  1. 创建 StatefulSet:
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: webapp # match this with the PersistentVolumeClaim naming scheme
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 2 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: data # match this with the PersistentVolumeClaim naming scheme
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: longhorn # must match name from earlier
      resources:
        requests:
          storage: 2Gi # must match size from earlier

结果: 现在应该可以从 StatefulSet Pod 内部访问恢复的数据。

通过 Longhorn UI 恢复 Sentry PostgreSQL 数据卷

卸载 sentry 命名空间下一切资源并自删除 namespace

# 删除 release
helm uninstall sentry -n sentry
# 删除 namespace
kubectl delete ns sentry

查看当前 namespace

kubectl get ns,已无 sentry。

image

从备份服务器恢复 PostgreSQL 数据卷

还原最新的备份

image

设置不同机器间多个卷副本, 高可用

  1. 卷名设置为 statefulset-vol-sentry-postgresql-0
  2. 副本设置为至少 2,卷副本会被自动调度到不同节点,保证卷高可用。

image

为 Longhorn 备份卷创建 PV/PVC

image

注意:这里我们需要重新创建 namespace:sentry

kubectl create ns sentry

image

image

重新安装 sentry

helm install sentry sentry/sentry -f values.yaml -n sentry

查看 statefulset-vol-sentry-postgresql-0 副本

image

重新访问 Sentry

image

ok,成功恢复。

  • 更多,K8S PaaS 云原生中间件实战教程
  • 关注公众号:黑客下午茶
本文转载于网络 如有侵权请联系删除

相关文章

  • Java中的5大队列,你知道几个?

    大家好,又见面了,我是你们的朋友全栈君。本文已收录至https://github.com/vipstone/algorithm《算法图解》系列。 通过前面文章的学习《一文详解「队列」,手撸队列的3种方法!》我们知道了队列(Queue)是先进先出(FIFO)的,并且我们可以用数组、链表还有List的方式来实现自定义队列,那么本文我们来系统的学习一下官方是如何实现队列的。Java中的队列有很多,例如:ArrayBlockingQueue、LinkedBlockingQueue、PriorityQueue、DelayQueue、SynchronousQueue等,那它们的作用是什么?又是如何分类的呢?其实Java中的这些队列可以从不同的维度进行分类,例如可以从阻塞和非阻塞进行分类,也可以从有界和无界进行分类,而本文将从队列的功能上进行分类,例如:优先队列、普通队列、双端队列、延迟队列等。虽然本文的重点是从功能上对队列进行解读,但其它分类也是Java中的重要概念,所以我们先来了解一下它们。阻塞队列和非阻塞队列阻塞队列(BlockingQueue)提供了可阻塞的put和take方法,它们与可定时

  • ASP.NET Core WebApi项目架构分层开发实战演练

    一、项目分层架构介绍和搭建阿笨这里推荐大家的一种比较传统经典的三层架构,一般就可以满足日常我们工作中的大部分项目开发需求。关于分层,我们首先需要搞懂每一层的职责。表现层:可以理解为UI层。负责接受用户输入的数据和页面数据展示。服务层:可以理解为:业务逻辑层。仓储层:可以理解为:数据访问层。实体层:主要是存储数据实体(EntityModel—Entitys)和视图模型(ViewModel—Dtos)。基础设施层:主要存储一些公共的基础类库和组件。属于所有层的最底层,可以被任何层都引用。《ASP.NETCoreWebApi构建API接口服务实战演练》一、ASP.NETCoreWebApi课程介绍人生苦短,我用.NETCore!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过WebAPI用起来更简单,更轻量级,更流行。构建一个优秀的API依赖于伟大的框架,今天我们的主角当然是微软的跨平台轻量级HTTP服务框架——Asp.netCoreWebApi。今天阿笨将给大家带来的分享课程是如何利用ASP.NETCoreWebApi跨平台开发技

  • 如何刷新cdn缓存 cdn缓存的任务

    众所周知,网络技术对于一个国家拥有着非常重大的作用,现如今我国投入了大量的科研经费在网络技术的发展中,其主要目的就是为了利用网络技术来造福百姓。目前大家熟知的cdn就是在普通网络技术之上编辑形成的一个新的虚拟网络,利用这个虚拟网络传输数据就会更加的轻松简单。但是大家在生活中同样也要学会如何刷新cdn缓存。如何刷新cdn缓存cdn缓存的主要任务是什么cdn缓存的主要任务就是保存用户向浏览器发出的申请要求,或者暂存一些大家在浏览页面时留下的数据。众所周知一些大家浏览网页时的请求数据以及网页的网络数据会发生冲突,进而会影响大家上网时的速度。然而cdn缓存的出现能够建立一个模拟的新型缓存器,在缓存器中可以放入大家浏览网页时的请求数据。然后网络数据和请求数据就不会发生冲突,cdn缓存的出现能够让大家在浏览网页时不会出现任何的缓冲。如何刷新cdn缓存想要刷新cdn缓存首先要进入cdn缓存页面,然后选中所有接下来要刷新的对象,点击一键刷新就能够将所有的缓存内容更新到最新的数据。如果长时间不缓存cdn数据同样也会导致网页请求数据堆积,这样对以后的网络数据存储和网络数据传输不利。大家在生活中如果使用cd

  • React-Native踩坑记

    最近使用react-native参与开发了个应用,记录下其中踩的一些坑。本人使用的是mac电脑进行开发,本文仅对此平台进行记录?下载不了xcode升级自己的mac的系统到最新版本,之后在mac的应用市场中下载xcode。appStore->Develop->xcode 复制代码复制请保持网络的顺畅,升级系统和下载安装xcode比较耗时,需耐心等待啦~ran"xcodebuild"command,errorcodefor65跑起来的时候可能会出现这样的错误:errorFailedtobuildiOSproject.Weran"xcodebuild"commandbutitexitedwitherrorcode65.Todebugbuildlogsfurther,considerbuildingyourappwithXcode.app,byopeningdemo_native.xcodeproj 复制代码复制可以参考下面的步骤解决:用xcode当前当前项目,如File->Open->demo_native->ios选择F

  • 【一起学源码-微服务】Nexflix Eureka 源码六:在眼花缭乱的代码中,EurekaClient是如何注册的?

    前言上一讲已经讲解了EurekaClient的启动流程,到了这里已经有6篇Eureka源码分析的文章了,看了下之前的文章,感觉代码成分太多,会影响阅读,后面会只截取主要的代码,加上注释讲解。这一讲看的是EurekaClient注册的流程,当然也是一块核心,标题为什么会写上眼花缭乱呢?关于EurekaClient注册的代码,真的不是这么容易被发现的。如若转载请标明来源:一枝花算不算浪漫源码分析如果是看过前面文章的同学,肯定会知道,EurekaClient启动流程最后是初始化DiscoveryClient这个类,那么我们就直接从这个类开始分析,后面代码都只截取重要代码,具体大家可以自行参照源码。DiscoveryClient.java@Inject DiscoveryClient(ApplicationInfoManagerapplicationInfoManager,EurekaClientConfigconfig,AbstractDiscoveryClientOptionalArgsargs, Provider<BackupRegistry>backupRegistryPr

  • TCP 协议简介

    来源:阮一峰的网络日志 作者:阮一峰TCP是互联网核心协议之一,本文介绍它的基础知识。一、TCP协议的作用互联网由一整套协议构成。TCP只是其中的一层,有着自己的分工。(图片说明:TCP是以太网协议和IP协议的上层协议,也是应用层协议的下层协议。)最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。(图片说明:以太网协议解决了局域网的点对点通信。)但是,以太网协议不能解决多个局域网如何互通,这由IP协议解决。(图片说明:IP协议可以连接多个局域网。)IP协议定义了一套自己的地址规则,称为IP地址。它实现了路由功能,允许某个局域网的A主机,向另一个局域网的B主机发送消息。(图片说明:路由器就是基于IP协议。局域网之间要靠路由器连接。)路由的原理很简单。市场上所有的路由器,背后都有很多网口,要接入多根网线。路由器内部有一张路由表,规定了A段IP地址走出口一,B段地址走出口二,......通过这套"指路牌",实现了数据包的转发。(图片说明:本机的路由表注明了不同IP目的地(Destination)的数据包,要发送

  • 来自法国|航空遇见大数据

    大数据文摘编译作品,欢迎个人转发朋友圈;其他机构、自媒体转载,务必后台留言,申请授权。翻译|赵真真吴涤宋松波崔楠肖艳红主编|张琳导语:一向以沉稳的高大上形象示人的航空业这次出乎预料的在极短时间内接受了大数据概念,并将数据挖掘分析放在了首要战略位置,不能不令人惊讶。根据通用公司(GE)的统计,2015年航空产业链上61%的企业都将数据采集分析作为技术革新及企业策略制定的基础。要知道在两年前只有12%的航空业企业开始谈及大数据。现在甚至有业内人士总结说大数据正在重塑航空业。都知道大数据是当前最流行的话题,莫非在工业领域一贯扮演霸道总裁的航空业也要赶这个潮流?在航空行业曾经流传着这样的说法:在航空业内人士的眼里,旅客与行李一样都是传送带上会自动上下的货物。这与其说是在轻视客户,不如说航空业善于自嘲。长期以来从飞机制造商到航空公司,即使空乘人员,恐怕并不真正了解自己的客户,更不用说飞机设备供应商和维修商。然而与此同时,航空业是一个浸泡在数据中的行业,始终在数据收集上做得很好,很可惜,曾经的航空业所拥有的大量数据是无组织的,因此这些数据并没有被很好地利用。以上说的是从前,且看如今航空业如何利用大

  • SAP最佳业务实践:MM–组件收费的委外加工(251)-3计划独立需求

    4、流程步骤4.1MD61创建计划独立需求 使用计划独立需求执行需求管理功能。计划独立需求包含一个计划数量和一个日期,或者许多计划独立需求排产行,也就是按照日期对计划数量进行时间划分。角色:生产计划员1.在创建计划独立需求:初始屏幕上,输入以下数据:字段名称用户操作和值注释计划独立需求物料F251-1您必须选择单选按钮工厂1000选择参数版本00计划区间从必要时更改系统默认值。至计划周期W2.输入回车确认您的输入。3.在计划独立需求创建:计划表屏幕,输入特定时间点或特定时期的物料独立需求数量。(例如,为每个时间间隔设置计划数量100)。4.按回车确认。5.选择保存。 4.2MD02物料需求计划物料需求计划的目标是通过及时调整可用能力和收货来满足需求数量。为了达到这样的目标,可以使用物料需求计划或基于消耗的计划。为工厂1000执行了单项,多级需求计划。采购请求和组件需求通过运行MRP自动创建。展开BOM,相关的需求已产生。1.在单项,多层屏幕上,输入如下数据:字段名称用户操作和值注释物料F251-1工厂1000计划范围产品组MRP控制参数处理代码NETCH创建采购申请1采购申请交货计划表

  • 【入门必备】学编程都从事那些行业工作

    说了这么多都是一直在谈如何学习编程,学习java,c/c++等一些基础的东西。可能有些人会问,学了能干什么?学泥瓦工,可以码砖头、学裁缝能做衣服。这个都有明确的方向。那我们学编程能从事那些工作呢?一、互联网最直接的工作就是到一个科技企业做程序员,人家码砖头,我们码代码。目前的互联网行业,那是需要大批的编程人员,把现实中的数据进行转换存储分析。BAT是目前国内比较好的互联网企业,他们的业务都需要大量的编程人员来实习。工资高,福利好,还有优越感。二、传统软件企业何为软件企业首要的是微软,为别人提供软件产品或服务的公司。这些企业最主要的产品就是程序,完成特定的工作。他们大部分都是编程人员,要不然代码谁写,功能谁实现。三、硬件产品行业这个当让也是需要编程人员的,如inter生产出来的cpu等也是需要驱动来完成工作的,他们也需要程序员来完成编码工作。四、手机国内典型的魅族、小米这些开发手机的企业,他们要硬件都是买别人的,系统用的是Android,但是他们生产自己的手机当然也是需要编码人员进行工作的。(小米严格意义上是互联网公司)五、游戏虽然说国内的一些游戏厂商无德专门毒害青少年,但是还是不能一

  • 全球高科技前沿技术排行榜和“冷热”度

    编者按近期,著名投资机构FirstRoundCapital发布了一份《2017创业生态》报告,该报告基于对869名创业公司创始人/企业家的调查。作为其中的一项重要内容,该调研也询问了创业者对于14种技术的看法,看它们是言过其实还是被低估了价值。创业者也可以对各种技术的看法保持“中性”。看穿炒作:哪些领域被明显高估?调研结果表明,创业者认为下面三种技术被明显高估:1.虚拟现实/增强现实(认为被高估的比例:65%)虽然目前仍然只是小众消费,虚拟现实技术已经成为近几年来的“下一个大事件”。创业者认为这项技术被过度炒作并不奇怪。对于像Facebook和MagicLeap这样的公司来说,要扭转人们对VR/AR的看法,需要让消费者更快地使用上这些技术。2.可穿戴设备(认为被高估的比例:64%)当GoogleGlass在2013年首次推出时,充满可穿戴设备的未来似乎是大势所趋。现在,差不多五年之后,可穿戴设备还是没有达到很多企业家所期望的规模。3.聊天机器人(认为被高估的比例:61%)聊天机器人真的会改变客服、医疗健康和其他行业吗?大多数企业家似乎对其潜在影响持怀疑态度。从列表信息来看,不管是虚拟现

  • Entity Framework Core - 管理数据库-迁移和反向工程

    管理数据库架构   EFCore提供了两种保持EFCore模型和数据库模式同步的主要方法。要在两者之间进行选择,请确定您的EF核心模型还是数据库模式是真实的来源。    1、如果您希望您的EF核心模型是真实的来源,那么使用迁移。当您对EF核心模型进行更改时,这种方法将递增地对数据库应用相应的模式更改,以便它与EF核心模型保持兼容。    2、如果您想让数据库模式成为事实的来源,请使用反向工程。这种方法允许您通过反向工程数据库模式到EF核心模型来构建DbContext和实体类型类。      createanddropAPIs 还可以从您的EF核心模型创建数据库模式。但是,它们主要用于测试、原型和其他可以删除数据库的场景。 一、迁移   在现实世界的项目中,数据模型随着功能的实现而变化:添加和删除新的实体或属性,并且需要相应地更改数据库模式以保持与应用程序同步。EFCore中的迁移特性提供了一种增量更新数据库模式的方法,使其与应用程序的数据模型保持同步,同时在数据库中保留现有数据。     迁移的功能如下:   当引入数据

  • Java:关于负数的向上转型

    int的负数n向上转型为long时,应该写成-(long)n,而不是(long)-n。 举例: intn=Integer.MIN_VALUE;//-2147483648 System.out.println(-(long)n);//2147483648 System.out.println((long)-n);//-2147483648复制

  • 你真的了解回流和重绘吗

    回流和重绘可以说是每一个web开发者都经常听到的两个词语,我也不例外,可是一直不是很清楚这两步具体做了什么事情。最近由于部门内部要做分享,所以对其进行了一些研究,看了一些博客和书籍,整理了一些内容并且结合自己的体会,写了这篇文章,希望可以帮助到大家。 浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流重绘,如果大家想直接看如何减少回流和重绘,可以跳到后面。(这个渲染过程来自MDN) 从上面这个图上,我们可以看到,浏览器渲染过程如下: 解析HTML,生成DOM树,解析CSS,生成CSSOM树 将DOM树和CSSOM树结合,生成渲染树(RenderTree) Layout(回流):根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小) Painting(重绘):根据渲染树以及回流得到的几何信息,得到节点的绝对像素 Display:将像素发送给GPU,展示在页面上。(这一步其实还有很多内容,比如会在GPU将多个合成层合并为同一个层,并展示在页面中。而css3硬件加速的原理则是新建合成层,这里我们不展开,之后有机会会写一篇博客) 渲染过程看起来很简单

  • Forward团队-爬虫豆瓣top250项目-项目进度

    项目地址:https://github.com/xyhcq/top250   我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们也乐于边学边做。   我们先分析了豆瓣top250的网页源码,发现都是html的代码,我们将我们需要的每组角标对应的信息都记录了下来,用于后续抓取。 top250中每部电影的网页基本都是这种格式: 1https://movie.douban.com/top250?start=复制 递归增加的,所以我们后续也用得上   现阶段我们将程序的大体框架构建了出来,在打算进一步写的时候,我们发现,我们需要用到一些新知识:正则表达式以及beautifulsoup,然而悲剧的是,我们都不曾学过,所以组员们在最近都在学习正则表达式,幸运的是,老师最近的课上正好给我们讲了Python的正则表达式re模块的用法,解决了我们的一些问题,我们还需要学习beautifulsoup。   我们的程序框架是这样的:   1#-*-coding:utf-8-

  • healthMonitoring与运行状况监视

    配置针对应用程序的运行状况监视的一个服务    配置节内容比以往的较为复杂,如下 <healthMonitoring Enabled="true|false" heartbeatInterval="timeinterval"> <bufferModes>...</bufferModes> <providers>...</providers> <eventMappings>...</eventMappings> <profiles>...</profiles> <rules>...</rules> </healthMonitoring>复制      实际上这是运行状况监视是一个事件定义与处理的模型,简单来看整个运行状况监视基本点有以下三个 1.在eventMappings定义事件 2.在providers定义事件的处理 3.通过rules绑定事件给某个处理程序去处理。 稍

  • windows 文件夹或文件路径太深或名称太长无法删除解决

    在cmd命令行窗口中输入robocopyempty_dirwill_delete_dir/purge empty_dir新建的空白目录 will_delete_dir要删除的目录 注意中间的空格,一次不成功多跑几次

  • python3(三十三)debug

    """调试""" __author__on__='shaozhiqi2019/9/23' #调试程序 #1.print打印,没问题了上线还得删掉 #2.断言、assert #n不等于0则继续执行,否则走断言的处理,Python解释器时可以用-O参数来关闭assert #deffoo(s): #n=int(s) #assertn!=0,'niszero!' #return10/n # # #defmain(): #foo('0') #3.loging日志之,可以打印到日志文件 importlogging logging.basicConfig(level=logging.INFO) s='0' n=int(s) logging.info('n=%d'%n)#INFO:root:n=0 print(10/n) #4.利用idea的debug断电单步调试复制  

  • 第三次作业(2)

      1引言 1.1编写目的 在C语言的教学过程中,不可避免的在同学作业代码之间存在相似的现象,既不利于学生个人能力素质的提高,也严重影响了正常的教学,具有严重的危害性,值得我们去认真思考如何避免或尽量减少此类现象的发生。在考核学生C语言作业时,考核人员的主观性起了很大的作用,而考核的标准也带有模糊性,针对上述问题,改进考核、评审的方法,寻找一个客观的、硬性的、量化的标准,能够比较公正的对学生C语言的学习能力进行评估,进而端正学生的学习态度,提高学生的创新意识和研究能力。 1.2背景 在计算机的教学中,存在不同程度的剽窃他人作业或作品行为,最常见的现象就是在完成上机编程任务或编程训练考核中,被考核者抄袭他人程序代码后,稍作修改甚至不做任何修改便作为自主设计作品并提交,采用人工目测方法很难准确度量这种行为的性质以及程度,尤其在计算机程序设计的上级考核成绩的评价中,对于此类问题除了完全抄袭的行为外,由于在考核过程中存在人为主观性的影响,使得考核标准带有很大的模糊性和不确定性,在一定程度上限制了考核准确性和效率,导致增加考核真实性难度,降低考核成绩的可信度,由此引出需要解决源代码相似

  • 【DLL测试】为DLL项目建立测试

    本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链接库为“JAVA调用动态链接库DLL之JNative学习”中使用的DLL, 只是项目及文件名称不同。     创建动态链接库项目:1、打开MicrosoftVisualStudio2010,选择文件->新建->项目。   2、在新建项目窗口中选择其他语言->VisualC++->Win32。 3、选择Win32项目,设置名称:simpleDLL,设置解决方案名:simpleDLL。4、单击确定,在出现的Win32应用程序向导的概述对话框中点击下一步。 5、在应用程序设置中,选择应用程序类型下的DLL。 6、勾选附加选项下的空项目。7、单击完成创建项目。向动态链接库添加类:1、添加新类头文件。右键单击simpleDLL项目,添加->新建项,选择头文件(.h),设置名称为simpleDLL,单击添加。 2、添加新类源文件。右键单击simpleDLL项目,添加->新建项,选择C++文件(.cpp),设置名称为simpleDLL,单击添加。 3

  • Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能

    1.python3只有input 2.client客户端 server服务器 3.fromsocketimport* 和importsocket有什么区别 importsocket的话要用socket.AF_INET,因为AF_INET这个值在socket的名称空间下。fromsocketimport*是把socket下的所有名字引入当前名称空间。 import导入模块,每次使用模块中的函数都要是定是哪个模块。 from…import*导入模块,每次使用模块中的函数,直接使用函数就可以了;注因为已经知道该函数是那个模块中的了。 4. 国际单位制1KB=1024B; 1MB=1024KB=1024×1024B。 1B(byte,字节du)=8bit(见下文); 1KB(Kilobyte,千字节)=1000B=10^3B; 1MB(Megabyte,兆字节,百万字节,简称“兆”)=1000KB=10^6B; 1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1000MB=10^9B; 1TB(Terabyte,万亿字节,太字节)=1000GB=10^12B;

  • android studio 程序错误

    一.错误类型: com.android.tools.fd.runtime.BootstrapApplicationcannotbecastto 成功修改方式 File-->Settings-->Build,Execution,Deployment-->InstantRun--->去掉勾选 开头为"Enableinstantrun.........." mac下:Androidstudio-->Preferences...-->Build,Execution,Deployment-->InstantRun--->去掉勾选 开头为"Enableinstantrun......"     二.Failure[INSTALL_FAILED_INSUFFICIENT_STORAGE],程序运行没有问题,安装时总出现安装不上错误。 成功修改方式 试试修改一下manifest文件:添加 一句:   android:installLocation="preferExterna

相关推荐

推荐阅读