0. 环境
主机名 | IP | 安装组件 |
---|---|---|
ceph-1 | 192.168.16.4 | ceph-deploy & mon & mgr & osd & ntp |
ceph-2 | 192.168.16.5 | mon & mgr & osd & ntp |
ceph-3 | 192.168.16.6 | mon & mgr & osd & ntp |
3台CentOS 7(Release: 7.2.1511),每台3个50G磁盘(其中2个用于osd,1个用于存放日志等信息)
ceph版本:ceph-luminous 12.2.5
配置详情如下:
主机名 | IP | 安装组件 |
---|---|---|
ceph-1 | 192.168.16.4 | ceph-deploy & mon & mgr & osd & ntp |
ceph-2 | 192.168.16.5 | mon & mgr & osd & ntp |
ceph-3 | 192.168.16.6 | mon & mgr & osd & ntp |
1. 准备
1.1 更改主机名
修改每台主机的主机名,执行命令
[root@xxxx ~]# hostnamectl set-hostname [hostname]
这里hostname就是ceph-1, ceph-2, ceph-3
注:执行后其实已经生效,此终端左侧xxxx还没有显示主机名,新开一个终端即可看到
1.2 修改域名解析文件
在每台主机执行vim /etc/hosts命令,添加如下内容至此文件:
192.168.16.4 ceph-1
192.168.16.5 ceph-2
192.168.16.6 ceph-3
1.3 关闭selinux
在每台主机下执行:
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
1.4 在主节点配置无密码访问
在节点ceph-1执行
[root@ceph-1 ~]# ssh-keygen -t rsa
一路回车即可
之后,执行
[root@ceph-1 ~]# ssh-copy-id root@ceph-2
[root@ceph-1 ~]# ssh-copy-id root@ceph-3
1.5 配置yum源
1.5.1 配置基础yum源
在每个节点执行:
yum clean all
rm -rf /etc/yum.repos.d/*.repo
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
sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
1.5.2 配置ceph源
1.5.2.1 配置ceph非本地源
在每个节点执行:vim /etc/yum.repos.d/ceph.repo,并将以下内容放入ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
1.5.2.2 配置ceph本地源
由于有的时候内网无法访问ceph的yum源,不得不搭建ceph 本地源。
插一个题外话:文章将采取模块化,将能拆分的部分尽量都拆分出去,形成单独一个文档,这样看起来方便,也符合微服务的思想。
ok,继续。。
在主节点(ceph-1)搭建ceph本地源,详细步骤可参见我的另一篇文章搭建ceph本地源
其他节点执行vim /etc/yum.repos.d/ceph.repo,并将以下内容放入ceph.repo
[ceph]
name=ceph
baseurl=http://192.168.16.4/ceph/12.2.5#换成你自己的ip
gpgcheck=0
1.5.3 缓存包信息
[root@ceph-1 ~]# yum makecache
1.6 配置ntp
参加另一篇文章ntp搭建与部署
2. 安装Ceph
2.1 安装ceph
在每个节点执行
[root@ceph-1 ~]# yum install ceph -y
[root@ceph-1 ~]# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)
2.2 安装ceph-deploy
在主节点执行
[root@ceph-1 ~]# yum install ceph-deploy -y
[root@ceph-1 ~]# ceph-deploy --version
2.0.0
2.3 部署ceph 集群并部署mon
创建部署目录
[root@ceph-1 ~]# mkdir cluster
[root@ceph-1 ~]# cd cluster/
[root@ceph-1 cluster]# ceph-deploy new ceph-1 ceph-2 ceph-3
说明:在三个节点都部署mon
ok,继续。。
文件夹下会产生多个文件,先不管,仅先修改ceph.conf,添加如下内容至ceph.conf
public_network=192.168.16.0/24
执行
[root@ceph-1 cluster]# ceph-deploy mon create-initial
此时执行ceph -s会出错,是由于缺少/etc/ceph/ceph.client.admin.keyring文件
执行
[root@ceph-1 cluster]# ceph-deploy admin ceph-1 ceph-2 ceph-3
此时执行ceph -s 已正常
说明:早版本的ceph会默认有一个rbd的pool,目前已经没有了,pool是空的,需要自己新建
2.4 创建osd
首先看一下块设备信息:
[root@ceph-1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 50G 0 disk
vdc 253:32 0 50G 0 disk
vdd 253:48 0 50G 0 disk
vdb&vdc用于osd,vdd我们将他分成4个区用于bluestore的db和wal,一会可以看到。
注意:老版本的ceph-deploy --overwrite-conf osd prepare/activate 已过期了,我们使用ceph-deploy osd create,注意这里有好多坑,来,开始:
2.4.1 zap disk
首先销毁磁盘分区信息,执行
[root@ceph-1 cluster]# ceph-deploy disk zap ceph-1 /dev/vdb
...
[ceph_deploy][ERROR ] Traceback (most recent call last):
[ceph_deploy][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/util/decorators.py", line 69, in newfunc
[ceph_deploy][ERROR ] return f(*a, **kw)
[ceph_deploy][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 164, in _main
[ceph_deploy][ERROR ] return args.func(args)
[ceph_deploy][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/osd.py", line 438, in disk
[ceph_deploy][ERROR ] disk_zap(args)
[ceph_deploy][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/osd.py", line 336, in disk_zap
[ceph_deploy][ERROR ] if args.debug:
[ceph_deploy][ERROR ] AttributeError: 'Namespace' object has no attribute 'debug'
这里会报错,原因就是ceph-deploy所使用的osd.py有bug,缺少debug参数,有两种方法可以解决:
- 参照这个大神http://www.yangguanjun.com/2018/04/06/ceph-deploy-latest-luminous/
- 参照http://tracker.ceph.com/issues/22871
总之,都是修改了osd.py
其实不运行ceph-deploy disk zap也可以,我们仔细看log可以发现他其实使用的是ceph-volume lvm zap,于是我们直接执行
[root@ceph-1 cluster]# ceph-volume lvm zap /dev/vdb
这样就不需要修改osd.py了,搞定,继续下一步
2.4.2 为vdd分区
这个通过fdisk就可以了
[root@ceph-1 ~]# fdisk /dev/vdd
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Command action
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
q quit without saving changes
s create a new empty Sun disklabel
w write table to disk and exit
Command (m for help): g
Building a new GPT disklabel (GUID: 3444119B-FBDF-4E5B-BA72-59F2FBB305B3)
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-104857566, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857566, default 104857566): +10G
Created partition 1
Command (m for help): n
Partition number (2-128, default 2):
First sector (20973568-104857566, default 20973568):
Last sector, +sectors or +size{K,M,G,T,P} (20973568-104857566, default 104857566): +10G
Created partition 2
Command (m for help): n
Partition number (3-128, default 3):
First sector (41945088-104857566, default 41945088):
Last sector, +sectors or +size{K,M,G,T,P} (41945088-104857566, default 104857566): +10G
Created partition 3
Command (m for help): n
Partition number (4-128, default 4):
First sector (62916608-104857566, default 62916608):
Last sector, +sectors or +size{K,M,G,T,P} (62916608-104857566, default 104857566): +10G
Created partition 4
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@ceph-1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 50G 0 disk
vdc 253:32 0 50G 0 disk
vdd 253:48 0 50G 0 disk
├─vdd1 253:49 0 10G 0 part
├─vdd2 253:50 0 10G 0 part
├─vdd3 253:51 0 10G 0 part
└─vdd4 253:52 0 10G 0 part
如果发现分区未更新,执行命令
[root@ceph-1 ~]# partprobe
然后在执行lsblk
2.4.3 创建osd
[root@ceph-1 cluster]# ceph-deploy osd create ceph-1 --bluestore --data /dev/vdb --block-db /dev/vdd1 --block-wal /dev/vdd2
[root@ceph-1 cluster]# ceph-deploy osd create ceph-1 --bluestore --data /dev/vdc --block-db /dev/vdd3 --block-wal /dev/vdd4
[root@ceph-1 cluster]# ceph-deploy osd create ceph-2 --bluestore --data /dev/vdb --block-db /dev/vdd1 --block-wal /dev/vdd2
[root@ceph-1 cluster]# ceph-deploy osd create ceph-2 --bluestore --data /dev/vdc --block-db /dev/vdd3 --block-wal /dev/vdd4
[root@ceph-1 cluster]# ceph-deploy osd create ceph-3 --bluestore --data /dev/vdb --block-db /dev/vdd1 --block-wal /dev/vdd2
[root@ceph-1 cluster]# ceph-deploy osd create ceph-3 --bluestore --data /dev/vdc --block-db /dev/vdd3 --block-wal /dev/vdd4
说明:通过仔细看log,也会发现这个其实调用的是ceph-volume lvm create命令,那么我们用这个命令代替ceph-deploy osd create可以么?
答案是看情况,如果不是第一次创建osd(即人工删除一个osd,再创建一个osd时),那么这个可以;如果是第一次创建osd,使用
ceph-volume lvm create --bluestore --data /dev/vdb --block.db /dev/vdd1 --block.wal /dev/vdd2
那么会报错
unable to find a keyring on /var/lib/ceph/bootstrap-osd/ceph.keyring: (2) No such file or directory
为什么呢?其实是因为ceph-deploy osd create会为我们创建ceph.keyring,并放入/var/lib/ceph/bootstrap-osd/下面。
注:db&wal最好用SSD,这样在数据读写时,特别是小数据时速度会快些,这里我用的是普通的磁盘vdd(假装他是SSD)
ok,废话说完,继续。。。
2.4.4 部署mgr
直接执行
[root@ceph-1 cluster]# ceph-deploy mgr create ceph-1 ceph-2 ceph-3
2.4.5 启动dashboard
[root@ceph-1 cluster]# ceph mgr module enable dashboard
浏览器访问:http://ip:7000/即可看到dashboard
注:ip为主mgr所在主机的ip
长这样:
References
- 徐小胖blog,http://xuxiaopang.com/2016/10/10/ceph-full-install-el7-jewel/,大家在这里还可以看到自定义的crush如何work
- ictfox flog, http://www.yangguanjun.com/2018/04/06/ceph-deploy-latest-luminous/
- ceph 官方文档,http://docs.ceph.com/docs/mimic/start/quick-ceph-deploy/