初次入门,使用ceph-deploy工具快速安装(相比于手工安装)一套三节点的Ceph集群,并最终创建对象存储服务进行系统验证。
预先了解两个基本概念:
- mon:osd监视器,osd的守护进程,通常一个osd对应一个mon
- osd:实际存储数据,通常直接对应一块硬盘
三台机器(Ubuntu 16.04):172.31.0.5,172.31.0.13,172.31.0.22,分别命名为ceph0~2,每台机器分别部署一个osd和mon,其中172.31.0.5(ceph0)作为部署及管理节点。下面从干净的新系统开始进行Ceph(mimic)部署,大概步骤如下:
- 修改主机名并配置hosts
- 安装NTP服务
- 创建部署用户
- 设置ssh互信
- 修改仓库源
- 安装ceph-deploy
- 创建集群
- 创建对象存储
STEP 0
如果不想在安装过程中给自己添加太多麻烦的话,关闭防火墙及selinux。
修改主机名并配置hosts(所有节点)
ceph-deploy要求使用主机名进行连接,所以为了简单好记把主机名修改为ceph0~2,并同步修改hosts。
这里有个坑需要注意:主机名一定要与hosts中的名称对应上,否则在创建集群过程中会报错。比如hosts中有一条记录是192.168.1.1 ceph2
,那么192.168.1.1这台主机的主机名也一定要是ceph2。
修改主机名(Centos与Debian系文件名不同,请注意区分):
chmod +w /etc/hostname
vi /etc/hostname
修改hosts,修改后内容如下:
vi /etc/hosts
172.31.0.5 ceph0
172.31.0.13 ceph1
172.31.0.22 ceph2
三台机器使用主机名互ping,正确响应即为成功。
安装NTP服务(所有节点)
所有跟数据相关的软件对时间要求还是比较高的,建议安装NTP服务保证时间同步。具体过程参考这一篇文章:Linux配置ntp服务器及参数详解。
创建部署用户(所有节点)
其实使用root用户操作完全可以,但是考虑到要支持用户免密登录,还是推荐创建一个单独部署用的账户。官方文档是这样说的:
The ceph-deploy utility must login to a Ceph node as a user that has passwordless sudo privileges, because it needs to install software and configuration files without prompting for passwords.
Recent versions of ceph-deploy support a --username option so you can specify any user that has password-less sudo (including root, although this is NOT recommended). To use ceph-deploy --username {username}, the user you specify must have password-less SSH access to the Ceph node, as ceph-deploy will not prompt you for a password.
We recommend creating a specific user for ceph-deploy on ALL Ceph nodes in the cluster. Please do NOT use “ceph” as the user name. A uniform user name across the cluster may improve ease of use (not required), but you should avoid obvious user names, because hackers typically use them with brute force hacks (e.g., root, admin, {productname}). The following procedure, substituting {username} for the user name you define, describes how to create a user with passwordless sudo.
这里我采用ceph-server作为部署账户(名称不要用ceph,会产生冲突)。
useradd -d /home/ceph -m ceph-server
passwd ceph-server
ceph-deploy要求该用户具有sodo权限且可以无密码登录,需要修改/etc/soduers
文件为ceph-server用户分配root权限,但是linux不建议直接修改本文件。
采取推荐的方案,在/etc/sudoers.d
文件夹下面增加用户同名文件并设置权限,操作如下:
cd /etc/sudoers.d
touch ceph-server
文件内容为ceph-server ALL = (root) NOPASSWD:ALL
,保存退出并修改权限:
chmod 0440 /etc/sudoers.d/ceph-server
设置ssh互信(部署节点)
如果不设置互信的话就没法实现免密登录,在安装过程就就会一遍又一遍地要求你输入密码,不胜其烦。
如果没有ssh服务的话先自行安装一下,不再赘述。
生成密钥(不要密码)并将公钥发送至各个节点:
ssh-keygen
ssh-copy-id ceph-server@ceph0
ssh-copy-id ceph-server@ceph1
ssh-copy-id ceph-server@ceph2
注意此处有第二个坑:当前我们是以root用户登录在ceph0节点上,但是ceph0节点的部署用户是ceph-server而不是root,所以此处也需要设置ceph-server@ceph0的ssh互信。
操作完成后在所有节点的ceph-server用户目录下.ssh文件夹中旅应该是这样的:
同时在root@ceph0上进行登录测试:
ssh ceph-server@ceph0
ssh ceph-server@ceph0
ssh ceph-server@ceph0
成功登录并且没有出现密码提示即为成功。
修改仓库源(所有节点)
此过程可能会因发行版的不通而存在差异,请注意。此处以Ubuntu为例,其他发行版请参见官方文档。
首先添加密钥:
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
向/etc/apt/source.list
中添加以下内容:
deb https://download.ceph.com/debian-{release}/ {code-name} main
其中,{code-name}使用lsb_release -sc
命令获得,{release}替换为想要安装的Ceph版本,在这里查看Ceph所有版本,这里选取mimic进行安装,例如:
deb http://mirrors.ustc.edu.cn/ceph/debian-mimic/ xenial main
建议一并将其他源修改为国内镜像源以加快下载速度。
安装ceph-deploy(部署节点)
经过一系列的preflight check终于可以正式开始部署进程了。先安装部署工具:
apt install ceph-deploy
为了ceph-deploy能够识别主机名需要在要执行ceph-deploy命令的用户.ssh
目录下添加一个配置文件(执行ceph-deploy命令的用户可以和部署用户不是同一个,我这里用root用户执行命令):
cd ~/.ssh/
touch config
vi config
文件内容按照如下格式配置,注意进行相应字段的替换:
Host ceph0
Hostname ceph0
User ceph-server
Host ceph1
Hostname ceph1
User ceph-server
Host ceph2
Hostname ceph2
User ceph-server
找一个合适的位置创建一个文件夹,用来保存ceph-deploy工具生成的配置文件以及日志文件,我这里选取/root/ceph-deploy/
,以下命令皆在此目录中执行:
ceph-deploy new ceph0 ceph1 ceph2
正确无误的话目录下会生成一个ceph.conf
文件,内容如下:
fsid = 767f116d-6974-467d-944c-8ea310f26b00
mon_initial_members = ceph0, ceph1, ceph2
mon_host = 172.31.0.5,172.31.0.13,172.31.0.22
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
检查mon_host中的ip地址是否是本机ip。
注意这里有第两个坑:
首先mon_host中的地址一定要和ifconfig中显示的一样,如果是买的云服务器这里一定要写内网ip而不是公网ip;
务必添加一行public network = {ip-address}/{bits},根据实际情况计算一下子网,例如我的是public network = 172.31.0.0/20。否则在创建集群的时候会报错。
创建集群(部署节点)
在上面的目录下继续执行以下命令:
ceph-deploy install ceph0 ceph1 ceph2
ceph-deploy mon create-initial
如果这两步出错,请先检查上文中标黄的部分,一般问题都可以顺利解决。下面列举两个我遇到的问题:
- Unable to resolve host:ceph0
这个问题基本上是因为hosts中配置的ip地址不正确,host中配置的地址应该与ifconfig中获取的ip地址一样,不要出现一个是公网ip一个是内网ip的情况(主要出现在购买的云服务器上)。 - admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
这个问题可能性比较多,需要向上翻具体的日志,尤其注意WARNIN字样的提示,例如我的是:
显然这是说主机名与host中的名称不一致,修改一致即可。
此步骤完成后当前目录下应该会出现这些文件:
执行命令ceph -s
,输出结果如下:
继续创建osd,请先检查挂载磁盘的状态,建议使用一块干净的磁盘或分区。执行以下命令:
ceph-deploy osd create --data /dev/vdc ceph0
ceph-deploy osd create --data /dev/vdc ceph1
ceph-deploy osd create --data /dev/vdc ceph2
完成后查看状态应输出如下结果:
提示no active mgr,也就是说没有osd守护进程,执行命令:
ceph-deploy mgr create ceph0 ceph1 ceph2
完成后再来查看状态:
至此集群部署完成。接下来属于附加内容。
创建对象存储(部署节点)
执行命令:
ceph-deploy rgw create ceph0
提示The Ceph Object Gateway (RGW) is now running on host ceph0 and default port 7480
即为安装成功。
创建一个存储池,官方推荐少于5个osd设置pg_num为128:
ceph osd pool create testPool 128
本地新建一个文件后上传至对象存储:
rados put testFile ../testFile --pool=testPool
查看存储池内文件,若存在刚刚上传的文件即为成功:
rados -p testPool ls
testFile
查看ceph状态,可以看到刚刚上传的文件已经占用空间了:
查看文件保存路径:
至此安装全部完成,接下来会完全拆除环境并通过手工方式进行安装。