5 老虞面馆
尚未进行身份认证
暂无相关简介
op出队列之后的代码流程
onode是bluestore中的元数据形式,由于bluestore直接写裸盘,因此需要onode来管理对象。本文就讲讲onode的缓存算法。在bluestore的cache中存在着lru和twoq两种,但是关于onode元数据的cache采用的都是lru算法。1.lru上已有元素在访问到时怎么到队首?这部分得从get_onode讲起,在其中调用了BlueStore::Onod...
ceph中有很多的entry函数,往往是由各线程来调用处理的,本篇文章以bluestore中的MempoolThread为例来讲讲该函数的调用。 struct MempoolThread : public Thread { BlueStore *store; Cond cond; Mutex lock; bool stop = false; public:...
本次来聊一聊isa-l,即ceph的纠删码插件之一。当然这个值曾经默认是jerasure。 关于纠删码的原理其实就像是线性代数中解线性方程组。这部分就不赘述。本次重点关注isa-l中的两个函数。本次主要关心的问题: 在已经知道旧的校验块后和旧的数据块和修改后的数据块后怎么快速得到新的校验块。首先isa-l库是可以独立单独运行的,首先从 https://github.com/ceph/...
上一篇讲到Monitor的tick处理,顺带讲解Monitor对osd report超时的处理 该部分在PGMonitor的tick中调用void Monitor::tick(){ // ok go. dout(11) << "tick" << dendl; ··· //调用paxosservice的tick() for (vector&lt...
刚入职的时候曾经定位过一个ceph集群时钟回调8小时的单子。后来投入到了项目中。 最近同事问我osd向monitor定时report的处理过程,也涉及到了这一块的内容,而且 正式入职答辩的时候,主管问,那这个tick线程是定时调用的吗?当时被问懵了,因为自己并没有深入的前后看到这块。事情总要有头有尾,遗留的问题总要解决,写这篇博客的目的就是回答当时的遗留问题。究竟monitor的这个tick是...
友情链接
友情链接
在一次开发组内讨论中,那次是admin_socket的后台部分的课程分享。分享中同事提出了一个疑问。既然讲了admin_socket的的后台部分,那前端输入命令到底是怎么去调用的后台呢,或者前台的命令到底是怎么发送的呢?平时的ceph命令到底是怎么解析的呢?讨论会后带着这些疑问,看起了ceph代码。在终端敲入了ceph stastus,终端就返回了集群的状态。那在这个过程中,到底是调用了什么。
本篇博客主要分为三个部分 1.概述 2.选举的时机 3.选举的过程1.概述monitor在运行的过程中,必须存在一个leader节点来。众多的更新操作都是由leader节点来完成,写的命令也会经由peon转发到leader节点进行。leader的选择是根据rank值来的,rank值小的为leader,而rank值跟IP地址有关。2.选举的时机在ceph中有大致三处
概述在monitor节点中,存在着Leader和Peon两种角色。在monitor采用了一种lease机制,保证了副本在一定时间内可读写。同时lease机制也保证了整个集群中的monitor当前都是可用状态。Leader节点会向所有的Peon节点定时的发送lease消息,延长各个节点的lease时间,同时收集所有节点的ack消息。只要有一个节点没有回复ack消息。就会重新发起选举。 同理
工作了,以前只停留在pad里的书都想入手。手里有了unix网络编程卷1卷2,最近看ceph源码的过程中,越来越发现需要补充unix环境高级编程的知识。从pad中走向了实体书。中午快递到货,迫不及待的翻开了。第一件事,安装 #include"apue.h"1.官网下载下载传送门2.解压make安装点依赖gcc make啥的 一make,果然报错,人生啊总是要走很
在程序员届有一个鄙视链,用vim的鄙视用IDE的。但是完全没配置的vim实在是太难用了。这里笔者在github上找到了用vim打造IDE环境。 https://github.com/BillWang139967/Vim具体的配置方法不赘述,在项目的readme.md有详细说明。
官方文档http://docs.ceph.com/docs/master/rados/operations/monitoring/具体用法ceph daemon {daemon-name} ceph daemon {path-to-socket-file}ceph daemon osd.0 foo ceph daemon /var/run/ceph/ceph-osd.0.a
传送门#include<iostream>using namespace std;#define MAX_N 100010int main(){ int a[MAX_N]; int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int c
在ceph运行的过程中,可以通过调整日志级别来排查系统异常等。代码文件中经常有dout(10)这样的语句。表示输出到日志,而数字则代表日志级别。日志的设置有debug_osd,debug_mon等。#define dout_subsys ceph_subsys_mon #undef dout_prefix 设置的日志主要看 ceph_subsys_mon的最后一项。日志的级别设置有两种方法。1.
1.集群健康状态ceph health2.集群状态ceph -s3.查看ceph存储空间ceph df4.查看mon状态信息ceph mon stat5.查看mon的选举状态 ceph quorum_status6.查看osd状态ceph osd stat/dump7.查看osd状态和层级ceph osd tree8.查看pg状态ceph pg stat
传送门class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; map<int,int> m; for(int i=0;i<nums.size();i++){ m[nums[i]]=i;
传送门#include<stdio.h>#define MAX_N 110int house[MAX_N];int main(){ int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ scanf("%d",&house[i]); if(house[i]==0)
传送门#include<stdio.h>#include<vector>#include<math.h>#include<stdlib.h>using namespace std;int main(){ int k; vector<int> v; scanf("%d",&k); int n; while(k--){ scanf("%d