ceph-luminous-版本部署-bluestore

ceph 的 luminous版本里bluestore已经稳定了,这里尝试部署一下使用bluestore

转发:http://www.tang-lei.com/2018/06/15/ceph-luminous-%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2-bluestore/

Bluestore原理说明

对象可以直接存放在裸盘上,不需要任何文件系统接口。
BlueStore 直接使用一个原始分区,ceph对象将直接写在块设备上,不再需要任何的文件系统;
和osd一起进来的元数据将存储在 一个 名为 RocksDB 的键值对 数据库;

各层意义

RocksDB :存储 WAL 日志和元数据(omap)
BlueRocksEnv: 与RocksDB 交互的接口
BlueFS  : 一个类似文件系统的 mini C++,使 rocksdb 生效,ENv 接口(存储 RocksDB 日志和 sst 文件);
因为rocksdb 一般跑在一个文件系统的上层,所以创建了 BlueFS。

RocksDB 存放的数据类型

对象的元数据
write-ahead 日志
ceph omap  数据
allocator metadata(元数据分配器):决定数据存放位置;此功能可插拔

默认BlueStore模型

第一个小分区(XFS或者ext4),包括ceph files 
(init system descriptor,status,id,fsid,keyring 等)和RocksDB 文件
第二个分区是一个原始分区

优点

每一部分都可以存放在不同的磁盘中,RocksDB WAL 和 DB 可以存放在不同的磁盘或者小分区中

查看

 

1

 

# ceph-bluestore-tool show-label --path /var/lib/ceph/osd/ceph-0/

环境说明

在node1、node2、node3上分别有两块磁盘:vdb 和vdc
其中vdb不分区,用于存储osd数据
vdc有一个分区:vdc1,(类似于之前filestore下的日志分区,可以用ssd磁盘), 用于存放block.db

安装流程

系统环境

主机名 IP 部署 系统 磁盘
node1 172.28.7.239 管理、存储、监控 Centos7最小安装 2块(osd、block.db)
node2 172.28.7.240 存储、监控 Centos7最小安装 2块(osd、block.db)
node3 172.28.7.241 存储、监控 Centos7最小安装 2块(osd、block.db)

Centos7系统安装完成执行:
yum update

所有添加Ceph源

vim /etc/yum.repos.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://download.ceph.com/rpm-luminous/el7/$basearch

enabled=1

priority=2

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]

name=Ceph noarch packages

baseurl=http://download.ceph.com/rpm-luminous/el7/noarch

enabled=1

priority=2

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]

name=Ceph source packages

baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS

enabled=0

priority=2

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

 

所有节点安装epel源

 

1

 

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

 

# Kernel pid max

echo 4194303 > /proc/sys/kernel/pid_max

#关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

setenforce 0

##停止firewall 禁止firewall开机启动

systemctl stop firewalld.service

systemctl disable firewalld.service

##关闭自带网络管理

systemctl stop NetworkManager

systemctl disable NetworkManager

##host访问

vim /etc/hosts:

172.28.7.239 node1

172.28.7.240 node2

172.28.7.241 node3

## 安装ntp

yum installl ntp

## 修改启动ntp服务

##注释如下四项,然后选择内部的时钟服务器或者ceph管理节点

server 172.25.0.110

#server 0.centos.pool.ntp.org iburst

#server 1.centos.pool.ntp.org iburst

#server 2.centos.pool.ntp.org iburst

#server 3.centos.pool.ntp.org iburst

##启动

systemctl restart ntpd.service

systemctl enable ntpd.service

## 终端

sudo visudo

找到

Defaults requiretty

选项,把它改为

Defaults:ceph !requiretty

或者直接注释掉

## 其他

yum install vim net-tools

管理节点执行

生成密钥

 

1

2

3

4

5

 

##生成秘钥,免密码登陆

ssh-keygen

ssh-copy-id root@node1

ssh-copy-id root@node2

ssh-copy-id root@node3

安装配置 ceph-deploy

 

1

2

3

4

5

6

7

 

yum install ceph-deploy

vim /usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos/install.py:

def install(…):

adjust_repos = False ##添加该行

创建集群

创建目录

 

1

 

mkdir my_cluster

生成ceph.conf和kering

 

1

2

 

cd my-cluster

ceph-deploy new node1 node2 node3 ##会生成ceph.conf和ceph.mon.keyring

配置ceph.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

25

26

27

28

29

30

31

32

33

34

35

36

37

38

 

cd my-cluster

vim ceph.conf:

[global]

fsid = 2595ba62-8ae1-difg-893a-892a675757c6

mon_initial_members = node01, node02, node03

mon_host = 172.28.7.239,172.28.7.240,172.28.7.241

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

##如果有两块可以连通的网卡,配置public_network和cluster_network,如果是测试环境没有,就不配置

#public_network = 172.28.7.0/22 #管理网络

#cluster_network = 172.28.11.0/22 #集群网络

mon_pg_warn_max_per_osd = 1000

osd_pool_default_size = 3

osd_pool_default_min_size = 2

mon_osd_backfillfull_ratio = 0.75

mon_osd_full_ratio = .85

mon_osd_nearfull_ratio = .70

osd_failsafe_full_ratio = 0.90

osd_deep_scrub_randomize_ratio = 0.01

[mgr]

mgr modules = dashboard

[osd]

osd_max_write_size = 1024

osd_recovery_op_priority = 1

osd_recovery_max_active = 1

osd_recovery_max_single_start = 1

osd_recovery_max_chunk = 1048576

osd_recovery_threads = 1

osd_max_backfills = 1

osd_scrub_begin_hour = 22

osd_scrub_end_hour = 7

osd_recovery_sleep = 0

