本人小菜鸟一只,刚接触Linux,第一件事就是学习搭建ceph,看书的确不如实战学的多学的快,在此写博客记录自己的历程,有很多不足的地方希望各位指正。
(原创博文,转载请说明出处)
搭建环境:Ubuntu14.04
Ceph版本,0.80
(我之前搭建过0.72版本的,默认至少需要1个mon节点,2个osd节点。但是0.80这个版本似乎默认需要3个osd节点。)
虚拟机搭建,用了四个节点(没有加mds):
mona 172.16.4.12
osda 172.16.4.13
osdb 172.16.4.14
osdc 172.16.4.10
偷一下懒,不另外创建用户了,直接用root。
允许root远程访问(因为学校的虚拟机设置了禁止远程访问,没有这个问题的朋友可以跳过此步骤):
修改/etc/ssh/sshd_config文件:
#vi /etc/ssh/sshd_config
把PermitRootLogin without-password
改为PermitRootLogin yes
sudo service sshrestart
( 别忘了重置一下root密码:#passwd root )
修改主机名:
#vi /etc/hostname (默认user改成mona, osda, osdb, osdc)
设置各节点的hosts文件
#vi /etc/hosts
把默认的127.0.1.1 user 修改成 127.0.1.1 mon(osda,osdb,osdc)
同时添加以下:
172.16.4.12 mona
172.16.4.13 osda
172.16.4.14 osdb
172.16.4.10 osdc
获得ssh-keygen,几个节点相互复制,保证能够无密码访问
#ssh-keygen
得到以下内容:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:29:5c:d7:e4:0b:7b:9b:0e:83:84:90:7f:08:d6:ac root@mona
The key's randomart image is:
+--[ RSA 2048]----+
| |
| + |
| = o . |
| . = o + |
| E + + S o |
| . + * o . |
| o = + o |
| . + o |
| .+ |
+---------------------+
复制密匙到各个节点:
# ssh-copy-id root@mona
# ssh-copy-id root@osda
# ssh-copy-id root@osdb
# ssh-copy-id root@osdc
所有节点重复以上步骤。
检验是否可以相互无密码访问
在mona节点输入#ssh osda, #ssh osdb, #ssh osdc
以此类推。
完成后在每个节点上安装依赖库:
#sudo apt-get install autotools-devautoconf automake cdbs gcc g++ git libboost-dev libedit-dev libssl-dev libtoollibfcgi libfcgi-dev libfuse-dev linux-kernel-headers libcrypto++-devlibcrypto++ libexpat1-dev pkg-config
# sudo apt-get install uuid-devlibkeyutils-dev libgoogle-perftools-dev libatomic-ops-dev libaio-devlibgdata-common libgdata13 libsnappy-dev libleveldb-dev
此环境下可以直接安装ceph库
#apt-get update && apt-get install ceph ceph-common ceph-mds
#apt-get install ceph-deploy
结束后 #ceph –v 可查看ceph版本(0.80.1)
此步骤之后有两种方法搭建ceph:
一,创建配置文件ceph.conf,从配置文件启动。
二,用ceph-deploy安装一个mon节点后,把其他的osd和mds通过它一个个加进来。
我用的第二种方法,以下步骤均在mon节点上执行:
# ceph-deployinstall mona osda osdb osdc (此前确保依赖库都安装完成,否则会出错)
到每个osd节点创建相应的文件夹:
例如:# ssh osda
# mkdir /var/local/osd0
(或者 # mkdir/var/lib/ceph/osd/ceph-0)
完成后创建集群的第一个节点,monitor节点
# ceph-deploymon create mona
[ceph_deploy.cli][INFO ] Invoked (1.4.0): /usr/bin/ceph-deploy mon create mona
[ceph_deploy.mon][DEBUG ] Deploying mon, cluster ceph hosts mona
[ceph_deploy.mon][DEBUG ] detecting platform for host mona ...
[mona][DEBUG ] connected to host: mona
[mona][DEBUG ] detect platform information from remote host
[mona][DEBUG ] detect machine type
[ceph_deploy.mon][INFO ] distro info: Ubuntu 14.04 trusty
[mona][DEBUG ] determining if provided host has same hostname in remote
[mona][DEBUG ] get remote short hostname
[mona][DEBUG ] deploying mon to mona
[mona][DEBUG ] get remote short hostname
[mona][DEBUG ] remote hostname: mona
[mona][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[mona][DEBUG ] create the mon path if it does not exist
[mona][DEBUG ] checking for done path: /var/lib/ceph/mon/ceph-mona/done
[mona][DEBUG ] done path does not exist: /var/lib/ceph/mon/ceph-mona/done
[mona][INFO ] creating keyring file: /var/lib/ceph/tmp/ceph-mona.mon.keyring
[mona][DEBUG ] create the monitor keyring file
[mona][INFO ] Running command: ceph-mon --cluster ceph --mkfs -i mona --keyring /var/lib/ceph/tmp/ceph-mona.mon.keyring
[mona][DEBUG ] ceph-mon: mon.noname-a 172.16.4.12:6789/0 is local, renaming to mon.mona
[mona][DEBUG ] ceph-mon: set fsid to d6913f95-55cd-4b06-9696-484d6167b2fa
[mona][DEBUG ] ceph-mon: created monfs at /var/lib/ceph/mon/ceph-mona for mon.mona
[mona][INFO ] unlinking keyring file /var/lib/ceph/tmp/ceph-mona.mon.keyring
[mona][DEBUG ] create a done file to avoid re-doing the mon deployment
[mona][DEBUG ] create the init path if it does not exist
[mona][DEBUG ] locating the `service` executable...
[mona][INFO ] Running command: initctl emit ceph-mon cluster=ceph id=mona
[mona][INFO ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.mona.asok mon_status
[mona][DEBUG ] ********************************************************************************
[mona][DEBUG ] status for monitor: mon.mona
[mona][DEBUG ] {
[mona][DEBUG ] "election_epoch": 2,
[mona][DEBUG ] "extra_probe_peers": [],
[mona][DEBUG ] "monmap": {
[mona][DEBUG ] "created": "0.000000",
[mona][DEBUG ] "epoch": 1,
[mona][DEBUG ] "fsid": "d6913f95-55cd-4b06-9696-484d6167b2fa",
[mona][DEBUG ] "modified": "0.000000",
[mona][DEBUG ] "mons": [
[mona][DEBUG ] {
[mona][DEBUG ] "addr": "172.16.4.12:6789/0",
[mona][DEBUG ] "name": "mona",
[mona][DEBUG ] "rank": 0
[mona][DEBUG ] }
[mona][DEBUG ] ]
[mona][DEBUG ] },
[mona][DEBUG ] "name": "mona",
[mona][DEBUG ] "outside_quorum": [],
[mona][DEBUG ] "quorum": [
[mona][DEBUG ] 0
[mona][DEBUG ] ],
[mona][DEBUG ] "rank": 0,
[mona][DEBUG ] "state": "leader",
[mona][DEBUG ] "sync_provider": []
[mona][DEBUG ] }
[mona][DEBUG ] ********************************************************************************
[mona][INFO ] monitor: mon.mona is running
[mona][INFO ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.mona.asok mon_status
收集密匙:# ceph-deploy gatherkeys mona
[ceph_deploy.cli][INFO ] Invoked (1.4.0): /usr/bin/ceph-deploy gatherkeys mona
[ceph_deploy.gatherkeys][DEBUG ] Checking mona for /etc/ceph/ceph.client.admin.keyring
[mona][DEBUG ] connected to host: mona
[mona][DEBUG ] detect platform information from remote host
[mona][DEBUG ] detect machine type
[mona][DEBUG ] fetch remote file
[ceph_deploy.gatherkeys][DEBUG ] Got ceph.client.admin.keyring key from mona.
[ceph_deploy.gatherkeys][DEBUG ] Have ceph.mon.keyring
[ceph_deploy.gatherkeys][DEBUG ] Checking mona for /var/lib/ceph/bootstrap-osd/ceph.keyring
[mona][DEBUG ] connected to host: mona
[mona][DEBUG ] detect platform information from remote host
[mona][DEBUG ] detect machine type
[mona][DEBUG ] fetch remote file
[ceph_deploy.gatherkeys][DEBUG ] Got ceph.bootstrap-osd.keyring key from mona.
[ceph_deploy.gatherkeys][DEBUG ] Checking mona for /var/lib/ceph/bootstrap-mds/ceph.keyring
[mona][DEBUG ] connected to host: mona
[mona][DEBUG ] detect platform information from remote host
[mona][DEBUG ] detect machine type
[mona][DEBUG ] fetch remote file
[ceph_deploy.gatherkeys][DEBUG ] Got ceph.bootstrap-mds.keyring key from mona.
准备osd节点:
# ceph-deploy osd prepareosda:/var/local/osd0 osdb:/var/local/osd1 osdc:/var/local/osd2
(略长,不复制了。 可能存在warning说不存在osd keying,ceph自己会创建,直接无视之)
激活osd节点:
# ceph-deploy osd activateosda:/var/local/osd0 osdb:/var/local/osd1 osdc:/var/local/osd2
(会有很多warning,最后看到add key for osd.X,就没问题了)
DONE!
查看ceph health,有degraded,inactive,unclean的pg,执行以下命令可以解决
# ceph pg dump_stuck stale
# ceph pg dump_stuck inactive
# ceph pg dump_stuck unclean
(这里可能需要等一会儿)最后得到如下图
查看osd状态如图 #ceph osd tree
PS:之前一直搭建失败,health检查一直出错,一些pg degraded+unactive+unclean,ceph无法自动处理这些问题,原因就是0.80的ceph默认3个pool,需要3个osd支持,我之前只搭了2个,导致一部分pg没有地方放(暂且这样理解吧),所以ceph也无法自愈了。加到3个osd之后问题就解决了。 如图:
图中有4个osd,是我后来测试系统加上去的,大家不要在意,无视即可。
默认pool的数量是也可以自己设置。