Ceph 集群环境搭建笔记
集群部署架构:
10.190.177.140:admin-node(ceph-deploy)-------> 10.190.177.160:node1(mon)
-------> 10.190.177.162:node2(osd0)
-------> 10.190.177.163:node3(osd1)
ceph版本选择
版本名称 版本号 发布时间Argonaut 0.48版本(LTS) 2012年6月3日Bobtail 0.56版本(LTS) 2013年5月7日Cuttlefish 0.61版本 2013年1月1日Dumpling 0.67版本(LTS) 2013年8月14日Emperor 0.72版本 2013年11月9Firefly 0.80版本(LTS) 2014年5月Giant Giant October 2014 - April 2015Hammer Hammer April 2015 - November 2016Infernalis Infernalis November 2015 - June 2016Jewel 10.2.9 2016年4月Kraken 11.2.1 2017年10月Luminous 12.2.12 2017年10月mimic 13.2.7 2018年5月nautilus 14.2.5 2019年2月octopus 15.2.1 2020年4月
这里我们选择luminous版本
部署
注意:这里的执行,如果没有特殊说明,就需要在所有的节点上执行所有的操作,如果只是在某一个节点上执行的时候,我们会具体说明。
-
添加 release key :
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add - -
添加Ceph软件包源,用Ceph稳定版(如
cuttlefish
、dumpling
、emperor
、firefly
、luminous
等等)替换掉{ceph-stable-release}
。例如:
echo deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
这里因为我们选择的为luminous:
所以执行为:
echo deb http://download.ceph.com/debian-luminous/ bionic main | sudo tee /etc/apt/sources.list.d/ceph.list -
更新你的仓库,并在admin集群部署节点上安装
ceph-deploy
:所有节点上执行:
sudo apt-get update只有在部署节点上:
sudo apt-get install ceph-deploy -
修改host和hostname:
在每个节点上执行sudo vi /etc/hosts,将一下内容添加到最后:
10.190.177.160 node1
10.190.177.162 node2
10.190.177.163 node3在各个节点上分别执行:
hostnamectl --static set-hostname admin-node
hostnamectl --static set-hostname node1
hostnamectl --static set-hostname node2
hostnamectl --static set-hostname node3 -
安装NTP
我们建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障,详情见时钟。
sudo apt-get install ntp
sudo /etc/init.d/ntp restart //重启
sudo systemctl enable ntp.service //是能开机启动服务
确保在各 Ceph 节点上启动了 NTP 服务,并且要使用同一个 NTP 服务器,详情见 NTP 。
-
安装ssh服务器:
在所有 Ceph 节点上执行如下步骤:
在各 Ceph 节点安装 SSH 服务器(如果还没有):
sudo apt-get install openssh-server或者
sudo yum install openssh-server确保所有 Ceph 节点上的 SSH 服务器都在运行。
-
确保部署用户权限
7.1 用户
eph-deploy
工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用sudo
的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。较新版的
ceph-deploy
支持用--username
选项提供可无密码使用sudo
的用户名(包括root
,虽然不建议这样做)。使用ceph-deploy --username {username}
命令时,指定的用户必须能够通过无密码 SSH 连接到 Ceph 节点,因为ceph-deploy
中途不会提示输入密码。我们建议在集群内的所有 Ceph 节点上给
ceph-deploy
创建一个特定的用户,但不要用 “ceph” 这个名字。全集群统一的用户名可简化操作(非必需),然而你应该避免使用知名用户名,因为黑客们会用它做暴力破解(如root
、admin
、{productname}
)。后续步骤描述了如何创建无sudo
密码的用户,你要用自己取的名字替换{username}
。Note:从 Infernalis 版起,用户名 “ceph” 保留给了 Ceph 守护进程。如果 Ceph 节点上已经有了 “ceph” 用户,升级前必须先删掉这个用户。
这里所有的节点我们都使用username:lhp这个用户。
echo "lhp ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/lhp
sudo chmod 0440 /etc/sudoers.d/lhp
同时在修改下/etc/sudoer文件,将lhp用户添加到为和root用户一样的权限:
# User privilege specification
root ALL=(ALL:ALL) ALL
#增加内容
lhp ALL=(ALL:ALL) ALL7.2 允许无密码 SSH 登录
正因为
ceph-deploy
不支持输入密码,你必须在admin管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。ceph-deploy
会尝试给初始 monitors 生成 SSH 密钥对。-
生成 SSH 密钥对,但不要用
sudo
或root
用户。提示 “Enter passphrase” 时,直接回车,口令即为空:
ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub. -
把公钥拷贝到各 Ceph 节点,把下列命令中的
{username}
替换成前面创建部署 Ceph 的用户里的用户名。
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3
实际执行:
ssh-copy-id lhp@node1
ssh-copy-id lhp@node2
ssh-copy-id lhp@node3 -
(推荐做法)修改
ceph-deploy
管理节点上的~/.ssh/config
文件,这样ceph-deploy
就能用你所建的用户名登录 Ceph 节点了,而无需每次执行ceph-deploy
都要指定--username {username}
。这样做同时也简化了ssh
和scp
的用法。把{username}
替换成你创建的用户名。
Host node1
Hostname node1
User {username}
Host node2
Hostname node2
User {username}
Host node3
Hostname node3
User {username}实际执行内容:
Host node1
Hostname node1
User lhp
Host node2
Hostname node2
User lhp
Host node3
Hostname node3
User lhp修改完毕以后,在部署节点上测试一下ssh登录各个节点:ssh node1
-
-
正式部署节点
第一次练习时,我们创建一个 Ceph 存储集群,它有一个 Monitor 和两个 OSD 守护进程。一旦集群达到
active + clean
状态,再扩展它:增加第三个 OSD 、增加元数据服务器和两个 Ceph Monitors。为获得最佳体验,先在管理节点上创建一个目录,用于保存ceph-deploy
生成的配置文件和密钥对。
mkdir my-cluster
cd my-clusterceph-deploy
会把文件输出到当前目录,所以请确保在此目录下执行ceph-deploy
。Important: 如果你是用另一普通用户登录的,不要用
sudo
或在root
身份运行ceph-deploy
,因为它不会在远程主机上调用所需的sudo
命令。
创建集群:
如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys用下列命令可以连 Ceph 安装包一起清除:
ceph-deploy purge {ceph-node} [{ceph-node}]如果执行了
purge
,你必须重新安装 Ceph 。在管理节点上,进入刚创建的放置配置文件的目录,用
ceph-deploy
执行如下步骤。
8.1. 创建集群。
ceph-deploy new {initial-monitor-node(s)}例如:
ceph-deploy new node1在当前目录下用
ls
和cat
检查ceph-deploy
的输出,应该有一个 Ceph 配置文件、一个 monitor 密钥环和一个日志文件。详情见 ceph-deploy new -h 。
8.2. 安装 Ceph 。
ceph-deploy install {ceph-node} [{ceph-node} ...]例如:
ceph-deploy install node1 node2 node3ceph-deploy
将在各节点安装 Ceph 。注:如果你执行过
ceph-deploy purge
,你必须重新执行这一步来安装 Ceph 。
8.3. 配置初始 monitor(s)、并收集所有密钥:
ceph-deploy mon create-initial完成上述操作后,当前目录里应该会出现这些密钥环:
-
{cluster-name}.client.admin.keyring
-
{cluster-name}.bootstrap-osd.keyring
-
{cluster-name}.bootstrap-mds.keyring
-
{cluster-name}.bootstrap-rgw.keyring
8.4. 添加两个OSD。
为了快速地安装,这篇快速入门把目录而非整个硬盘用于 OSD 守护进程。如何为 OSD 及其日志使用独立硬盘或分区,请参考 ceph-deploy osd 。登录到 Ceph 节点、并给 OSD 守护进程创建一个目录。
ssh node2 //登录到node2节点上
sudo mkdir /var/local/osd0
exit
ssh node3 //登录到node3节点上
sudo mkdir /var/local/osd1
exit然后,从管理节点执行
ceph-deploy
来准备 OSD 。
ceph-deploy osd prepare {ceph-node}:/path/to/directory例如:
ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1最后,激活 OSD 。
ceph-deploy osd activate {ceph-node}:/path/to/directory例如:
ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1用
ceph-deploy
把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和ceph.client.admin.keyring
了。
ceph-deploy admin {admin-node} {ceph-node}例如:
ceph-deploy admin admin-node node1 node2 node3
ceph-deploy
和本地管理主机(admin-node
)通信时,必须通过主机名可达。必要时可修改/etc/hosts
,加入管理主机的名字。确保你对
ceph.client.admin.keyring
有正确的操作权限。sudo chmod +r /etc/ceph/ceph.client.admin.keyring
检查集群的健康状况。
ceph health
等 peering 完成后,集群应该达到
active + clean
状态。 -
-
添加元数据服务器
至少需要一个元数据服务器才能使用 CephFS ,执行下列命令创建元数据服务器:
ceph-deploy mds create {ceph-node}
例如:
ceph-deploy mds create node1
Note: 当前生产环境下的 Ceph 只能运行一个元数据服务器。你可以配置多个,但现在我们还不会为多个元数据服务器的集群提供商业支持。
-
出错信息收录
-
参考链接
-