osd_crush_update_on_start = false ##如果初始化的时候,把该值设置为true,然后重启所有osd。不然创建完pool会提示:100.000% pgs unknown100.000% pgs unknown。所有osd都加入,集群ok后,再统一把该值设置为false, 然后重启所有osd

注意:只要新创建了pool, 所有osd 设置:osd_crush_update_on_start = true 才会进行调整

安装ceph

 

1

 

ceph-deploy install node1 node2 node3

集群初始化

 

1

2

3

4

5

6

7

 

cd my-cluster

##如果给mon 单独一块磁盘存储数据,这里需要把每个mon节点的磁盘mount 到/var/lib/ceph/mon/

## mount /dev/sdj1 /var/lib/ceph/mon/

#然后再执行:

#ceph-deploy mon create node1 node2 node3

ceph-deploy mon create-initial # 会生成ceph.bootstrap-osd.keyring、ceph.client.admin.keyring等认证文件

拷贝管理文件

根据实际情况,拷贝管理文件到设定的管理节点

 

1

 

ceph-deploy admin node1 node2 node3

 

统一节点上ceph.conf文件命令:

 

1

 

# ceph-deploy config push node node node3

 

添加osd

由于Luminous里默认使用Bluestore,可以直接操作裸盘,data和block-db会使用lv。综合成本及性能,我们把block.db使用ssd的分区,osd仍然使用sas,block.wal不指定. 这里vdb作为osd盘,vdc作为block-db盘

 

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

 

首先ssh到各个存储节点,block.db使用的ssd分区,这里node1举例:

# ssh node1

# pvcreate /dev/vdb # 创建pv, 这里使用的整块磁盘(与后面的分区对比), pvs 查看pv列表

Physical volume "/dev/vdb" successfully created.

# vgcreate data_vg1 /dev/vdb # 创建vg, vgs查看vg列表

Volume group "data_vg1" successfully created

# lvcreate -n data_lv1 -L 1020.00m data_vg1 #创建lv,lvs查看lv列表, -n指定lv名称, -L指定lv的大小,需要小于或者等于vg的VSize

Logical volume "data_lv1" created.

---------------------------------------------

生产环境一块ssd磁盘会对应多块osd,所以这里也需要把ssd多个分区

# parted /dev/vdc

(parted) mklabel gpt

(parted) mkpart primary 0% 25% #因为测试,这里只做了一个占据磁盘25%容量的分区,实际情况根据osd数目划分相应的分区数

(parted) quit

# pvcreate /dev/vdc1 # 创建pv, 这里使用的是磁盘分区, pvs 查看pv列表

Physical volume "/dev/vdc1" successfully created.

# vgcreate block_db_vg1 /dev/vdc1 # 创建vg, vgs查看vg列表

Volume group "block_db_vg1" successfully created

# lvcreate -n block_db_lv1 -L 1020.00m block_db_vg1 # 创建lv, lvs查看lv列表, -L指定lv的大小,需要小于或者等于 vg的VSize

Logical volume "block_db_lv1" created.

---------------------------------------------

# 不需要加--bluestore 参数,默认就是使用bluestore方式,data_vg1/data_lv1 是数据盘,block_db_vg1/block_db_lv1是block-db

管理节点执行:

ceph-deploy --overwrite-conf osd create node1 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1

ceph-deploy --overwrite-conf osd create node2 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1

ceph-deploy --overwrite-conf osd create node3 --data data_vg1/data_lv1 --block-db block_db_vg1/block_db_lv1

 

配置dashboard

使用node1(172.28.7.239) 作为dashboard, 登陆到172.28.7.239执行:

 

1

2

 

ceph config-key put mgr/dashboard/server_addr 172.28.7.239

ceph config-key put mgr/dashboard/server_port 7000

 

创建mgr

 

1

2

3

 

ceph-deploy mgr create node1:node1-mgr node2:node2-mgr node3:node3-mgr

## 登陆到管理节点启动dashboard

ceph mgr module enable dashboard

netstat -tunlp|grep 7000
systemctl restart ceph-mgr@node1

访问dashboard

http://172.28.7.239:7000

清除安装

有时候我们安装错误,可以执行清理操作:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

 

# 管理节点执行:

ceph-deploy purge node1

ceph-dpeloy purgedata node1

## ssh到node1

ssh node1

vgs ## 获取vg信息

vgremove VG ##删除上面获取的vg ##如果不执行该步骤,则该磁盘无法再次被使用

pvs ##查看pv信息

pvremove PV ##删除pv

parted /dev/vdc

rm 1 ##删除之前block.db的分区

quit

 

简单性能测试

 

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

30

31

32

33

34

 

#创建测试池mytest

ceph osd pool create mytest 128

rados lspools

# ceph osd pool set mytest size 2 #副本为2

# ceph osd pool delete mytest #删除

#Rados性能测试(关注 bandwidth带宽,latency延迟)

rados bench -p mytest 10 write --no-cleanup #写测试10秒

rados bench -p mytest 10 seq #顺序读

rados bench -p mytest 10 rand #随机读

rados -p mytest cleanup #清理测试数据

#rbd块设备测试

rbd create --size 2G mytest/test1 #创建块设备映像test1

rbd ls mytest

rbd info mytest/test1

rbd map mytest/test1 #映射块设备

#/dev/rbd0

#rbd showmapped #查看已映射块设备

#挂载

mkfs.xfs /dev/rbd0

mkdir -p /mnt/ceph

mount /dev/rbd0 /mnt/ceph/

df -h /mnt/ceph

#测试

rbd bench-write mytest/test1

#默认参数io 4k,线程数16,总写入1024M, seq顺序写

rbd unmap mytest/test1 #取消块设备映射

rbd rm mytest/test1 #删除块设备映像

你可能感兴趣的:(ceph存储)