目录
- 画图解析ceph架构。并简述块读写流程,ceph认证机制。
- 搭建ceph集群,并完成块存储,文件存储,对象存储的使用。通过结合prometheus和grapha监控,展示 ceph集群
画图解析ceph架构。并简述块读写流程,ceph认证机制。
ceph架构:
Pool:存储池、分区,存储池的大小取决于底层的存储空间。
PG(placement group):一个pool内部可以有多个PG存在,pool和PG都是抽象的逻辑概念,一个pool中有多少个PG可以通过公式计算。
OSD(Object Storage Daemon):每一块磁盘叫做osd,多个osd组成一个主机存储池要先创建才能往ceph保存数据,文件在向ceph保存之前要先进行一致性hash计算,计算后会把文件保存在某个对应的pG的,某个文件一定属于某个pool的PG,在通过PG保存在oSD上。
数据对象在写到主OSD之后再同步对从oSD以实现数据的高可用。
块读写流程:
注:存储文件过程:
第一步:把文件对象映射给PG第二步:把文件对象映射被OSD,第三步:通过osD写入到硬盘监视器mon维护OSD和PG的集群状态,
ceph认证机制:
Ceph使用cephx协议对客户端进行身份认证cephx用于对ceph保存的数据进行认证访问和授权,用于对访问ceph的请求进行认证和授权检测,与mon通信的请求都要经过ceph认证通过,但是也可以在mon节点关闭cephx认证,但是关闭认证之后任何访问都将被允许,因此无法保证数据的安全性,
49.6:授权流程:
每个mon 节点都可以对客户端进行身份认证并分发秘钥,因此多个mon节点就不存在单点故障和认证性能瓶颈
mon 节点会返回用于身份认证的数据结构,其中包含获取ceph服务时用到的session key,session key通过客户端秘钥进行加密,秘钥是在客户端提前配置好的,
/etc/ceph/ceph.client.admin.keyring客户端使用session key向mon 请求所需要的服务,mon向客户端提供一个tiket,用于向实际处理数据的OSD等服务验证客户端身份,MON和oSD共享同一个secret,因此osD会信任有MON发放的tiket tiket存在有效期
注意:
cephx身份验证功能仅限制在Ceph的各组件之间,不能扩展到其他非ceph组件ceph只负责认证授权,不能解决数据传输的加密问题
搭建ceph集群,并完成块存储,文件存储,对象存储的使用。通过结合prometheus和grapha监控,展示 ceph集群
搭建ceph集群
网址:ceph-salt:https://github.com/ceph/ceph-salt#python
部署过程,参阅官网流程:http://docs.ceph.org.cn/install/manual-deployment/
服务器准备:使用centos
http://docs.ceph.org.cn/start/hardware-recommendations/#硬件推荐
1.三台服务器作为ceph集群OSD存储服务器,每台服务器支持两个网络,public网络针对客户端访问,cluster网络用于集群管理及数据同步,每台三块或以上的磁盘(类似于k8s的node节点)
10.0.0.132 /192.168.7.101
10.0.0.133/192.168.7.102
10.0.0.134/192.168.7.103
三台存储服务器磁盘划分:
/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf #100G
/dev/sdg /dev/sdh /dev/sdi #200G
配置:
作为数据存储
2个万兆网卡(必)
64G或以上内存
SSD硬盘 2T 4T
CPU 2* 2640 v4
2.三台服务器作为ceph集群Mon监视服务器,每台服务器可以和ceph 集群的cluster网络通信。
10.0.0.135/192.168.7.104
10.0.0.136/192.168.7.105
10.0.0.137/192.168.7.106
配置:
8C 16G 虚拟机 磁盘200G以上
3.两个ceph-mgr 管理服务器,可以和ceph集群的cluster网络通信。
10.0.0.138/192.168.7.107
10.0.0.139/192.168.7.108
两台ceph-mgr
8C 16G 虚拟机 磁盘200G
4.一个服务器用于部署ceph集群即安装Ceph-deploy,也可以和ceph-mgr等复用。
10.0.0.140/192.168.7.109
ceph-deploy节点
8C 16G 虚拟机 100G
10.0.0.141/192.168.7.110
celient节点
8C 16G 虚拟机 100G
部署方案
关闭防火墙、selinux、开启时间同步、配置ssh免密连接、
1.关闭防火墙
[root@ceph-node1 ~]# systemctl stop firewalld
[root@ceph-node1 ~]# systemctl disable firewalld
systemctl status firewalld
2.关闭selinux
一键修改selinux属性:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@10 ~]# cat /etc/sysconfig/selinux
SELINUX=disabled
3.设定时钟同步:
yum install -y ntpdate
ntpdate 0.asia.pool.ntp.org
4. 配置ssh认证
deploy上:切换到root
[ceph@ceph-deploy ~]$ whoami
ssh-keygen -t rsa -P ''
秘钥复制给本地
[root@ceph-deploy ~]# ssh-copy-id -i .ssh/id_rsa.pub root@ceph-deploy
换个身份再来一次
[ceph@ceph-deploy ~]$ ssh-copy-id -i .ssh/id_rsa.pub ceph @ceph-deploy
同步给所有节点:
[ceph@ceph-deploy ~]$ scp -rp .ssh/ ceph@ceph-node2:/home/ceph/
[ceph@ceph-deploy ~]$ scp -rp .ssh/ ceph@ceph-node1:/home/ceph/
[ceph@ceph-deploy ~]$ scp -rp .ssh/ ceph@ceph-node3:/home/ceph/
scp -rp .ssh/ ceph@ceph-mon1:/home/ceph/
scp -rp .ssh/ ceph@ceph-mon2:/home/ceph/
mon3
mgr1
mgr2
本机:
[ceph@ceph-deploy ~]$ scp -rp .ssh/ ceph@ceph-deploy:/home/ceph/
scp -rp .ssh/ ceph@ceph-client-6:/home/ceph/
成功,测试免密连接:
[ceph@ceph-deploy ~]$ ssh ceph-node1 'date'
部署ceph
镜像网址:https://mirrors.tuna.tsinghua.edu.cn/ ceph/
部署RADOS集群:
https:/mirrors.aliyun.com/ceph/ #阿里云镜像仓库
每个服务器安装epel和ceph镜像源
[root@ceph-node1 ~]# yum install epel-release -y
[root@ceph-node1 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.0/el7/noarch/ceph-release-1-1.el7.noarch.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.0/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
注意:
[root@ceph-node1 ~]# rpm -ivh ceph-release-1-1.el7.noarch.rpm
[root@ceph-node1 ~]# cat /etc/yum.repos.d/ceph.repo
[root@ceph-node1 ~]# ping download.ceph.com
158.69.68.124
其他服务器装ceph源:
修改epel源指向:
在deploy节点创建ceph用户:
[root@ceph-deploy ~]# groupadd ceph -g 2020 && useradd -u 2020 -g 2020 ceph && echo "123456" | passwd --stdin ceph
所有的节点创建账号,并执行特权命令:
[root@ceph-node1 ~]# vim /etc/sudoers
root ALL=(ALL) ALL
ceph ALL=(ALL) NOPASSWD: ALL
可以每个终端执行一次命令:
配置免秘钥登录:
在ceph-deploy节点配置允许以非交互的方式登录到各ceph node/mon/mgr节点,即在ceph-deployment节点生成秘钥对,然后分发公钥到各被管理节点:
切换到ceph账号
[root@ceph-deploy ~]# su - ceph
ssh-keygen
然后一路回车
把秘钥都拷贝过去:
[ceph@ceph-deploy ~]$ ssh-copy-id ceph@10.0.0.132
ssh-copy-id ceph@10.0.0.133
ssh-copy-id ceph@10.0.0.134
ssh-copy-id ceph@10.0.0.135
ssh-copy-id ceph@10.0.0.136
ssh-copy-id ceph@10.0.0.137
ssh-copy-id ceph@10.0.0.138
ssh-copy-id ceph@10.0.0.139
ssh-copy-id ceph@10.0.0.141
修改计算机名:
[root@ceph-mon1 ~]# hostnamectl set-hostname ceph-mgr1
[root@ceph-mon1 ~]# reboot
配置主机名解析:
vim /etc/hosts
10.0.0.132 ceph-node1.yk.local ceph-node1
10.0.0.133 ceph-node2.yk.local ceph-node2
10.0.0.134 ceph-node3.yk.local ceph-node3
10.0.0.135 ceph-mon1.yk.local ceph-mon1
10.0.0.136 ceph-mon2.yk.local ceph-mon2
10.0.0.137 ceph-mon3.yk.local ceph-mon3
10.0.0.138 ceph-mgr1.yk.local ceph-mgr1
10.0.0.139 ceph-mgr2.yk.local ceph-mgr2
10.0.0.140 ceph-deploy.yk.local ceph-deploy
10.0.0.141 ceph-client-6.yk.local ceph-client-6
写法一:
cat << EOF >> /etc/hosts
10.0.0.132 ceph-node1.yk.local ceph-node1
10.0.0.133 ceph-node2.yk.local ceph-node2
10.0.0.134 ceph-node3.yk.local ceph-node3
10.0.0.135 ceph-mon1.yk.local ceph-mon1
10.0.0.136 ceph-mon2.yk.local ceph-mon2
10.0.0.137 ceph-mon3.yk.local ceph-mon3
10.0.0.138 ceph-mgr1.yk.local ceph-mgr1
10.0.0.139 ceph-mgr2.yk.local ceph-mgr2
10.0.0.140 ceph-deploy.yk.local ceph-deploy
10.0.0.141 ceph-client-6.yk.local ceph-client-6
EOF
写法二:直接覆盖掉了,不行,有兴趣的同学可以自己再行研究下
cat >/etc/hosts <<EOF
10.0.0.132 ceph-node1.yk.local ceph-node1
10.0.0.133 ceph-node2.yk.local ceph-node2
10.0.0.134 ceph-node3.yk.local ceph-node3
10.0.0.135 ceph-mon1.yk.local ceph-mon1
10.0.0.136 ceph-mon2.yk.local ceph-mon2
10.0.0.137 ceph-mon3.yk.local ceph-mon3
10.0.0.138 ceph-mgr1.yk.local ceph-mgr1
10.0.0.139 ceph-mgr2.yk.local ceph-mgr2
10.0.0.140 ceph-deploy.yk.local ceph-deploy
10.0.0.141 ceph-client-6.yk.local ceph-client-6
EOF
验证
[root@ceph-client-6 ~]# cat /etc/hosts
安装ceph部署工具
yum install ceph-deploy python-setuptools python2-subprocess3 -y
双网卡设置(略)
最终效果:
Ping测试:
初始化mon节点:
1.更换源
[root@ceph-node1 ~]# sudo vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
2.在管理节点初始化mon节点
[ceph@ceph-deploy ~]$ mkdir ceph-cluster#保存当前集群的初始化配置信息
[ceph@ceph-deploy ~]$ cd ceph-cluster/
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy new --cluster-network 192.168.0.0/24 --public-network 10.0.0.0/24 ceph-mon1.yk.local
初始化信息查看:
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy new --cluster-network 192.168.0.0/16 --public-network 10.0.0.0/16 ceph-mon1.yk.local
Ls
vim ceph.conf
这是初始化信息,这里的信息也可以后期编辑
[global]
fsid = 08d02bd9-bb16-4b4d-8b56-09866903ea97
public_network = 10.0.0.0/16
cluster_network = 192.168.0.0/16
mon_initial_members = ceph-mon1
mon_host = 10.0.0.135
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
初始化node节点
[root@ceph-deploy ~]# su - ceph
也可以手动在每个节点自行安装ceph-release、ceph-radosgw两个程序:
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy install ceph-node3
Node3安装成功,也都是最新版本
单独装就都OK了
把配置文件和admin秘钥拷贝ceph集群各个节点
以免得每次执行ceph命令时不得不明确指定mon节点地址和ceph.client.admin.keyring:
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-node1 ceph-node2 ceph-node3 ceph-mon1 ceph-mon2 ceph-mon3
OK,验证:
终端配置ceph用户读写权限
[root@ceph-node2 ceph]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
每一个节点运行:(我是6个)
配置manager节点
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy mgr create ceph-mgr1
OK,验证:守护进程
[root@ceph-mgr1 ~]# ps -ef | grep mgr
管理节点安装远程管理工具
复制会话用root
[root@ceph-deploy ~]# yum install ceph-common -y
证书同步
[ceph_deploy.cli][INFO ] Invoked (1.5.39): /bin/ceph-deploy admin ceph-deploy
添加读写权限
[root@ceph-deploy ~]# cd /etc/ceph/
[root@ceph-deploy ceph]# ls
ceph.client.admin.keyring ceph.conf rbdmap tmpN1JSkn
[root@ceph-deploy ceph]#
[root@ceph-deploy ceph]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
回到ceph用户:
[ceph@ceph-deploy ceph-cluster]$ ceph -s
成功,OSD0个,我们还没有加入OSD,所以还没有存储节点
向RADOS集群添加OSD
列出并擦净磁盘
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy disk list ceph-node1
磁盘数量以及对应的存储策略:
擦除
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy disk zap ceph-node1 /dev/sda1
创建OSD
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy osd create --data /dev/sda1 ceph-node1
验证:
[ceph@ceph-deploy ceph-cluster]$ ceph osd stst
设置OSD服务自启
systemctl enable ceph-osd@0 ceph-osd@1 ceph-osd@2 ceph-osd@3 ceph-osd@4
移除OSD
1.停用设备:ceph osd out
2.停止进程:sudo systemctl stop ceph-osd@0
3.移除设备:ceph osd purge {id} –yes-i-really-mean-it
上传和下载数据,添加存储类
必须要知道pg数量
创建pool
[ceph@ceph-deploy ceph-cluster]$ rados mkpool mypool 32 32
列出存储池:
ceph osd pool ls
上传文件:(api接口)
rados put issue /etc/issue –pool=mypool
寻找所有图片,示例:
[ceph@ceph-deploy ceph-cluster]$ find /usr/share -iname "*.jpg"
[ceph@ceph-deploy ceph-cluster]$ rados put day.jpg /usr/share/backgrounds/day.jpg -p mypool
列出存储池中的文件:
[ceph@ceph-deploy ceph-cluster]$ rados ls -p mypool
查询文件路径:
[ceph@ceph-deploy ceph-cluster]$ ceph osd map mypool day.jpg
下载数据对象
[ceph@ceph-deploy ceph-cluster]$ sudo rados get msg1--pool=mypool/opt/day.jpg
删除数据对象:
Rados rm issue –pool=mypool
[ceph@ceph-deploy ceph-cluster]$ rados rm day.jpg -p mypool
ceph应用基础
ceph radosgw(RGW)对象存储
部署radosgw服务,ceph-mgr1服务器部署为RGW主机:
[ceph@ceph-deploy ceph-cluster]$ yum install ceph-radosgw
You need to be root to perform this command.
复制会话
[root@ceph-deploy ceph]# cd /home/ceph/ceph-cluster
[root@ceph-deploy ceph-cluster]# yum install ceph-radosgw
回到ceph用户
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy --overwrite-conf rgw create ceph-mgr1
成功,mgr1节点验证
[root@ceph-mgr1 ~]# ps -aux | grep radosgw
如果觉得对您有用,请点个赞哦♪(^∀^●) ↓↓↓