0%

tmux 配置如下(~/.tmux.conf):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 状态栏

# 颜色
set -g status-bg black
set -g status-fg white

# 对齐
set-option -g status-justify centre

# 左下角
set-option -g status-left '#[bg=black,fg=green][#[fg=cyan]#S#[fg=green]]'
set-option -g status-left-length 20

# 窗口列表
set -g automatic-rename on
set-window-option -g window-status-format '#[dim]#I:#[default]#W#[fg=grey,dim]'
set-window-option -g window-status-current-format '#[fg=cyan,bold]#I:#W#[fg=blue]'

# 右下角
set -g status-right '#[fg=green][#[fg=cyan]%Y-%m-%d#[fg=green]]'

# 复制模式
set-window-option -g utf8 on
set-window-option -g mode-keys vi

Client PKGs

RHEL从7.1版本(包含7.1)将libceph.ko、ceph.ko、rbd.ko纳入到kernel中,所以如果选择7.1之前的版本需要自己编译相关ko文件

Cluster PKGs

步骤:

更换yum

  1. 卸载RHEL yum包
    1
    2
    rpm -qa | grep yum | xargs -e --nodeps
    rpm -qa | grep python-iniparse | xargs -e --nodeps
  2. 安装CentOS yum包
    下载yum包
    1
    2
    3
    4
    wget http://mirrors.163.com/centos/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm
    wget http://mirrors.163.com/centos/7.2.1511/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
    wget http://mirrors.163.com/centos/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
    wget http://mirrors.163.com/centos/7.2.1511/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
    安装yum包
    1
    rpm -ivh *.rpm

修改repo

在“/etc/yum.repo.d/”目录下,增加文件rhel7.repo,内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/7.2.1511/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.2.1511/os/x86_64/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.163.com/centos/7.2.1511/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.2.1511/os/x86_64/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.163.com/centos/7.2.1511/extras//$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.2.1511/os/x86_64/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.163.com/centos/7.2.1511/centosplus//$basearch/
gpgcheck=1
enabled=0k

在“/etc/yum.repo.d/”目录下,增加文件ceph.repo,内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[ceph]
name=Ceph packages for $basearch
baseurl=http://ceph.com/rpm-infernalis/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://ceph.com/rpm-infernalis/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://ceph.com/rpm-infernalis/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc

使用downloadonly下载安装包

1
2
3
yum install --downloadonly ceph-common --downloaddir=./
yum install --downloadonly ceph --downloaddir=./
yum install --downloadonly snappy leveldb gdisk python-argparse gperftools-libs --downloaddir=./

详细见《yum和rpm使用方法》

安装已下载的rpm包

进入rpm包所在目录

1
yum localinstall *.rpm

参考&鸣谢


yum


安装

1
yum install {软件名称}

查询

1
yum search {关键字s}

下载(不安装)

1
yum install --downloadonly {需要下载的软件名,可多个} --downloaddir={下载位置,目录名}

按依赖关系安装本地rpm包

1
yum localinstall *.rpm

查看包版本

1
yum list {安装包名称} --showduplicates

安装指定版本的rpm包

1
yum install {安装包名称}-<VERSION_STRING>

eg: yum install ceph-13.2.6-0.el7

rpm


  • 每个rpm包上记录着它所依赖的rpm包

安装

1
rpm -ivh {xxx.rpm}

卸载

1
rpm -e --nodeps {软件名称}
  • 卸载软件包,但不卸载依赖包

解压

1
rpm2cpio {xxx.rpm} | cpio -div

查看包依赖关系

1
rpm -qpR {软件名称}

参考&鸣谢


背景介绍

ceph 版本分类包括“开发版”、“稳定版(Stable)”、“长期支持版(LTS)”;

  • 开发版,增加修改功能而产生的版本
  • 稳定版本,短期维护的版本,周期不固定
  • 长期支持版本,长期维护的版本,周期为10个月左右(或更长)

以下列出稳定版和长期支持版本及对应的版本号:

版本名称 分类 版本号
argonaut Stable v0.48 ~ v0.48.3
bobtail Stable v0.56 ~ v0.56.7
Cuttlefish Stable v0.61 ~ v0.61.9
Dumpling LTS v0.67 ~ v0.67.12
Emperor Stable v0.72 ~ v0.72.3
Firefly LTS v0.80 ~ v0.80.11
Giant Stable v0.87 ~ v0.87.2
Hammer LTS v0.94 ~ v0.94.6
Infernalis Stable v9.2.0 ~ v9.2.1
Jewel Stable or LTS v10.2.0(未发布)

