ceph分布式存储

ceph基础介绍

ceph 是一个可靠地,自动均衡、自动恢复的分布式存储系统,根据使用场景可以划分为对象存储

块存储和文件系统服务

ceph的核心组件

ceph OSDs

基本功能:

存储数据、复制数据、平衡数据、恢复数据等,与其他 osd 间进行心跳检查等,并将变化上报给 ceph Monitor ,一般情况一块磁盘对应一个 OSD ,由 OSD 管理磁盘,或者一个分区也可以成为一个 OSD。

关联概念:Journal盘

一般写数据到 ceph 集群时,都会先将数据写到 Journal 盘,然后每隔一段时间将 Journal 盘的数据刷新到文件系统中,一般为了读写延迟小,会采用 SSD 硬盘,分配 10G ,ceph 引用 Journa 盘可以让 ceph OSD 功能很快做小的操作;一个随机写入在一个连续类型的 Journal ,然后刷新到文件系统,这样可以给文件系统足够时间来合并写入磁盘。可以很有效的缓冲突发负载。

ceph Monitor

基本概念

全称ceph metadata server,主要保存文件系统服务的元数据,但对象存储和块存储是不需要这个服务的

ceph基础命令整理

#查看已经创建的磁盘
 rbd ls -l 
#查看ceph集群 
 ceph osd tree
#查看ceph授权信息
ceph auth get client.admin
#清除磁盘上的逻辑卷
 /usr/sbin/ceph-volume lvm zap --destroy /dev/vdc
#手动创建一个rbd磁盘
rbd create --image-feature layering [rbd-name] -s 10240
#移除monitor节点
 ceph-deploy mon destroy node4
#详细列出集群每块磁盘的使用情况
    ceph osd df
#检查 MDS 状态:
ceph mds stat

ceph集群构建

 cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0 
EOF

[root@master ~]# cat /etc/hosts
192.168.33.111 master
192.168.33.112 node1
192.168.33.113 node2
[root@master ~]# ssh-keygen 
[root@master ~]# ssh-copy-id node1
[root@master ~]# ssh-copy-id node2

同步时间 时区: 
/1 * * * /usr/sbin/ntpdate -s time.pool.aliyun.com 
timedatectl list-timezones # 列出所有时区 
timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海 
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#机器初始化设置
sed -i  's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
systemctl restart sshd
yum -y remove firewalld
setenforce 0


#相关下载
rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum -y install epel-release yum-plugin-priorities yum-utils ntpdate
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

#在每台机器上部署ceph,之前yum,已经安装过了
ceph-deploy install --release luminous master node1 node2   #同上

部署

mkdir ceph-deploy &&  cd ceph-deploy

#初始化ceph集群,配置文件相关
ceph-deploy new master node1 node2  

#添加到 ceph.conf
public network = 10.0.4.0/26 #地址相等于node的ip地址段

#初始化mon
ceph-deploy mon create-initial 
or
ceph-deploy mon create master node1 node2
#赋予各个节点使用命令面用户名权限
#指定机器为admin权限
ceph-deploy admin master node1 node2  
#目的可以执行
ceph -s

#部署mgr
ceph-deploy mgr create master node1 node2

#添加osd
ceph-deploy osd create --data /dev/sdb master 
ceph-deploy osd create --data /dev/sdb node1 
ceph-deploy osd create --data /dev/sdb node2

#创建管理域密钥
ceph auth get-or-create mgr.master mon 'allow profile mgr' osd 'allow *' mds 'allow *'
#方法2:
ceph auth get-key client.admin | base64

#开启 ceph-mgr 管理域
ceph-mgr -i master
#开启dashboard
ceph mgr module enable dashboard

#绑定开启 dashboard 模块的 ceph-mgr 节点的 ip 地址
ceph config-key set mgr/dashboard/master/server_addr 192.168.33.111 
dashboard 默认运行在7000端口

#创建pool
#若少于5个OSD, 设置pg_num为128。
#5~10个OSD,设置pg_num为512。
#10~50个OSD,设置pg_num为4096。
#超过50个OSD,可以参考pgcalc计算。
ceph osd pool create rbd 128 128 
rbd pool init rbd

#删除pool
ceph osd pool rm rbd rbd –yes-i-really-really-mean-it 
ceph.conf 添加 
mon_allow_pool_delete = true

#推送配置文件:
ceph-deploy --overwrite-conf config push master 
ceph-deploy --overwrite-conf config push node1 
ceph-deploy --overwrite-conf config push node2

添加删除OSD节点

#添加osd节点node4:
#在节点node4上面安装ceph,并复制ceph.conf到其相应的位置,同时在/etc/hosts中添加node4节点
#确保node1上有充足的空间进行写数据,执行下面的写命令的同时扩展集群
dd if=/dev/zero of=/mnt/ceph-vol1/file1 count=10240 bs=1M #node1节点
ceph-deploy disk zap ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd #node4节点
ceph-deploy osd create ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd  #node4节点
watch ceph status  #动态打印ceph的状态
#在node4硬盘添加完成,集群会恢复健康

删除OSD节点的node4

#查看节点node4上的所有osd,比如osd.9 osd.10:
ceph osd tree #查看目前cluster状态
#把node4上的所欲osd踢出集群:(node1节点上执行)
ceph osd out osd.9
ceph osd out osd.10
#让node4上的所有osd停止工作:(node4上执行)
service ceph stop osd.9
service ceph stop osd.10
#查看node4上osd的状态是否为down,权重为0
ceph osd tree
#移除node4上的所有osd:
ceph osd crush remove osd.9
ceph osd crush remove osd.10
#删除节点node4:
ceph osd crush remove ceph-node4

替换一个失效的磁盘驱动

#首先ceph osd tree 查看down掉的osd,将因磁盘问题down掉的osd及相关key删除
ceph osd out osd.0       #都在node1节点下执行
ceph osd crush rm osd.0
ceph auth del osd.0
ceph osd rm osd.0
#zap新磁盘 清理新磁盘:
ceph-deploy disk zap node1:sdb
#在磁盘上新建一个osd,ceph会把它添加为osd:0:
ceph-deploy --overwrite-conf osd create node1:sdb

使用storage class自动获取存储空间

启动ceph-device

https://github.com/kubernetes-incubator/external-storage

启动ceph-rbd

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: prod-sc
  namespace: default
  annotations:
     storageclass.kubernetes.io/is-default-class: "false"
provisioner: ceph.com/rbd
reclaimPolicy: Retain
parameters:
  monitors: node1:6789,node3:6789,node2:6789
  adminId: admin
  adminSecretName: storage-secret
  adminSecretNamespace: default
  pool: rbd
  userId: admin
  userSecretName: storage-secret
  imageFormat: "2"
  imageFeatures: "layering"
#sercet
apiVersion: v1
kind: Secret
metadata:
  name: storage-secret
  namespace: default
data:
  key: QVFCU0xqdGI0WXFsQnhBQWtpM1dRTkRxOFRybmh4SWdDUEk5ZUE9PQ==   #base64加密/unbase64 解密的密文,可以 ceph auth get-key client.admin | base64 
type:
  kubernetes.io/rbd
#测试:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-sc-test
  namespace: default
spec:
  storageClassName: prod-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
原文地址:https://www.cnblogs.com/lwl117/p/11267827.html