0%

查看网卡

1
ip link

修改网卡配置

  • 修改配置文件ifcfg-{网卡名称}
    eg: /etc/sysconfig/network-scripts/ifcfg-eno16777736
1
2
3
4
5
ONBOOT=yes
IPADDR=192.168.1.234
GATEWAY=192.168.1.1
DNS1=202.96.64.68
DNS2=8.8.8.8
  • 修改resolv.conf
    eg: /etc/resolv.conf
    1
    2
    nameserver 202.96.64.68
    nameserver 8.8.8.8

重启network服务

重启network服务

1
service network restart

参考&鸣谢

例子

1
2
3
modprobe rbd
echo "192.168.1.234 name=admin,secret=AQAHzRBX77ORERAAqfW0YAqq8+ETXMqWtPKwkQ== rbd testrbd" > /sys/bus/rbd/add
echo 1 > /sys/bus/rbd/remove

如果你在执行echo时候提示参数错误,请现查看modinfo rbd看看里面的single_major默认值是否为false
eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ modinfo rbd
filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/block/rbd.ko.xz
license: GPL
description: RADOS Block Device (RBD) driver
author: Jeff Garzik <jeff@garzik.org>
author: Yehuda Sadeh <yehuda@hq.newdream.net>
author: Sage Weil <sage@newdream.net>
author: Alex Elder <elder@inktank.com>
rhelversion: 7.4
srcversion: B41E51769EC95E3DBDB16AB
depends: libceph
intree: Y
vermagic: 3.10.0-693.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: DA:18:7D:CA:7D:BE:53:AB:05:BD:13:BD:0C:4E:21:F4:22:B6:A4:9C
sig_hashalgo: sha256
parm: single_major:Use a single major number for all rbd devices (default: false) (bool)

如果single_major默认值为ture,那么在加载rbd模块时,需要将single_major设置成false
eg:

1
modprobe rbd single_major=0

然后在重新执行echo

解释

  • 192.168.1.234 为 Monitor 地址
  • name,制定使用的用户,可通过“ceph auth list” 查看
  • secret,name制定用户所对应的 key 值
  • rbd,制定需要映射的块设备(该快设备必须是已经创建好的)
  • 使用客户端内核必须支持rbd.ko这个内核模块
  • 1, 设备ID,用于去映射

参考&鸣谢

背景

ceph 分布式统一存储

ceph 架构

版本

  • OS版本,RHEL 7.2
  • Ceph版本,Infernalis

安装

  • 使用本地rpm包安装ceph及ceph依赖的软件包
    1
    yum localinstall *.rpm

部署

方案

概述

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
28
29



+------------------------------------------------+
| Client Requests |
+------------------------------------------------+
/\ /\
Admin Ops /||\ /||\
|| ||
ClusterMap || || Data I/O
\||/ \||/
\/ \/
+-----+ +----------------+ +------------------+
| |------>| MON (Active) | <-------> | |
| | +----------------+ | |
| | | |
| | +----------------+ | |
| NTP |------>| MON (Standby) | <-------> | OSDs |
| | +----------------+ | |
| | . | |
| | . | |
| | . | |
| | +----------------+ | |
| |------>| MON (Standby) | <-------> | |
+-----+ +----------------+ +------------------+




ceph集群包括两类节点,mon节点、OSD节点

MON节点

  • MON节点与OSD节点比例为1/4
  • MON节点分布在存储压力较小的主机中
  • 两两节点不能分布在一台主机中
  • MON节点使用万兆网络
  • MON节点通过NTP同步时钟(详细请见参考6)

OSD节点

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



+------+ +-------------+ +-----------+ +-------+ +------------+
| | | |------> | Data | ------> | XFS | ----> | SAS Device |
| | | | +-----------+ +-------+ +------------+
| | | |
| | | OSD1 Daemon |
| One | | | +-----------+ +-------+ +------------+
| | | |------> | Journal | -----+ | | | |
| | +-------------+ +-----------+ | | | | |
| host | +-> | | | |
| | | | XFS | ----> | SSD Device |
| | +-------------+ +-----------+ | | | | |
| | | |------> | Journal | -----+ | | | |
| | | | +-----------+ +-------+ +------------+
| | | |
| | | OSDn Daemon |
| | | | +-----------+ +-------+ +------------+
| | | |------> | Data | ------> | XFS | ----> | SAS Device |
+------+ +-------------+ +-----------+ +-------+ +------------+




  • 一个硬盘对应一个OSD Daemon
  • OSD节点使用万兆网络
  • 数据与日志分开,日志存放在SSD硬盘中
    数据写入先写入日志,再回写入数据,提高日志写入性能,可以提高性能
    详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/osd-config-ref/
  • OSD使用XFS文件系统
    生产环境使用XFS文件系统用于存储数据和日志
    详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/

