一、部署环境
1、设置主机名和IP
Vmware/KVM更改主机名和IP
client 192.168.4.10
proxy 192.168.4.5 ——》 node1 192.168.4.11
web1 192.168.4.100 ——》node2 192.168.4.12
web2 192.168.4.200 ——》node2 192.168.4.13
(2.0网段不用处理)
2、YUM源(Ceph源)
Vmware
4台设备添加光驱 关联ceph10.iso
[root@client ~]# mkdir /ceph
[root@client ~]# echo "/dev/sr1 /ceph iso9660 defaults 0 0 " >> /etc/fstab
[root@client ~]# mount -a
#新建YUM源配置文件,内容如下
[root@client ~]# vim /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=file:///ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=file:///ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=file:///ceph/Tools
gpgcheck=0
[root@client ~]# yum repolist
[root@client ~]#for i in {1…3};do scp /etc/yum.repos.d/ceph.repo 192.168.4.1${i}:/etc/yum.repos.d/ ;done
KVM
真机是Linux Yum源是由真机来提供 7.5的镜像源 /var/ftp/centos-1804
ceph源的制作: (真机上执行)
mkdir /var/ftp/ceph
mount /linux-soft/2/ceph10.iso /var/ftp/ceph
如果想验证ceph10.iso文件是否有损坏,可以通过md5sum计算md5值判断。(只要镜像文件内容相同值是一样的。)
md5sum /linux-soft/2/ceph10.iso
82688fe0162c47c8113757bd4fa16895
[root@client ~]# vim /etc/yum.repos.d/ceph.repo #新建YUM源配置文件,内容如下
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
gpgcheck=0
[root@client ~]#for i in {1…3};do scp /etc/yum.repos.d/ceph.repo 192.168.4.1${i}:/etc/yum.repos.d/ ;done
3、为虚拟机添加磁盘(除client外 每台额外添加2块20G硬盘)
VMware 注意:磁盘类型(与现有磁盘类型保持一致)
KVM 正常添加即可
4、所有主机设置防火墙和SELinux
client、node1、node2、node3
firewall-cmd --set-default-zone=trusted
sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config
setenforce 0
(sestatus:可以查看目前selinux的运行模式和配置文件中的模式)
测试:
firewall-cmd --get-default-zone 应该为trusted
sestatus (当前模式和配置文件设置的模式设置为permissive)
Current mode: permissive
Mode from config file: permissive
5、配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
因为将来会通过node1主机,去部署ceph集群环境。为了能够其他主机安装软件,拷贝配置文件,所以需要设置从node1到其他主机的免密登录。
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ‘’
#-f后面跟密钥的文件名称(希望创建密钥到哪个文件)
#-N ''代表不给密钥配置密钥(不能给密钥配置密码)
[root@node1 ~]# for i in 10 11 12 13
do
ssh-copy-id 192.168.4.$i
done
6、修改/etc/hosts并同步到所有主机。
注意:/etc/hosts解析的域名要与本机主机名一致!!!!
[root@node1 ~]# vim /etc/hosts #修改文件,手动添加如下内容(不要删除文件原有内容)
… …
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
[root@node1 ~]# for i in 10 12 13;do scp /etc/hosts 192.168.4.${i}:/etc ;done
提示:/etc/hosts解析的域名必须与本机主机名一致!!!
将/etc/hosts文件拷贝给所有其他主机(client、node1、node2、node3)
7、Client主机配置NTP服务器。
[root@client yum.repos.d]# yum -y install chrony
[root@client yum.repos.d]# vim /etc/chrony.conf
allow 192.168.4.0/24 #修改26行
local stratum 10 #修改29行(去注释即可)
[root@client yum.repos.d]# systemctl restart chronyd
8、node1,node2,node3修改NTP客户端配置。
[root@node1 ~]# yum -y install chrony
[root@node1 ~]# vim /etc/chrony.conf
server 192.168.4.10 iburst #配置文件第二行,手动添加一行新内容
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# chronyc sources -v #查看同步结果,应该是^*
(如果是克隆出来的,自带的chrony.conf 配置文件有错误的。可以删除该文件,然后重装软件,配置。
rm -rf /etc/chrony.conf
yum -y reinstall /etc/chrony.conf
…)
OSD组件(需要ceph-osd软件):用来提供共享存储(默认3副本)。
MON组件(需要ceph-mon软件):有监控与绘制地图的功能。(监控整个集群的状态,将集群的信息汇总并保存,为client提供,并时实更新。)
MON遵循过半原则(正常允许要求:当前存活主机数要大于集群数量的一半。)
假设:3台MON集群,如果先坏掉一台,当前存活主机数为2台,大于集群数量的一半(1.5),故集群正常。如果再坏掉1台,当前存活主机数为1台,小于集群数量的一半(1.5),集群故障。
假设:4台MON集群,如果先坏掉一台,当前存活主机数为3台,大于集群数量的一半(2),故集群正常。如果再坏掉1台,当前存活主机数为2台,等于集群数量的一半(2),集群故障。
结论:构建3台MON和4台MON的效果一样。故组件服务器数量选择奇数台构建(3、5、7…)
9、给所有节点安装ceph相关软件包。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i “yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw”
done
二、部署ceph集群
1、安装部署软件ceph-deploy
ceph-deploy 部署ceph集群的python脚本工具
1)在node1安装部署工具。
[root@node1 ~]# yum -y install ceph-deploy
2)创建目录(目录名称可以任意,推荐与案例一致)
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster/
2、创建Ceph集群配置。在ceph-cluster目录下生成Ceph配置文件(ceph.conf)。
1)、在ceph.conf配置文件中定义monitor主机是谁。
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
[root@node1 ceph-cluster]# cat ceph.conf //查看生成的配置文件内容。
[root@node1 ceph-cluster]# echo ‘rbd_default_features = 1’ >> ceph.conf
#不要修改原始内容,在文件末尾添加一行
#默认开启COW分层快照的功能
2)、初始化所有节点的mon服务,也就是启动mon服务。
拷贝当前目录的配置文件到所有节点的/etc/ceph/目录并启动mon服务。
[root@node1 ceph-cluster]# ls /etc/ceph //没有拷贝前内容为空。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#配置文件ceph.conf中有三个mon的IP,ceph-deploy脚本知道自己应该远程谁
[root@node1 ceph-cluster]# ls /etc/ceph //工具拷贝后,有ceph的配置文件。
ceph.client.admin.keyring ceph.conf rbdmap tmpdmayF_
- 在每个node主机查看自己的服务(注意每台主机服务名称不同)
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ~]# systemctl status ceph-mon@node2
4)、查看ceph集群状态(现在状态应该是health HEALTH_ERR)
[root@node1 ceph-cluster]# ceph -s
…
(能够看到有3个mon,分别是node1 node2 node3)
3、创建OSD
- 初始化清空磁盘数据(仅node1操作即可)。
初始化磁盘,将所有磁盘分区格式设置为GPT格式(根据实际情况填写磁盘名称)。
[root@node1 ceph-cluster]# lsblk
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:sdb node3:sdc
#相当于ssh 远程node1,在node1执行parted /dev/vdb mktable gpt
#其他主机都是一样的操作
#ceph-deploy是个脚本,这个脚本会自动ssh远程自动创建gpt分区
2)创建OSD存储空间(仅node1操作即可)
重要:很多同学在这里会出错!将主机名、设备名称输入错误!!!
远程所有node主机,创建分区,格式化磁盘,挂载磁盘,启动osd服务共享磁盘。
[root@node1 ceph-cluster]# ceph-deploy osd create node1:sdb node1:sdc
#每个磁盘都会被自动分成两个分区;一个固定5G大小;一个为剩余所有容量
#5G分区为Journal日志缓存;剩余所有空间为数据盘。
[root@node1 ceph-cluster]# ceph-deploy osd create node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy osd create node3:sdb node3:sdc
3)在三台不同的主机查看OSD服务状态,可以开启、关闭、重启服务。
注意:注意看清楚下面的主机名!!!
[root@node1 ~]# systemctl status ceph-osd@0
[root@node2 ~]# systemctl status ceph-osd@2
[root@node3 ~]# systemctl status ceph-osd@4
4、验证测试
1)查看集群状态。
[root@node1 ~]# ceph -s
[root@node1 ~]# ceph osd tree
(osd.1 后面的数字编号取决于敲osd create指令的顺序。)
重启所有ceph服务:
[root@node1 ~]# systemctl restart ceph.target
(针对当前执行该语句的主机,将主机上的ceph服务都重新启动。)
三、创建Ceph块存储
(ceph集群搭建好后,用户不能直接使用。需要创建存储池,在存储池中划分镜像。)
1:创建镜像
1)查看存储池,默认存储池名称为rbd(Rados Block Device)
[root@node1 ~]# ceph osd lspools
0 rbd,
[root@node1 ~]# rbd list //列出所有镜像(默认为空)
2)创建镜像、查看镜像
[root@node1 ~]# rbd create demo-image --size 10G
#创建demo-image镜像,这里的demo-image创建的镜像名称,名称可以为任意字符。
#size可以指定镜像大小
#如果没有指定存储池,默认会在rbd存储池中创建镜像。
[root@node1 ~]# rbd create rbd/jacob --size 10G
#在rbd池中创建名称为jacob的镜像(rbd/jacob),镜像名称可以任意
[root@node1 ~]# rbd list #列出所有镜像
[root@node1 ~]# rbd info jacob #查看demo-image这个镜像的详细信息
2:动态调整
1)扩容容量
[root@node1 ~]# rbd resize --size 15G jacob
#调整jacob镜像的大小,jacob是镜像的名称,size指定扩容到15G
[root@node1 ~]# rbd info jacob
2)缩小容量
[root@node1 ~]# rbd resize --size 7G jacob --allow-shrink
#英文词汇:allow(允许),shrink(缩小)
[root@node1 ~]# rbd info jacob
#查看jacob这个镜像的详细信息(jacob是前面创建的镜像)
3、客户端通过KRBD访问
#客户端需要安装ceph-common软件包
#拷贝配置文件(否则不知道集群在哪)
#拷贝连接密钥(否则无连接权限)
[root@client ~]# yum -y install ceph-common
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
[root@client ~]# rbd map jacob #客户端访问映射服务器的jacob共享镜像
[root@client ~]# lsblk #查看结果(会多一块磁盘)
- 客户端格式化、挂载分区
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0 /mnt
[root@client ~]# echo ‘I love you’ > /mnt/a.txt
[root@client ~]# rbd showmapped #查看磁盘名和共享镜像名称的对应关系
id pool image snap device
0 rbd jacob - /dev/rbd0
3)删除镜像:
[root@client ~]# umount /mnt
[root@client ~]# rbd unmap /dev/rdb0 //撤销磁盘映射