首页 > 技术文章 > openstack后端部署ceph分布式存储

southtianmen 2019-06-16 16:14 原文

openstack部署ceph集群(基于centos7.4)

1.安装ceph的yum源
echo "[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-luminous/el7/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc" > \
/etc/yum.repos.d/ceph.repo

midr ceph_12.2.12; cd ceph_12.2.12
yum -y install ceph ceph-deploy --downloadonly --downloaddir=./


2.创建ceph集群
yum -y install ceph-deploy
mkdir ceph_cluster
cd ceph_cluster
ceph-deploy new vs-compute1 vs-compute2 vs-compute3 \
--public-network 10.209.4.0/24 --cluster-network 10.209.5.0/24
sed -i 's/cephx/none/g' ceph.conf # 对接openstack更方便

# 复制mon的key到/var/lib/ceph/mon/ceph-$(hostname)/下
cp /root/ceph_cluster/ceph.mon.keyring \
/var/lib/ceph/mon/ceph-vs-controller/keyring
ceph-deploy admin vs-compute1 vs-compute2 vs-compute3
ceph-deploy mon create-initial

# 复制osd的key到/var/lib/ceph/bootstrap-osd/下
cp /root/ceph_cluster/ceph.bootstrap-osd.keyring \ 
/var/lib/ceph/bootstrap-osd/ceph.keyring

ceph-deploy mgr create vs-compute1 vs-compute2 vs-compute3

3.创建osd
for host in vs-compute{1..13}
do echo init $host
ssh $host "for i in /dev/sd{b..g}; do ceph-volume lvm prepare --data \$i ; done "
ssh $host " ceph-volume lvm activate --all "; 
done


详细解析:
BLUESTORE:
创建OSD【创建过程可以分为两个阶段(准备和激活)】:
①准备OSD
ceph-volume lvm prepare --data {data-path} {data-path}
例如:ceph-volume lvm prepare --data /dev/hdd1
②激活OSD
# 查看创建好的lvm,获取OSD的ID和FSID
ceph-volume lvm list
# 激活OSD
ceph-volume lvm activate {ID} {FSID}
例如:ceph-volume lvm activate 0 a7f64266-0894-4f1e-a635-d0aeaca0e993
或者:ceph-volume lvm activate --all

  4.创建存储池:
Ceph集群中的PG总数:
PG总数 = (OSD总数 * 100) / 最大副本数
** 结果必须舍入到最接近的2的N次方幂的值。
Ceph集群中每个pool中的PG总数:
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数
ceph osd pool create pool-hdd 4096 4096 

5.容量均衡
ceph balancer mode upmap
ceph balancer on
ceph balancer optimize upmap pool-hdd
ceph balancer eval pool-hdd

6.开启dashboard
ceph mgr module enable dashboard
http://10.209.2.13:7000/


查询命令
# 查询存储池副本数
ceph osd pool get data size

# 设置存储池副本数
ceph osd pool set data size 3

# 打印存储池列表
ceph osd lspools

# 获取pool pg_num/pgp_num
ceph osd pool get amizPool pg_num
ceph osd pool get amizPool pgp_num

# 设置pool pg_num/pgp_num
ceph osd pool set amizPool pg_num 128
ceph osd pool set amizPool pgp_num 128

# 等同于首次创建
ceph osd pool create {pool-name} {pg_num} {pgp_num}


PS:如果是单台机器做ceph分布式存储,需要注意以下操作
ceph osd pool ls detail
ceph osd pool get pool-hdd size
ceph osd pool set {pool-name} min_size 1
在ceph中,它的全名叫做osd_pool_default_min_size,这里大家就会问了,不是还活着一个呢吗,为什么就不能读取内容了,因为我们设置的min_size=2,在ceph中的意义就是,如果存活数少于2了,比如这里的1 ,那么ceph就不会响应外部的IO请求。因为min_size=1时,只要集群里面有一份副本活着,那就可以响应外部的IO请求。

# 查看osd状态树
ceph osd tree

# 如果分布式ceph存储集群只有一个节点(不推荐,默认为三节点),需要执行以下操作
ceph osd pool set {pool-name} size 1
ceph osd pool application enable {pool-name} rbd --yes-i-really-mean-it

通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:
若少于5个OSD, 设置pg_num为128。
5~10个OSD,设置pg_num为512。
10~50个OSD,设置pg_num为4096。
超过50个OSD,可以参考pgcalc计算

 

推荐阅读