稳定性&功能完整性

  • ceph 的“Stable版”和“LTS版”稳定性相对可靠,但LTS版本由社区维护更新,稳定性更佳;
  • ceph 的功能在开发版中开发,然后合并到稳定版中维护修改bug,新版本涵盖旧版本功能;
  • ceph 只有一条产品路线,所以各个版本中发现的bug,最终都会合并到主线版本上,导致在Stable(或LTS)版本中发现的问题,会在下一个Stable(或LTS)版本中得到修复;

综上所述,可供选择的版本有Hammer 、 Infernalis 和 Jewel

性能最优

  • BlueStore 提供更优的后端存储性能
    Hammer及以前版本后端存储采用的是XFS文件系统,这样延长了数据落盘的路径;
    在Jewel版本中ceph增加了一种存储方式BlueStore,BlueStore可以直接在裸设备上进行读写操作,缩短落盘路径,性能更优;
  • 纠删码(EC)性能优化
    ceph 对数据保护采用的是多副本(三副本)的方式,这种方式简单稳定性能好,但存储成本较贵,由此ceph推出了EC,但其EC性能较差,只能配合cache tier使用,才能发挥功效;
    为此在 Infernalis 及以后版本中对EC性能和稳定性进行了优化;

环境依赖

ceph的运行平台众多,包括:CentOS(RHEL)、Debian、Ubuntu、Fedora

CentOS(RHEL)

  • Hammer 及以前版本对应平台 CentOS 6
  • Infernalis 及以后版本对应平台 CentOS 7 或更高版本

Stable & LTS时效性

Hammer Infernalis
启始日期 2015.04 2015.11
终止日期 2016.11 2016.06

结论

  1. ceph 建议采用 Infernalis 版本(若实施前Jewel Stable or LTS版本发出,可直接选择Jewel)
  2. OS 建议采用 CentOS 7

原因:

  • 从稳定性和功能完整性角度来说,目前可以选择Hammer或者Infernalis
  • 从性能最优角度说,最理想的选择是Jewel
  • 考虑到日后升级维护,Infernalis的下一个LTS版本(可能是Jewel)会是最好的选择
  • 若选择Hammer,日后想升级到Jewel,需要先升级OS,然后再升级ceph版本,改动太大,风险不可控制
  • 若选择Infernalis,日后升级,可直接升级ceph版本即可

启动流程

  1. BIOS读取MBR(Master Boot record)
  2. MBR引导Bootloader(NTLOADER or GRUB or LILO…)
  3. Bootloader加载kernel
  4. init进程初始化

MBR结构

  • MBR只有512字节大小,存储在硬盘的0道0面1扇区
  • 引导代码(BootCode),446 bytes
  • 分区表(Partition table),64 bytes
  • Magic Number(55AA),2 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
     -+-  +-------------------+
| | |
| | |
| | |
| | |
446 B | | Boot Code |
| | |
| | |
| | |
| | |
-+- +-------------------+
| | | +-------------------------+
64 B | | Partition | | Partition 1 |
| | Table | ---------> +-------------------------+
| | | | Partition 2 |
-+- +-------------------+ +-------------------------+
| | | | Partition 3 |
2 B | | Magic Number | +-------------------------+
| | | | Partition 4 |
-+- +-------------------+ +-------------------------+
|
|
v

+----------------+-----------+----------------+---------+-----------+------+
| Partition flag | Start CHS | Partition byte | End CHS | Start LBA | Size |
+----------------+-----------+----------------+---------+-----------+------+

参考文献

下载

1
git clone git@github.com:zhoubofsy/DrawIt.git

安装

将解压后的”autoload”,”doc”,”plugin”文件复制到~/.vim目录下

使用

启动&退出DrawIt

1
2
\di     ;启动
\ds ;关闭

画图

在vim的visual block(可视块)模式下(ctrl+v),画矩形框、椭圆

1
2
\b      ;矩形框
\e ;椭圆

箭头

1
2
3
4
^       ;上箭头
v ;下箭头
> ;右箭头
< ;左箭头

斜线

PgUp 右上斜线
PgDn 右下斜线
End 左下斜线
Home 左上斜线

注: “\” 为 vim 中的 leader

vim 配置

1
git clone https://github.com/gmarik/vundle.vim.git ~/.vim/bundle/vundle

vimrc 配置文件

git log 一般操作

1
2
3
4
git log         查看全部提交日志
git log -2 查看最近2次的提交日志
git log -p 查看历史记录以来那些行被修改
git log --stat --summary 查看每个版本变动的档案和行数

如果你厌倦了黑呼呼的界面,下面让你的git log色彩更丰富一些:

1
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

如果觉得觉得这么长的命令不好记,那么设个“别名”吧:

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

ThreadPool

  • 轮询处理
  • 定时触发

