centos7.2部署CEPH分布式存储
几台配置低的服务器倒下来了,正好需要搭建个平台。所以把所有资源整合了一下,每台服务器安装了esxi6.7和VCENTER后,发现启动了VSAN功能找不到注册码。没办只能是又换回了Esxi6.5,安装完成后发现6.5的Vsan不能用。先这样吧。6.5安装完成后,所有故障排错,然后正常启动。安装完所有服服务器后,又对所有服务器原有的硬盘打起了主意。想个办法吧。 原先可以用vsan现在查了一下分布式存储系统,打算用CEPH来利用剩余的资源。经过一段时间的学习和实践,把这个过程写下来,防止以后忘记。
第一步先准备好系统用的是Centos7.2 CentOS-7-x86_64-Everything-1511.iso这个安装光盘。完成后做硬盘的直通。然后设置IP和主机名为下表。
IP 主机名
10.172.99.227 ceph227
10.172.99.228 ceph228
10.172.99.229 ceph229
10.172.99.230 ceph230
10.172.99.231 ceph231
为了安装方便,每台机器连接互联网,因为后期很多支持文件需要安装。不联网很麻烦。
我们此次以ceph131为管理端+OSD端,其它几个为OSD。
此次暂定ceph231为管理主机
以下安装过程部分引用自https://www.cnblogs.com/kevingrace/p/9141432.html
做过改动。
ssh-keygen -t rsa #一路回车
ceph228: ceph227: ceph229: ceph230:
/dev/sdb /dev/sdc /dev/sdd
第一步先准备好系统用的是Centos7.2 CentOS-7-x86_64-Everything-1511.iso这个安装光盘。完成后做硬盘的直通。然后设置IP和主机名为下表。
IP 主机名
10.172.99.227 ceph227
10.172.99.228 ceph228
10.172.99.229 ceph229
10.172.99.230 ceph230
10.172.99.231 ceph231
为了安装方便,每台机器连接互联网,因为后期很多支持文件需要安装。不联网很麻烦。
我们此次以ceph131为管理端+OSD端,其它几个为OSD。
此次暂定ceph231为管理主机
以下安装过程部分引用自https://www.cnblogs.com/kevingrace/p/9141432.html
做过改动。
先按上表所示,每个节点绑定主机名映射
用putty软件登陆ceph231
vi /etc/hosts
用 ping -c 3 ceph227 测试一下各个主机是否能够连通
配置相互间的
ssh
信任关系
ssh-keygen -t rsa #一路回车
cd
.
ssh
/
ls
cp
id_rsa.pub authorized_keys
ssh ceph231
在提示里输入yes回车
会要求输入密码,输入完后确认。
登陆成功后会显示
Last login: Tue Oct 22 12:31:34 2019 from IP
这时登陆成功。
输入exit登陆
提示登出
再测试一下是不是不需要密码了
用以下指令分别设置其它主机。
scp -r /root/.ssh/id_rsa.pub ceph228:/root/.ssh/authorized_keys
如果提示
scp: /root/.ssh/authorized_keys: No such file or directory
报错提示的话,是指ceph228上没有.ssh这个文件夹没有
ssh ceph228
输入密码后登陆
输入ssh 10.172.99.231
输入yes后按回车输入密码。
然后ls /root/.ssh
会列出一个文件。已经有了这个文件夹了。
exit
返回到ceph231的控制台
重复刚才的SCP命令
以下提示证明复制成功。
id_rsa.pub 100% 394 287.8KB/s 00:00
输入ssh ceph228 测试一下。成功。不需要输入密码就可以登陆了。原文的这里介绍的不对。按原文操作是不成功的。
同样重复设置5个节点,全部实现无密码登陆。
注: 上面的那个登陆建立.ssh文件夹的那一步,也可以偷懒直接用mkdir /root/.ssh来实现。
用下面的命令
scp -r /etc/hosts ceph230:/etc/
同步一下hosts文件
每个节点都要关闭防火墙和禁用selinux
systemctl stop firewalld &&
systemctl disable firewalld && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0
如果有错误,可以分别执行每条语句来调试。
每个节点要确保时间上是一致的,这里要安装和启动NTP服务。
yum install ntp ntpdate ntp-doc -y &&
systemctl restart ntpd && systemctl status ntpd
下一步需要用到wget命令,这里先安装wget命令。
yum install wget -y
安装完成后,把默认的源备份下,
yum clean all &&
mkdir /mnt/bak &&
mv /etc/yum.repos.d/* /mnt/bak/
更新国内的新源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
vi /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http:
//mirrors
.aliyun.com
/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http:
//mirrors
.aliyun.com
/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-
source
]
name=Ceph
source
packages
baseurl=http:
//mirrors
.aliyun.com
/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
源的准备工作做完后,准备磁盘。
fdisk -l
查看当前有多少磁盘如果磁盘较多可加入|more 参数
下面是我的所有节点的磁盘
ceph231:
/dev/sdb /dev/sdc /dev/sdd
/dev/sde /dev/sdf /dev/sdgceph228: ceph227: ceph229: ceph230:
/dev/sdb /dev/sdc /dev/sdd
可以选择哪些加入,哪些不加入,必须是整盘占用。
选择好后,用下列命令格式化磁盘成xfs格式,把命令里的 /dev/vdb 换成相应的磁盘。
parted -s
/dev/vdb
mklabel gpt mkpart primary xfs 0% 100%
mkfs.xfs /dev/vdb -f
将命令一块执行比较省力
mkfs.xfs /dev/sdb -f && mkfs.xfs /dev/sdc -f && mkfs.xfs /dev/sdd -f
开始部署阶段:
在ceph231上操作
安装ceph-deploy
yum update -y &&
sudo
yum
install
ceph-deploy -y
创建集群目录:
pwd
查看一下当前目录,如果不是根目录就用cd / 切换到根目录
mkdir cephjq
cd cephjq
创建集群(后面填写monit节点的主机名,这里monit节点和管理节点是同一台机器,即ceph231)
ceph-deploy new ceph231
安装完成用ls命令查看一下当前目录下的文件
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
会多出这三个文件。
vi ceph.conf 添加以下内容
public network = 10.172.99.231
/24
osd pool default size = 3
开始安装ceph,这个时间有点长
ceph-deploy
install
ceph231 ceph230 ceph229 ceph228 ceph227
后面是主机名,可以换成是你的。
安装完成后
输入ceph -v
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
输出版本号证明安装成功。不过版本不是最新的。
初始化monit监控节点,并收集所有密钥
ceph-deploy mon create-initial
ceph-deploy gatherkeys ceph231
添加OSD到集群
检查OSD节点上所有可用的磁盘
ceph-deploy disk list
ceph231 ceph230 ceph229 ceph228 ceph227
使用zap选项删除所有osd节点上的分区,这一步比较麻烦。需 要手动输入
ceph-deploy disk zap ceph231:/dev/sdb ceph231:/dev/sdc ceph231:/dev/sdd ceph231:/dev/sde ceph231:/dev/sdf ceph231:/dev/sdg ceph230:/dev/sdb ceph230:/dev/sdc ceph230:/dev/sde ceph229:/dev/sdb ceph229:/dev/sdc ceph229:/dev/sde ceph228:/dev/sdb ceph228:/dev/sdc ceph228:/dev/sde ceph227:/dev/sdb ceph227:/dev/sdc ceph227:/dev/sde
如果出错,可以再单独运行。
准备OSD(使用prepare命令)
ceph-deploy osd prepare
ceph231: /dev/sdb ceph231:/dev/sdc ceph231:/dev/sdd ceph231:/dev/sde ceph231:/dev/sdf ceph231:/dev/sdg ceph230:/dev/sdb ceph230:/dev/sdc ceph230:/dev/sde ceph229:/dev/sdb ceph229:/dev/sdc ceph229:/dev/sde ceph228:/dev/sdb ceph228:/dev/sdc ceph228:/dev/sde ceph227:/dev/sdb ceph227:/dev/sdc ceph227:/dev/sde
激活OSD(注意由于ceph对磁盘进行了分区,
/dev/vdb
磁盘分区为
/dev/vdb1
)
ceph-deploy osd activate
ceph231:/dev/sdb1 ceph231:/dev/sdc1 ceph231:/dev/sdd1 ceph231:/dev/sde1 ceph231:/dev/sdf1 ceph231:/dev/sdg1
需要每个磁盘都要设置。我用批量的设置老是出错。上面这几条命令,都是一条条的改的。
全部设置完成后用、
lsblk 查看一下是否OSD启动成功。
也可用以下ceph-deploy disk list ceph231 ceph230 ceph229 ceph228 ceph227
查看一下。
[ceph228][DEBUG ] /dev/sdc :
[ceph228][DEBUG ] /dev/sdc2 ceph journal, for /dev/sdc1
[ceph228][DEBUG ] /dev/sdc1 ceph data, active, cluster ceph, osd.13, journal /dev/sdc1
如果出现以上字样,证明已经成功了。
如果出现以上字样,证明已经成功了。
用ceph-deploy把配置文件和admin密钥拷贝到管理节点和Ceph节点,这样你每次执行Ceph命令行时就无需指定monit节点地址
和ceph.client.admin.keyring了
ceph-deploy admin ceph231 ceph230 ceph229 ceph228 ceph227
修改密钥权限
chmod 644 /etc/ceph/ceph.client.admin.keyring
检查ceph状态
ceph health
HEALTH_OK
如果有错误可以自行百度。
我的就出现了
我的就出现了
HEALTH_WARN too few PGs per OSD (21 < min 30)
错误,经查询是pg_num 和pgp_num设置有误
准备创建文件系统
在这里的步骤和原文会有所区别了。因为我最终是要用ISCSI来访问的,原文是通过挂载的方式。
再次查看状态
修改配置文件
vi /etc/tgt/targets.conf
添加如下配置
<target 10.172.99.231:iscsi>
driver iscsi
bs-type rbd
backing-store iscsi-pool/image01
</target>
重启target服务
systemctl restart tgtd.service
查看创建的scsi target
tgtadm --lld iscsi --mode target --op show
可以看到创建的lun1表示成功
准备用客户端测试一下吧。
常用命令:
查看健康状态:
ceph health
ceph -s
从网上找了一下计算公式。
One pool total PGs = (Total_number_of_OSD * 100) / max_replication_count
One pool total PGs = (Total_number_of_OSD * 100) / max_replication_count
例如15个OSD,副本数为3的情况下,根据公式计算的结果应该为500,最接近512,所以需要设定该pool(volumes)的pg_num和pgp_num都为512
我的是18个OSD,5台主机,18*100 /5 等于360
osd pool set rbd pgp_num 360
osd pool set rbd pgp_num 360
osd pool set rbd pg_num 360
过一会儿查看
ceph health
过一会儿查看
ceph health
HEALTH_OK
好了。解决了。
好了。解决了。
准备创建文件系统
在这里的步骤和原文会有所区别了。因为我最终是要用ISCSI来访问的,原文是通过挂载的方式。
先查看管理节点状态,默认是没有管理节点的。
ceph mds stat
e1:
创建管理节点(ceph231作为管理节点)。
需要注意:如果不创建mds管理节点,client客户端将不能正常挂载到ceph集群!!
pwd
切换到cephjq文件夹
切换到cephjq文件夹
cd cephjq
ceph-deploy mds create ceph231
ceph-deploy mds create ceph231
再次查看状态
ceph mds stat
e2:, 1 up:standby
已经正常启动中
安装ISCSI服务
mkdir iscsi
cd iscsi
wget http://apt-mirror.sepia.ceph.com/centos6-qemu-kvm/scsi-target-utils-1.0.38-48.bf6981.ceph.el6.x86_64.rpm
yum isntall scsi-target-utils-1.0.38-48.bf6981.ceph.el6.x86_64.rpm -y
能tgt服务
systemctl enable tgtd.service
systemctl start tgtd.service
开启scsi-target-utils服务
service tgtd start 或 systemctl start tgtd
开机自启动scsi-target-utils服务
chkconfig tgtd on
这里有时会提示没有chkconfig这个命令。可以用yum install chkconfig -y安装
查看scsi-target-utils是否启动
netstat -anltp|grep 3260
验证tgt是否支持rbd
tgtadm --lld iscsi --mode system --op show | grep rbd
创建iscsi target
创建存储池和rbd镜像
ceph osd pool create iscsi-pool 512 512(在执行下一步之前,建议使用rbd ls -p iscsipool命令查看是否创建成功)
rbd create iscsi-pool/image01 --size 10240000 建立一个10T的空间
vi /etc/tgt/targets.conf
添加如下配置
<target 10.172.99.231:iscsi>
driver iscsi
bs-type rbd
backing-store iscsi-pool/image01
</target>
重启target服务
systemctl restart tgtd.service
查看创建的scsi target
tgtadm --lld iscsi --mode target --op show
可以看到创建的lun1表示成功
准备用客户端测试一下吧。
常用命令:
查看健康状态:
ceph health
查看ceph osd运行状态
ceph osd stat
osdmap e19: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
cluster 33bfa421-8a3b-40fa-9f14-791efca9eb96
health HEALTH_OK
monmap e1: 1 mons at {ceph-admin=192.168.10.220:6789/0}
election epoch 3, quorum 0 ceph-admin
osdmap e14: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects
100 MB used, 45946 MB / 46046 MB avail
64 active+clean
查看osd的目录树
[cephuser@ceph-admin ~]$ ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.04376 root default
-2 0.01459 host ceph-node1
0 0.01459 osd.0 up 1.00000 1.00000
-3 0.01459 host ceph-node2
1 0.01459 osd.1 up 1.00000 1.00000
-4 0.01459 host ceph-node3
2 0.01459 osd.2 up 1.00000 1.00000
查看monit监控节点的服务情况
[cephuser@ceph-admin cluster]$ sudo systemctl status ceph-mon@ceph-admin
[cephuser@ceph-admin cluster]$ ps -ef|grep ceph|grep 'cluster'
ceph 28190 1 0 11:44 ? 00:00:01 /usr/bin/ceph-mon -f --cluster ceph --id ceph-admin --setuser ceph --setgroup ceph
分别查看下ceph-node1、ceph-node2、ceph-node3三个节点的osd服务情况,发现已经在启动中。
[cephuser@ceph-node1 ~]$ sudo systemctl status ceph-osd@0.service #启动是start、重启是restart
[cephuser@ceph-node1 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph 28749 1 0 11:44 ? 00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051 0 11:54 pts/2 00:00:00 grep --color=auto cluster
[cephuser@ceph-node2 ~]$ sudo systemctl status ceph-osd@1.service
[cephuser@ceph-node2 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph 28749 1 0 11:44 ? 00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051 0 11:54 pts/2 00:00:00 grep --color=auto cluster
[cephuser@ceph-node3 ~]$ sudo systemctl status ceph-osd@2.service
[cephuser@ceph-node3 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph 28749 1 0 11:44 ? 00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051 0 11:54 pts/2 00:00:00 grep --color=auto cluster