Centos7下安装ceph
本来ceph这货的安装简直是傻瓜到一塌糊涂的,但是仰仗于国内伟大的GFW,这安装过程变得极其曲折
以下仅列出最后所使用的手法:
我最后的生成的是这样的:
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01
mon host = 192.168.206.100
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
生成mon用的密匙
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
monmaptool --create --add star01 192.168.206.100 --fsid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 /tmp/monmap
建立一个以clustername - hostname为名字的文件夹
sudo mkdir /var/lib/ceph/mon/ceph-star01
添加Key
sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
(如果这一步不成功,记得把相关的目录所有权全部给ceph)
最后启动ceph,centos7下用systemd启动,@后面是你的hostname
systemctl start ceph-mon@star01
然后就可以查看它是否启动了
systemctl status ceph-mon@star01
添加到自动启动
systemctl enable ceph-mon@star01
检查pool的状况
ceph osd lspools
我这里报告是:
0 rbd,
检查mon的状况
ceph mon stat
我这里的报告是:
e1: 1 mons at {star01=192.168.206.100:6789/0}, election epoch 5, quorum 0 star01
查看ceph的集群状况
ceph -s
结果应该是类似这样:
cluster 58943f07-a011-4838-b2b0-33d5ab5d2ad1
health HEALTH_ERR
64 pgs are stuck inactive for more than 300 seconds
64 pgs stuck inactive
no osds
monmap e1: 1 mons at {star01=192.168.206.100:6789/0}
election epoch 4, quorum 0 star01
osdmap e1: 0 osds: 0 up, 0 in
flags sortbitwise
pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating
以下仅列出最后所使用的手法:
- 删除Centos 7自带的的repo(都太慢)
rm -rf /etc/yum.repos.d/*.repo - 使用阿里云的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
注意,epel源一定要打开,因为ceph依赖snappy之类的都在epel里面 - 添加一个用于安装ceph-deploy的源
vim /etc/yum.repos.d/ceph.repo
添加以下内容:
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc - yum makecache
- yum install ceph-deploy
- 接下来就按照官方的教程走就好了,就不大可能出现一大堆诡异的什么无法安装的错误了,这安装流程也异常的简单,唯一注意的:当使用ceph-deploy install的时候,务必这样用:ceph-deploy install --repo-url http://mirrors.aliyun.com/ceph/rpm-jewel/el7 ceph-deploy install admin-node node1 node2 node3(官方的方法是:ceph-deploy install admin-node node1 node2 node3)因为这个ceph-deploy在安装过程中会自动帮你修改repo,所以需要用--repo-url来拒绝这个改动,我安装的是jewel发行版,可根据实际需要修改为最新的
- 值得注意的是,从Jewel发行版开始,ceph-osd会拒绝在ext4分区上启动,因为文件名的最大长度被限制在了256的缘故。你可以通过配置修改来规避它的限制,但是不建议在生产环境这么做,官方的推荐是在XFS或者裸设备上安装启动OSD,当然,也可以用btrfs,但是官方并不推荐这么做
接下来说说怎么不用ceph-deploy完全手动安装全部的ceph节点
大致的步骤是,首先安装一个ceph-mon节点,然后添加一个ceph-mon节点,然后安装一个ceph-osd节点,再添加一个ceph-osd节点
主要是参考这个页面:
http://docs.ceph.com/docs/master/install/manual-deployment/
首先在本机上安装ceph,直接yum安装即可
然后
sudo vim /etc/ceph/ceph.conf
用uuidgen生成一个独立的uuid
最后的ceph.conf的格式如下:
[global]
fsid = {cluster-id}
mon initial members = {hostname}[, {hostname}]
mon host = {ip-address}[, {ip-address}]
public network = {network}[, {network}]
cluster network = {network}[, {network}]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = {n}
osd pool default size = {n} # Write an object n times.
osd pool default min size = {n} # Allow writing n copy in a degraded state.
osd pool default pg num = {n}
osd pool default pgp num = {n}
osd crush chooseleaf type = {n}
http://docs.ceph.com/docs/master/install/manual-deployment/
首先在本机上安装ceph,直接yum安装即可
然后
sudo vim /etc/ceph/ceph.conf
用uuidgen生成一个独立的uuid
最后的ceph.conf的格式如下:
[global]
fsid = {cluster-id}
mon initial members = {hostname}[, {hostname}]
mon host = {ip-address}[, {ip-address}]
public network = {network}[, {network}]
cluster network = {network}[, {network}]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = {n}
osd pool default size = {n} # Write an object n times.
osd pool default min size = {n} # Allow writing n copy in a degraded state.
osd pool default pg num = {n}
osd pool default pgp num = {n}
osd crush chooseleaf type = {n}
我最后的生成的是这样的:
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01
mon host = 192.168.206.100
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
生成mon用的密匙
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
monmaptool --create --add star01 192.168.206.100 --fsid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 /tmp/monmap
建立一个以clustername - hostname为名字的文件夹
sudo mkdir /var/lib/ceph/mon/ceph-star01
添加Key
sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
(如果这一步不成功,记得把相关的目录所有权全部给ceph)
最后启动ceph,centos7下用systemd启动,@后面是你的hostname
systemctl start ceph-mon@star01
然后就可以查看它是否启动了
systemctl status ceph-mon@star01
添加到自动启动
systemctl enable ceph-mon@star01
检查pool的状况
ceph osd lspools
我这里报告是:
0 rbd,
检查mon的状况
ceph mon stat
我这里的报告是:
e1: 1 mons at {star01=192.168.206.100:6789/0}, election epoch 5, quorum 0 star01
查看ceph的集群状况
ceph -s
结果应该是类似这样:
cluster 58943f07-a011-4838-b2b0-33d5ab5d2ad1
health HEALTH_ERR
64 pgs are stuck inactive for more than 300 seconds
64 pgs stuck inactive
no osds
monmap e1: 1 mons at {star01=192.168.206.100:6789/0}
election epoch 4, quorum 0 star01
osdmap e1: 0 osds: 0 up, 0 in
flags sortbitwise
pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating
接下来添加另外两个mon节点,一般来说生产环境中推荐使用至少3个节点,测试的时候倒是可以用一个mon就可以了,推荐使用的是奇数个节点,但是并非强制要求,主要是因为偶数节点其实挺浪费的,比如5节点允许损坏2个节点,但是如果你部署6台,依然只允许损坏2个节点,但是如果你部署7台,就允许损坏3个节点。部署偶数个节点的收益就不是那么大了。
主要参考的是这篇:http://docs.ceph.com/docs/master/rados/operations/add-or-rm-mons/
我用的第二个主机名是star02,ip是192.168.206.101
首先创建mon所在的文件夹
mkdir /var/lib/ceph/mon/ceph-star02
把第一台主机生成的/tem/ceph.mon.keyring 拷贝至/etc/
同样,把第一台主机生成的/etc/ceph/ceph.client.admin.keyring 也拷贝至/etc/ceph/
修改/etc/ceph/ceph.conf为
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01, star02
mon host = 192.168.206.100, 192.168.206.101
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
运行
ceph auth get mon. -o /tmp/ceph.mon.keyring
生成一个新的mapfile
monmaptool --create --add star01 192.168.206.100 --add star02 192.168.206.101 --add star03 192.168.206.102 --fsid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 --clobber /tmp/monmap
这次我添加了三台mon
注册mapfile
ceph mon getmap -o /tmp/monmap
创建
sudo -u ceph ceph-mon --mkfs -i star03 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
启动
systemctl status ceph-mon@star02
【如果你碰到无法启动的问题,首先检查文件夹权限,包括/etc/ceph、/var/lib/ceph,这两个文件夹下所有的文件所有者都应该是ceph】
查看结果:
ceph mon stat
此时应该显示
e2: 2 mons at {star01=192.168.206.100:6789/0,star02=192.168.206.101:6789/0}, election epoch 6, quorum 0,1 star01,star02
在主机上也应该显示同样的结果
其实此时不用变更主机上的ceph.conf也没问题,也就是mon本来就支持动态加入到集群中,毕竟,我们在添加ceph-authtool的时候使用的是allow *,不过为了保险起见,我还是把ceph.conf编辑成和第二节点一致
添加第一个OSD
我选择使用的是ceph最新版才出来的针对裸设备使用的bluestone存储方案,据说性能有大幅度的提升,介绍可以看这里:
https://www.sebastien-han.fr/blog/2016/03/21/ceph-a-new-store-is-coming/
安装前需要先修改一下ceph的配置:
vim /etc/ceph/ceph.conf
我改成了这样:
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01, star02
mon host = 192.168.206.100, 192.168.206.101
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
enable experimental unrecoverable data corrupting features = bluestore rocksdb
bluestore fsck on mount = true
bluestore block db size = 67108864
bluestore block wal size = 134217728
bluestore block size = 5368709120
osd objectstore = bluestore
[osd]
bluestore = true
安装也很简单,一句话完成
ceph-disk prepare --bluestore --cluster ceph --cluster-uuid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 /dev/sdb
--cluster之后是你的集群的名字,uuid是你集群的fsid,最后是目标硬盘
目标硬盘一定要是一块没有任何分区记录的裸设备
如果出现各种莫名奇妙的python报错,基本上就是设备没有正确的删除分区,用fdisk /dev/sdb,然后一路ddddd最后w退出删除全部分区再次安装即可
中间出问题了启动不了也可以在集群中直接ceph osd rm 0(0是osd的id,用ceph osd tree查看osd的启动情况,把安装时候没有正确启动的直接删除重新安装即可,后来安装的会自动填空的)
这条命令运行完之后会自动在/var/lib/ceph/osd/ceph-xx下挂载你新硬盘的一个分区,一般来说是一个xfs分区,然后在systemd中也会出现一个叫做ceph-osd@xx的启动项目并且自动帮你设置成enable了,相当智能
装完了来装MDS,这个是一个用来把Ceph挂在为系统盘的必要组件,但是这个组件并不成熟,只能说能用,但是现阶段连集群都不支持
首先来手动增加一个mds的key
sudo -u ceph mkdir /var/lib/ceph/mds/ceph-node0/
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node0/keyring --gen-key -n mds.node0
这个node0就是节点名字,可以随便取名
给他授权
ceph auth add mds.node0 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node0/keyring
编辑ceph.conf,添加以下内容
vim /etc/ceph/ceph.conf
[mds.node0]
host = node0
手动启动mds
ceph-mds --cluster ceph -i 0 -m star01:6789
cluster后面跟的是集群的名字,-m后面跟的是mon节点的ip和端口号,默认端口就是6789了
这个时候mds应该已经启动了,可以用这个命令看看它当前的状态
ceph mds stat
我这里的显示是:
e2:, 1 up:standby
嗯,这就是对的了,mds standby,启动了,但是没啥事干,因为我们还没有建立对应的pool
接下来来建立metada和data两个pool
ceph osd pool create cephfs_metadata 33
ceph osd pool create cephfs_data 33
我建立了一个叫做 cephfs_metadata 的pool和一个叫cephfs_data的pool,每个都给了33个pg
接下来创建cephfs
ceph fs new musicfs cephfs_metadata cephfs_data
我建立了一个叫做musicfs的cephfs,它的metadata放在了我刚才建立的metada pool,数据放在了我刚才建立的data pool
这个时候我们再看看mds的状态
ceph mds stat
应该会显示up:active了,这就对了
接下来是mount到本地驱动器
一句话完成
mount -t ceph 192.168.206.100:6789:/ /mnt/ceph -o name=admin,secret=AQANyGFaTo/pMhAAxcBmBxe6lEJWZZBBUOOsog==
其中前面一部分是ceph的mon地址,随便找个一都行,/mnt/ceph是我本地的地址,secret是我/etc/ceph/ceph.client.admin.keyring文件的key的值
接下来就可以在df里面看到硬盘了
主要参考的是这篇:http://docs.ceph.com/docs/master/rados/operations/add-or-rm-mons/
我用的第二个主机名是star02,ip是192.168.206.101
首先创建mon所在的文件夹
mkdir /var/lib/ceph/mon/ceph-star02
把第一台主机生成的/tem/ceph.mon.keyring 拷贝至/etc/
同样,把第一台主机生成的/etc/ceph/ceph.client.admin.keyring 也拷贝至/etc/ceph/
修改/etc/ceph/ceph.conf为
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01, star02
mon host = 192.168.206.100, 192.168.206.101
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
运行
ceph auth get mon. -o /tmp/ceph.mon.keyring
生成一个新的mapfile
monmaptool --create --add star01 192.168.206.100 --add star02 192.168.206.101 --add star03 192.168.206.102 --fsid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 --clobber /tmp/monmap
这次我添加了三台mon
注册mapfile
ceph mon getmap -o /tmp/monmap
创建
sudo -u ceph ceph-mon --mkfs -i star03 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
启动
systemctl status ceph-mon@star02
【如果你碰到无法启动的问题,首先检查文件夹权限,包括/etc/ceph、/var/lib/ceph,这两个文件夹下所有的文件所有者都应该是ceph】
查看结果:
ceph mon stat
此时应该显示
e2: 2 mons at {star01=192.168.206.100:6789/0,star02=192.168.206.101:6789/0}, election epoch 6, quorum 0,1 star01,star02
在主机上也应该显示同样的结果
其实此时不用变更主机上的ceph.conf也没问题,也就是mon本来就支持动态加入到集群中,毕竟,我们在添加ceph-authtool的时候使用的是allow *,不过为了保险起见,我还是把ceph.conf编辑成和第二节点一致
添加第一个OSD
我选择使用的是ceph最新版才出来的针对裸设备使用的bluestone存储方案,据说性能有大幅度的提升,介绍可以看这里:
https://www.sebastien-han.fr/blog/2016/03/21/ceph-a-new-store-is-coming/
安装前需要先修改一下ceph的配置:
vim /etc/ceph/ceph.conf
我改成了这样:
[global]
fsid = 58943f07-a011-4838-b2b0-33d5ab5d2ad1
mon initial members = star01, star02
mon host = 192.168.206.100, 192.168.206.101
public network = 192.168.206.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
enable experimental unrecoverable data corrupting features = bluestore rocksdb
bluestore fsck on mount = true
bluestore block db size = 67108864
bluestore block wal size = 134217728
bluestore block size = 5368709120
osd objectstore = bluestore
[osd]
bluestore = true
加上了黑体的部分
安装也很简单,一句话完成
ceph-disk prepare --bluestore --cluster ceph --cluster-uuid 58943f07-a011-4838-b2b0-33d5ab5d2ad1 /dev/sdb
--cluster之后是你的集群的名字,uuid是你集群的fsid,最后是目标硬盘
目标硬盘一定要是一块没有任何分区记录的裸设备
如果出现各种莫名奇妙的python报错,基本上就是设备没有正确的删除分区,用fdisk /dev/sdb,然后一路ddddd最后w退出删除全部分区再次安装即可
中间出问题了启动不了也可以在集群中直接ceph osd rm 0(0是osd的id,用ceph osd tree查看osd的启动情况,把安装时候没有正确启动的直接删除重新安装即可,后来安装的会自动填空的)
这条命令运行完之后会自动在/var/lib/ceph/osd/ceph-xx下挂载你新硬盘的一个分区,一般来说是一个xfs分区,然后在systemd中也会出现一个叫做ceph-osd@xx的启动项目并且自动帮你设置成enable了,相当智能
装完了来装MDS,这个是一个用来把Ceph挂在为系统盘的必要组件,但是这个组件并不成熟,只能说能用,但是现阶段连集群都不支持
首先来手动增加一个mds的key
sudo -u ceph mkdir /var/lib/ceph/mds/ceph-node0/
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node0/keyring --gen-key -n mds.node0
这个node0就是节点名字,可以随便取名
给他授权
ceph auth add mds.node0 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node0/keyring
编辑ceph.conf,添加以下内容
vim /etc/ceph/ceph.conf
[mds.node0]
host = node0
手动启动mds
ceph-mds --cluster ceph -i 0 -m star01:6789
cluster后面跟的是集群的名字,-m后面跟的是mon节点的ip和端口号,默认端口就是6789了
这个时候mds应该已经启动了,可以用这个命令看看它当前的状态
ceph mds stat
我这里的显示是:
e2:, 1 up:standby
嗯,这就是对的了,mds standby,启动了,但是没啥事干,因为我们还没有建立对应的pool
接下来来建立metada和data两个pool
ceph osd pool create cephfs_metadata 33
ceph osd pool create cephfs_data 33
我建立了一个叫做 cephfs_metadata 的pool和一个叫cephfs_data的pool,每个都给了33个pg
接下来创建cephfs
ceph fs new musicfs cephfs_metadata cephfs_data
我建立了一个叫做musicfs的cephfs,它的metadata放在了我刚才建立的metada pool,数据放在了我刚才建立的data pool
这个时候我们再看看mds的状态
ceph mds stat
应该会显示up:active了,这就对了
接下来是mount到本地驱动器
一句话完成
mount -t ceph 192.168.206.100:6789:/ /mnt/ceph -o name=admin,secret=AQANyGFaTo/pMhAAxcBmBxe6lEJWZZBBUOOsog==
其中前面一部分是ceph的mon地址,随便找个一都行,/mnt/ceph是我本地的地址,secret是我/etc/ceph/ceph.client.admin.keyring文件的key的值
接下来就可以在df里面看到硬盘了
评论
发表评论