一、准备机器
本文描述如何在 CentOS 7 下搭建 Ceph 存储集群(STORAGE CLUSTER)。
一共4台机器,其中1个是管理节点,其他3个是ceph节点:
hostname
ip
role
描述
admin-node
192.168.0.130
ceph-deploy
管理节点
node1
192.168.0.131
mon.node1
ceph节点,监控节点
node2
192.168.0.132
osd.0
ceph节点,OSD节点
node3
192.168.0.133
osd.1
ceph节点,OSD节点
管理节点:admin-node
ceph节点:node1, node2, node3
所有节点:admin-node, node1, node2, node3
1. 修改主机名
2. 修改hosts文件
1 | 192.168.0.130 admin-node |
3. 确保联通性(管理节点)
用 ping 短主机名( hostname -s )的方式确认网络联通性。解决掉可能存在的主机名解析问题。
1 | $ ping node1 |
二、ceph节点安装
1. 安装NPT(所有节点)
我们建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障,详情见时钟。
2. 安装SSH(所有节点)
3. 创建部署 CEPH 的用户(所有节点)
ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。
建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。
在各 Ceph 节点创建新用户
确保各 Ceph 节点上新创建的用户都有 sudo 权限
1 | # echo "zeng ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/zeng |
4. 允许无密码SSH登录(管理节点)
因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。
- 生成 SSH 密钥对
不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:
1 | //切换用户,如不特别说明,后续的操作均在该用户下进行 |
- 把公钥拷贝到各 Ceph 节点
1 | $ ssh-copy-id zeng@node1 |
完成后, /home/zeng/.ssh/ 路径下:
- admin-node 多了文件
id_rsa
、id_rsa.pub
和known_hosts
; - node1, node2, node3 多了文件
authorized_keys
。
- 修改~/.ssh/config 文件
修改 ~/.ssh/config 文件(没有则新增),这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了。
1 |
|
1 | Host admin-node |
- 测试ssh能否成功
1 | $ ssh zeng@node1 |
- 问题:如果出现 “Bad owner or permissions on /home/zeng/.ssh/config”,执行命令修改文件权限。
1 $ sudo chmod 644 ~/.ssh/config
5. 引导时联网(ceph节点)
Ceph 的各 OSD 进程通过网络互联并向 Monitors 上报自己的状态。如果网络默认为 off ,那么 Ceph 集群在启动时就不能上线,直到你打开网络。
1 | $ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 |
6. 开放所需端口(ceph节点)
Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。
1 | $ sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent |
7. 终端(TTY)(ceph节点)
在 CentOS 和 RHEL 上执行 ceph-deploy 命令时可能会报错。如果你的 Ceph 节点默认设置了 requiretty ,执行
1 | $ sudo visudo |
找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty 或者直接注释掉,这样 ceph-deploy 就可以用之前创建的用户(创建部署 Ceph 的用户 )连接了。
编辑配置文件 /etc/sudoers 时,必须用 sudo visudo 而不是文本编辑器。
8. 关闭selinux(ceph节点)
1 | $ sudo setenforce 0 |
要使 SELinux 配置永久生效(如果它的确是问题根源),需修改其配置文件 /etc/selinux/config:
1 | $ sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config |
即修改 SELINUX=disabled。
9. 配置EPEL源(管理节点)
1 | $ sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org* |
10. 把软件包源加入软件库(管理节点)
1 | $ sudo vi /etc/yum.repos.d/ceph.repo |
把如下内容粘帖进去,保存到 /etc/yum.repos.d/ceph.repo 文件中。
1 | [Ceph] |
11. 更新软件库并安装ceph-deploy(管理节点)
1 | $ sudo yum update && sudo yum install ceph-deploy |
时间可能比较久,耐心等待。
三、搭建集群
在 管理节点 下执行如下步骤:
1. 安装准备,创建文件夹
在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。
1 | $ cd ~ |
注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:
1 | // 删除安装包 |
2. 创建集群和监控节点
创建集群并初始化监控节点:
1 | $ ceph-deploy new {initial-monitor-node(s)} |
这里node1是monitor节点,所以执行:
1 | $ ceph-deploy new node1 |
完成后,my-clster 下多了3个文件:ceph.conf
、ceph-deploy-ceph.log
和 ceph.mon.keyring
。
- 问题:如果出现 “[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure
requiretty
is disabled for node1”,执行 sudo visudo 将 Defaults requiretty 注释掉。
3. 修改配置文件
1 | $ cat ceph.conf |
内容如下:
1 | [global] |
把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把 osd pool default size = 2 加入 [global] 段:
1 | $ sed -i '$a\osd pool default size = 2' ceph.conf |
如果有多个网卡,
可以把 public network 写入 Ceph 配置文件的 [global] 段:
1 | public network = {ip-address}/{netmask} |
4. 安装Ceph
在所有节点上安装ceph:
1 | $ ceph-deploy install admin-node node1 node2 node3 |
- 问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
解决方法:
1 sudo yum -y remove epel-release
5. 配置初始 monitor(s)、并收集所有密钥
1 | $ ceph-deploy mon create-initial |
完成上述操作后,当前目录里应该会出现这些密钥环:
1 | {cluster-name}.client.admin.keyring |
6. 添加2个OSD
- 登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。
1 | $ ssh node2 |
- 然后,从管理节点执行 ceph-deploy 来准备 OSD 。
1 | $ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1 |
- 最后,激活 OSD 。
1 | $ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1 |
7.把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点
1 | $ ceph-deploy admin admin-node node1 node2 node3 |
8. 确保你对 ceph.client.admin.keyring 有正确的操作权限
1 | $ sudo chmod +r /etc/ceph/ceph.client.admin.keyring |
9. 检查集群的健康状况和OSD节点状况
1 | [zeng@admin-node my-cluster]$ ceph health |
四、扩展集群(扩容)
1. 添加OSD
在 node1 上添加一个 osd.2。
- 创建目录
1 | $ ssh node1 |
- 准备OSD
1 | $ ceph-deploy osd prepare node1:/var/local/osd2 |
- 激活OSD
1 | $ ceph-deploy osd activate node1:/var/local/osd2 |
- 检查集群状况和OSD节点:
1 | [zeng@admin-node my-cluster]$ ceph -s |
2. 添加MONITORS
在 ndoe2 和 node3 添加监控节点。
- 修改
mon_initial_members
、mon_host
和public network
配置:
1 | [global] |
- 推送至其他节点:
1 | $ ceph-deploy |
- 添加监控节点:
1 | $ ceph-deploy mon add node2 node3 |
- 查看集群状态和监控节点:
1 | [zeng@admin-node my-cluster]$ ceph -s |