部署ceph分布式存储

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

Ceph 介绍

Ceph 是一个能提供文件存储(cephfs)、块存储(rbd)和对象存储(rgw)的分布式存储系统,具有高扩展性、高性能、高可靠性等优点。
Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。

Ceph 特点
高性能

摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架等。
能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性
副本数可以灵活控制。
支持故障域分割,数据强一致性。
多重故障场景自动进行修复自愈。
没有单点故障,自动管理。
高可扩展性

去中心化。
扩展灵活。
随着节点增加而线性增长。
特性丰富

支持三种存储接口:块存储、文件存储、对象存储。
支持自定义接口,支持多种语言驱动。

部署ceph

机器规划

节点名称

外网IP

内网IP

磁盘容量

ceph-node-1-171

192.168.10.171

172.16.1.171

10G 挂载到opt下

ceph-node-2-172

192.168.10.172

172.16.1.172

10G

ceph-node-3-173

192.168.10.173

172.16.1.173

10G

 

 

 

 

 

 

 

 

 

系统环境

[root@ceph-node-1-170 ~]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@ceph-node-1-170 ~]# uname -a
Linux ceph-node-1-170 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@ceph-node-1-170 ~]#

基础优化

1、时间同步,生产环境建议搭建时间服务器
echo "#time sync by fage at 2019-09-09" >>/var/spool/cron/root
echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root
systemctl restart crond.service 2、关闭防火墙和selinux systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config 3、更改主机名 hostname node-1 echo "node-1" >/etc/hostname hostname node-2 echo "node-2" >/etc/hostname hostname node-3 echo "node-3" >/etc/hostname 4、更改hosts文件 cat >/etc/hosts <<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.171 node-1 192.168.10.172 node-2 192.168.10.173 node-3 EOF 5、分发公钥,每台都要执行(非必须项) ssh-keygen -t rsa -f /root/.ssh/id_rsa -P "" ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.171 ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.172 ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.173 6、禁用swap设备 swapoff -a sed -i "s@/dev/mapper/centos-swap swap@#/dev/mapper/centos-swap swap@g" /etc/fstab 7、添加好磁盘分区并格式化,但不需要挂载 fdisk -uc /dev/sdb mkfs.xfs /dev/sdb1 8、配置国内阿里云源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

安装ceph

1、配置Ceph源

cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-noarch]
name=Ceph noarch packages 
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages 
baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[x86_64]
name=x86_64
baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enabled=1
gpgcheck=0
EOF
#复制到其他机器上
scp -r /etc/yum.repos.d/* root@192.168.10.172:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/* root@192.168.10.173:/etc/yum.repos.d/

刷新缓存

yum makecache

2、在管理节点上安装ceph-deploy控制器

yum install -y python-setuptools ceph-deploy

3、初始化集群

创建工作目录

mkdir /opt/ceph-deploy  && cd /opt/ceph-deploy

创建新的集群  集群外部网络地址      集群内部网络地址  将node-1部署为moniter

ceph-deploy new --public-network 192.168.10.0/24 --cluster-network 172.16.1.0/24 node-1

4、安装依赖包 (所有节点都需要安装)

yum install -y ceph ceph-mon ceph-mgr ceph-radogw ceph-mds

初始化mon 

ceph-deploy mon create-initial

[root@node-1 ceph-deploy]# ll
总用量 44
-rw------- 1 root root   113 9月  10 00:15 ceph.bootstrap-mds.keyring   秘钥文件
-rw------- 1 root root   113 9月  10 00:15 ceph.bootstrap-mgr.keyring
-rw------- 1 root root   113 9月  10 00:15 ceph.bootstrap-osd.keyring
-rw------- 1 root root   113 9月  10 00:15 ceph.bootstrap-rgw.keyring
-rw------- 1 root root   151 9月  10 00:15 ceph.client.admin.keyring
-rw-r--r-- 1 root root   263 9月   9 23:27 ceph.conf
-rw-r--r-- 1 root root 15543 9月  10 00:15 ceph-deploy-ceph.log
-rw------- 1 root root    73 9月   9 23:27 ceph.mon.keyring
[root@node-1 ceph-deploy]#

5、下发认证文件

cd /opt/ceph-deploy  &&  ceph-deploy admin node-1 node-2 node-3 && ceph -s

6、部署监控manager daemon 

将node-1节点作为管理节点

ceph-deploy mgr create node-1  &&  ceph -s

7、添加磁盘到集群

lsblk   查看磁盘

ceph-deploy osd create node-1 --data /dev/sdb1  && ceph -s

7.1、将其他节点的磁盘也加入到集群

需要在加入到节点查看磁盘名称

ceph-deploy osd create node-2 --data /dev/sdb1
ceph-deploy osd create node-3 --data /dev/sdb1
ceph -s   #查看集群所有的空间
ceph osd tree   # 查看osd当前状态

 

部署moniter 高可用集群

部署moniter集群基本是奇数数量3、5、7个的数量,会自动仲裁选举管理节点

1、将其他节点加入到moniter集群

ceph-deploy mon add node-2 --address 192.168.10.172
ceph-deploy mon add node-3 --address 192.168.10.173

2、加入到节点后可以查看到节点在仲裁的数量

ceph quorum_status --format json-pretty

查看monter状态

ceph -s   #查看节点数量
ceph mon stat    #查看状态
ceph mon dump     # 更详细的状态

3、部署高可用监控集群

直接将节点加入到集群

ceph-deploy mgr create node-2 node-3

RBD块设备

公有云上可称为裸设备,可以进行格式化、分区等操作,但是不建议分区

可进行扩容和进行快照

可以随着使用的空间进行慢慢扩容,最大一个块设备可以支持到16EB,支持切片,可快照,可快速克隆,支持云解决方案,支持灾难恢复

ceph快存储的使用

pools资源池

创建资源池,包含有64个pgp 

ceph osd pool create ceph-demo 64 64      #创建资源池
ceph osd lspools                          #查看资源池
ceph osd pool get ceph-demo pg_num        #查看资源池中的pgp数量
ceph osd pool get ceph-demo size          #查看副本数,分片存放的集群数量

查看更多类型字段可以使用帮助进行查看

ceph osd pool get -h|grep size

调度算法

ceph osd pool get ceph-demo crush_rule

可以根据自己的需求进行调整副本数量

ceph osd pool get ceph-demo size 2
ceph osd pool get ceph-demo size

可以根据自己的需求进行调整pg数量,注意也需要调整pgp

ceph osd pool set ceph-demo pg_num 128
ceph osd pool set ceph-demo pgp_num 128
ceph osd pool get ceph-demo pg_num
ceph osd pool get ceph-demo pgp_num
ceph -s

RBD块存储创建

创建设备

rbd create -p ceph-demo --image rbd-demo.img --size 10G  #方法一
rbd create ceph-demo/rbd-demo-1.img --size 10G          #方法二
rbd -p ceph-demo ls

查看创建的块的详细信息

rbd info ceph-demo/rbd-demo.img

删除已经创建的块设备

rbd rm -p ceph-demo --image rbd-demo-1.img
rbd -p ceph-demo ls

RBD块设备的使用挂载

挂载前需要将创建时候的默认特性去除掉,不然会报错

查看特性

rbd -p ceph-demo info rbd-demo.img

去除特性

rbd feature disable ceph-demo/rbd-demo.img deep-flatten
rbd feature disable ceph-demo/rbd-demo.img fast-diff
rbd feature disable ceph-demo/rbd-demo.img object-map
rbd feature disable ceph-demo/rbd-demo.img exclusive-lock

查看去除特性的结果

rbd -p ceph-demo info rbd-demo.img

挂载设备并查看设备挂载的名称

rbd map ceph-demo/rbd-demo.img

rbd device list

挂载完成后就可以进行分区格式化这些操作 

fdisk -l|grep /dev/rbd0
mkfs.ext4 /dev/rbd0
mkdir /mnt/rbd-demo
mount /dev/rbd0 /mnt/rbd-demo

挂载完成后就可以正常的读写操作了 

RBD设备扩容

查看设备名称及容量大小后进行扩容

rbd -p ceph-demo ls                             #查看资源池中设备名称
rbd -p ceph-demo info --image rbd-demo-1.img    #资源池的块设备查看容量大小
rbd resize ceph-demo/rbd-demo-1.img --size 20G  #扩容为20G

设备扩容后需要在磁盘分区中也进行扩容才会在系统显示扩容后的容量

需要注意,resize2fs 只对ext2/3/4文件系统有效,对xfs文件系统无效

rbd resize ceph-demo/rbd-demo-1.img --size 20G

RBD数据写入流程

每个数据写入都会被切割成集群数量的分数进行存储,保证数据的高可用性

一个对象会切割成多个objects,每个都是4M大小

rados -p ceph-demo ls
rados -p ceph-demo ls|grep rbd_data.125
rados -p ceph-demo stat rbd_data.125ae45119d8.0000000000000500

objects会落在不同的pg上

验证objects落在不同的pg上

for i in `ceph osd map ceph-demo rbd_data.125ae45119d8`;do ceph osd map ceph-demo ${i};done

测试写入数据,实时监控写入增长情况

rados -p ceph-demo ls |grep rbd_data.134a3db15f91 | wc -l
cd /data/ && dd if=/dev/zero of=test.img bs=1M count=1024

由97增长到354个

watch -n 1 'rados -p ceph-demo ls | grep rbd_data.134a3db15f91 | wc -l'

代表会自动去生成容量文件,但是不能超出限定的块设备容量大小

ceph警告排查

ceph -s                     # 列出告警

ceph health detail     # 查看告警信息详细内容

 

ceph osd pool application enable ceph-demo rbd
ceph osd pool application get ceph-demo

如果出现其他的告警

ceph crash ls
ID                                                       ENTITY         NEW
2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27 mgr.node-1 *
2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd mgr.node-1 *

查看某个时间的详情  

ceph crash info 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27

systemctl status ceph-mgr@node-1

删除误报的告警进行打包

ceph crash archive 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27
ceph crash archive 2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd

ceph -s  && ceph health detail    #就看到会正常了

 配置Dashboard

mkdir mgr-dashboardb && cd mgr-dashboard
openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
ceph mgr module disable dashboard
ceph mgr module enable dashboard
ceph config set mgr mgr/dashboard/server_addr 192.168.10.171
ceph config set mgr mgr/dashboard/server_port 8080
ceph mgr services
ceph dashboard set-login-credentials admin admin@123
ceph dashboard create-self-signed-cert
ceph mgr services
{
    "dashboard": "https://192.168.10.171:8080/"
}

 

posted @ 2020-10-11 15:16  缺个好听的昵称  阅读(234)  评论(0编辑  收藏  举报