WorkQueue

  • FIFO机制
  • 提供process方法供TP调用

ThreadPool & WorkQueue

  • TP与WQ对应关系1:N
  • TP将便利WQs中的每个WQ的工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   WorkQueue 1                       WorkQueue 2      ......          WorkQueue N

+---------+ +---------+ +---------+
| process | | process | | process |
+-----------+---------+ +--------------+---------+ +---------------+---------+
| | | | | |
| work 1 | --+ +------- | | | |
| | | | | | | |
+-----------+ | | +--------------+ +---------------+
| | | | | | | |
| work 2 | --+-+ | +--- | | ...... | |
| | | | | | | | | |
+-----------+ | | | | +--------------+ +---------------+
| | | | | | | | | |
| work 3 | --+-+-+ | | +- | | | |
| | | | | | | | | | | |
+-----------+ | | | | | | +--------------+ +---------------+
+-------------+ | | | | |
| +--------+ | | | +-----+
| | +----+ | | |
v v v v v v
+------+------+------+------+------+------+-----+-----+-----+----+-----+------+-----+----+-----+
| | | | | | | | | | | | |
| T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10| T11 | ...... | ThreadPool
| | | | | | | | | | | | |
+------+------+------+------+------+------+-----+-----+-----+----+-----+------+-----+----+-----+

introduce

基本情况

bob | 男 | 汉族 | 辽宁沈阳人 | 本科学历

教育情况

2003/09 ~ 2007/07 | 沈阳大学 | 计算机科学与技术 | 本科

简介

本人拥有多年的软件开发经验,特别是在分布式存储和云计算领域。精通C/C++和Golang编程语言,熟悉Python和Shell脚本,并且对Linux操作系统及其内核有深入了解。曾在多家知名企业担任资深开发工程师和架构师,主导并参与了多个重要的云平台和存储系统项目开发,包括Ceph分布式存储系统的深度开发与性能优化、云数据库的设计与实施,以及多云平台的架构设计

技能情况

  • 掌握多种开发语言及脚本,精通C/C++、golang,熟悉Python、Shell
  • 能熟练使用ubuntu、debian、centos、archlinux操作系统,熟悉linux内核
  • 熟悉分布式存储Ceph
  • 熟悉容器技术docker,及其原理

Detail: https://zhoubofsy.github.io

联系方式

Email:zhoubofsy@hotmail.com
电话:***********

工作项目经历

2020/12 – Now

建信金科

