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