网络

  • public Network
    采用万兆网,主要负责处理用户I/O请求
  • Cluster Network
    采用万兆网络, 主要负责拷贝数据副本和传递心跳信息

详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/network-config-ref/

方法

环境准备

创建并使用ceph用户

  • 创建ceph专属用户——ceph
    1
    2
    3
    4
    useradd -Um -d /home/ceph ceph
    passwd ceph
    echo "ceph ALL=(ALL) ALL" >> /etc/sudoers
    su - ceph
    1. 创建ceph用户和ceph用户目录
    2. 修改ceph用户密码
    3. 修改ceph用户sudoer列表
    4. 切换ceph用户
  • 使用ceph用户配置环境
    1. 修改主机名称
    2. 修改hosts文件,对应ip地址与主机名
    3. 本地安装ceph rpm包
      1
      sudo yum localinstall *.rpm

SSH无密码访问

  • 各个物理节点之间,建立SSH无密码访问

集群搭建

MON节点搭建步骤
  1. fsid生成
  2. 修改ceph.conf中的MON信息
  3. 创建并倒入admin keyring
  4. 创建MON数据目录
  5. 初始化MON节点
  6. 启动MON服务
OSD节点搭建步骤
  1. 在集群中创建OSD
  2. 创建OSD数据目录
  3. 格式化硬盘文件系统为XFS
  4. 挂载硬盘到数据目录
  5. 初始化OSD节点
  6. 创建OSD访问需要的keyring
  7. 在Crushmap中添加OSD节点
  8. 修改ceph.conf中的OSD息
  9. 启动OSD服务

详细请见:http://docs.ceph.com/docs/jewel/install/manual-deployment/

注意:

  • 按官网配置方式配置ceph集群(确保“/var/lib/ceph/”目录下的owner为ceph用户)
  • 如果集群名称不是默认名称(默认名称为:ceph),需要修改/etc/sysconfig/ceph,增加 CLUSTER=”新集群名称”(详细请见,参考5)
  • 根据集群情况结合本机需要启动的服务,在“/etc/sysconfig/ceph”中增加 MON_ID=”MON的ID” 或 OSD_ID=”OSD的ID”(详细请见,参考5)
  • 修改/etc/fstab,增加需要挂载的磁盘信息
  • 修改systemd中ceph服务为enable,保证开机启动
    1
    2
    3
    4
    systemctl enable ceph-mon@{MON ID}
    systemctl enable ceph-osd@{OSD ID}
    systemctl enable ceph-mon.target
    systemctl enable ceph-osd.target
    大括号中的内容需要根据实际情况填写。

至此基本ceph集群已搭建完成

一个华丽的分割之后开始漫长的优化之路

优化

详细请见:
《OSD节点优化》《Ceph集群OSD节点配置优化》

参考

  1. 打造高性能高可靠块存储系统
  2. Can’t start ceph service
  3. linux命令详解之useradd命令使用方法
  4. systemd:how do I view journals with journalctl without switching to root on CentOS7?
  5. Mail Re:Ceph on Fedora
  6. How to Setup NTP Server on CentOS/RHEL 7/6/5 and Fedora 21/20/19

git配置

配置文件 ”~/.gitconfig“

1
2
3
4
5
6
7
8
9
10
[user]
email = zhoubofsy@hotmail.com
name = zhoubofsy
[alias]
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
[http]
proxy = http://127.0.0.1:8087
sslverify = false
[https]
proxy = http://127.0.0.1:8087

背景

使用”XX-Net-2.9.2“做代理服务端(XX-Net-2.9.2在github上可以找到)

Linux系统配置

1
2
3
4
export http_proxy=http://127.0.0.1:8087
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy

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版本即可