职位 : 资深开发工程师
工作描述

  • 负责CFS文件存储功能设计开发、运维等工作
  • 负责TCE(腾讯云存储)代码编译及分析
  • 负责MultiCloud平台相关Provider开发(代码请见:iaas-api-server
  • 负责MultiCloud平台需要的vsphere SDK开发(vsphere-go-sdk
  • 负责Ceph部署及开发

2019/09 – 2020/12

北京网众共创科技有限公司

职位 : 资深云平台开发工程师
工作描述

2019/04 – 2019/08

海南易建科技股份有限公司

职位 : 架构师
工作描述

2016/03 – 2018/05

海南易建科技股份有限公司

职位 : 架构师
工作描述

项目

易建IAAS云平台

项目介绍
云平台是以云计算平台为核心,集成多种优质云产品,致力为用户提供一体化云服务,打造多云产品集成、跨数据中心管理的企业级综合平台,平台应用开源云平台架构,基于Xen\VMWare虚拟化技术,保障了云平台的高可用性,云管理平台提供数据中心管理、集群管理、宿主机管理、存储管理、网络管理、模板管理、快照管理等资源管理功能。整合优质资源用户提供云服务器、负载均衡、弹性伸缩服务、云盘、数据备份、云监控、资源扩展等多种优质云服务。云平台提供VLAN、GRE网络隔离技术,主备部署模式等,保证了平台的高安全性和高可靠性。
责任描述 :

  1. 分布式存储Ceph方案设计
  2. 分布式存储Ceph可靠性调优,及性能优化
  3. 分布式存储Ceph RBD与XenServer集成

云数据库

项目介绍 :
以MariaDB为依托,将一个现有的数据库优化到云环境中,可以使用户按照存储容量和带宽的需求使用,可以将数据库从一个地方移到另一个地方,可实现按需扩展和高可用性。用户能够在RDS控制台轻松的完成数据库申请和创建,RDS实例在几分钟内就可以准备就绪并投入使用。用户通过RDS提供的功能完善的控制台,对所有实例进行统一管理。RDS具有故障自动单点切换、数据库自动备份等功能,保证RDS实例高可用和数据安全。RDS支付的费用远低于自建数据库所需的成本,用户可以根据自己的需求选择不同套餐,使用很低的价格得到一整套专业的数据库支持服务。

责任描述 :

  1. 云数据库技术调研
  2. 云数据库架构设计
  3. 云数据库后台架构代码编写

2014/05 – 2016/03

东网科技有限公司

职位 : 云计算存储高级软件工程师
工作描述 :

  • 负责分布式存储(Ceph)方案调研及制定;
  • 负责分布式存储 Ceph 二次开发及深度定制;

项目

东网云平台

项目介绍 :
东网云平台,是一种混合云平台,依托KVM虚拟化技术,在OpenStack基础上构建而成,为客户提供IAAS服务和存储服务

责任描述 :

  1. 为openstack提供快设备
  2. 提供对象存储服务(radosgw)
  3. ceph部署方案设计
  4. ceph可靠性调优,性能优化
  5. radosgw对象存储接口开发
  6. librados代码分析
  7. cursh代码分析

2012/07 – 2014/04

浪潮(北京)电子信息产业有限公司

职位 : 高级软件工程师
工作描述 :

  • 负责linux、solaris平台下存储虚拟化程序设计、编码工作

项目

AS1200双控制器存储虚拟化

项目介绍 :
AS1200存储系统,具备NAS、IPSAN、FCSAN功能,提供多级数据保护功能,解决数据存取和业务持续运行问题。支持本地持续数据保护、异地容灾功能,兼备高可靠、高性能、多功能等特性。

时间 : 2012/07 – 2013/06
系统 : linux, Solaris(Openindiana)
工具 : VIM, GDB, GCC

责任描述 :

  1. livestor的设计及编码工作;
  2. solaris(Openindiana) devfs(设备文件系统)原理调研;
  3. solaris(Openindiana) devfsadm 命令原理调研;
  4. solaris(Openindiana) 内核Bug调查及修改;

高可用集群系统

项目介绍 :
高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。

时间 : 2012/07 – 2014/04
系统 : linux、windows2000、windows2003、windows2008、windows2012
工具 : vc6、vs2005、vs2010、vs2012、wdk7、wdk8、gcc、gdb、vim
责任描述 :

  1. LRM(Local Resources Manage)本地资源模块设计编码
  2. HB 心跳模块设计编码
  3. HaDsk磁盘过滤驱动设计编码(windows版)

2010/08 – 2012/04

北京聚利科技有限公司

职位 : 高级软件工程师
工作描述

  • 负责产品需求分析、架构设计、模块设计、编码工作

项目

北京出租车新地标车载信息系统——中控

项目介绍 :
为中控应用程序提供硬件支持

  1. SPI转发串口数据
  2. GPRS连接网络
  3. 应用程序自启动
  4. GPIO控制
  5. 自断电控制
  6. RTC同步

时间 : 2011/08 – 2012/04
系统 :WinCE6.0
硬件 :SirfA4(ARM)
工具 : PlatformBuilder6.0 , VS2005
责任描述 :

  1. 需求分析
  2. 整体架构设计
  3. SPI转发串口数据模块设计、编码及测试
  4. 应用程序自启动模块设计、编码及测试
  5. GPIO控制模块设计、编码及测试
  6. 自断电控制模块设计、编码及测试
  7. wince内核定制

北京出租车新地标车载信息系统——计价器(TXN-13)

项目介绍 :
为出租车司机提供计价、娱乐、电话、导航、召调车等服务

  1. 计价功能
  2. 娱乐功能(音频文件和视频文件的播放)
  3. 实现中心调车、召车、打电话、导航、等辅助功能

时间 : 2010/08 – 2012/04
系统 : wince6.0、windows xp
硬件 :SirfA4 , x86
工具 : vs2005
责任描述 :

  1. 需求分析
  2. 整体架构设计
  3. 计价模块设计、编码及测试
  4. 多媒体模块设计、编码及测试
  5. 出租车多功能业务模块设计、编码及测试

2007/10 – 2010/04

沈阳美行科技有限公司

职位 : 软件工程师
工作描述 :

  • 负责模块设计,编码,测试等相关工作

项目

道道通导航系统

项目介绍 :
道福特蒙迪欧车载导航系统、道通导航系统,为客户提供,地图浏览、数据检索、卫星定位、路线引导、语音提示、路线计算、实时路况等服务

时间 : 2007/05 – 2010/03
系统 : Windows CE、windows xp
硬件 : MIPS、ARM、x86
工具 : vs2005
责任描述 :

  1. 地图描画数据制作模块的设计、编码、测试
  2. UI部分画页的设计、编码、测试
  3. 用户数据备份与恢复模块的设计、编码、测试
  4. 地图描画数据制作模块的设计、编码、测试