简介
Ceph 是一个分布式文件存储系统,具体工作原理可以参考官方文档。本博客主要介绍如何使用 ceph 实现多服务器之间的存储共享。这样一来,在使用 pycharm 进行 python 开发时,只需要与其中一台服务器进行文件同步。由于服务器之间的存储是共享的,所有需要用来跑代码的服务器都同步更新了所有最新修改,这能极大提高 python 多进程运行的效率。
部署 ceph 集群
为了实现多服务器中间的存储共享,首先需要搭建一个 ceph 集群。本教程主要针对 CentOS 系统,其他系统请自行 google。这部分内容主要参考[2],我进行了实际部署并对其内容进行了整理。
机器准备
本教程介绍的 ceph 集群包含一个管理节点,一个 monitor 节点和三个 osd 节点。其中 monitor 节点和 osd 节点可以放在同一台服务器上,因此我们需要四台服务器,hostname 分别为:
- 管理节点:admin-node
- monitor 节点:node1
- osd 节点:node1, node2, node3
修改四台机器的 hostname,以管理节点为例:
1
2cp /etc/hostname /etc/hostname.bak
vim /etc/hostname其中第一条命令的作用是对之前的 hostname 文件进行备份,在操作 linux 系统文件时我们需要养成备份的好习惯。
修改四台机器的 hosts 文件,以管理节点为例:
1
2cp /etc/hosts /etc/hosts.bak
vim /etc/hosts修改成以下内容
1
2
3
4192.168.0.100 admin-node
192.168.0.101 node1
192.168.0.102 node2
192.168.0.103 node3四台服务器的 IP 地址根据实际情况填写。
在接下来的步骤中,由于不同节点的配置方式不同,因此用括号标注了相应步骤是在哪个节点上操作的。
- 管理节点:admin-node
- ceph 节点:node1, node2, node3
- 所有节点:admin-node, node1, node2, node3
ceph 节点安装
安装 NTP 服务(所有节点)
1
sudo yum install ntp ntpdate ntp-doc
需要注意的是,当使用 yum 安装软件时,如果 terminal 提示某些源不能用或者安装比较慢时,可以相应的源备份掉并添加新的源,比如
1
mv ambarim.repo ambarim.repo.bak
创建部署 ceph 的新用户(所有节点)
1
2
3
4
5
6
7# 在目录 ceph-user-folder 创建用户 ceph-user-name
sudo useradd -d /ceph-user-folder -m ceph-user-name
# 修改 ceph-user-name 用户的密码
sudo passwd ceph-user-name
# 为 ceph-user-name 用户添加 sudo 权限
echo "ceph-user-name ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph-user-name
sudo chmod 0440 /etc/sudoers.d/cehph-user-name配置管理节点免密登录 ceph 节点(管理节点)
1
2
3
4
5
6
7
8
9
10# 切换用户至刚创建的 ceph-user-name 用户
su - ceph-user-name
# 生成密钥对
ssh-gen
# 将公钥拷贝到 ceph 节点
ssh-copy-id ceph-user-name@node1
ssh-copy-id ceph-user-name@node2
ssh-copy-id ceph-user-name@node3
# 修改 ~/.ssh/config 文件
sudo vim ~/.ssh/config加入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12Host admin-node
Hostname admin-node
User ceph-user-name
Host node1
Hostname node1
User ceph-user-name
Host node2
Hostname node2
User ceph-user-name
Host node3
Hostname node3
User ceph-user-name关闭防火墙(ceph 节点)
1
2sudo systemctl stop firewalld
sudo systemctl disable firewalld设置 TTY 终端(ceph 节点)
1
2
3# 编辑 /etc/sudoers 文件
sudo visudo
# 注释掉 Defaults requiretty 选项关闭 selinux(ceph 节点)
1
sudo setenforce 0
配置 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*
把源加入软件库(管理节点)
1
sudo vim /etc/yum.repos.d/ceph.repo
添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1安装 ceph-deploy(管理节点)
1
2
3sudo yum update
sudo yum install ceph-deploy
sudo yum install yum-plugin-prioritiesyum update 耗时较长,请耐心等待。
搭建集群
集群搭建主要在管理节点上进行,用到上一步安装的 ceph-deploy 命令。
创建安装文件夹,用于存储安装配置文件
1
2
3cd ~
mkdir my-cluster
cd my-cluster创建集群并初始化 monitor 节点
1
2# 设置 node1 为 monitor 节点
ceph-deploy new node1修改配置文件
1
sed -i '$a\osd pool default size = 2' ceph.conf
在所有节点上安装 ceph
教程[2]提供的方法是直接在管理节点上执行以下命令一键在所有节点上安装 ceph。1
ceph-deploy install admin-node node1 node2 node3
然而在我实际的安装过程中,只有管理节点能成功安装,其他节点都失败了。我的解决方案是直接登录其他节点先把 ceph 安装好,然后在管理节点上执行 ceph-deploy install 命令。具体来说,首先在 ceph 节点上添加 epel 源:
1 | vim /etc/yum.repo.d/epel.repo |
添加以下内容并保存
1 | [epel] |
然后使用 yum 进行安装
1 | sudo yum -y install ceph |
初始化 monitor 节点,并收集所有秘钥
1
ceph-deploy mon create-initial
添加三个 OSD
首先登陆到 ceph 节点,给每个 OSD 守护进程创建一个目录,并添加权限,以 node1 为例1
2
3
4ssh node1
sudo mkdir /var/local/osd0
sudo chmod 777 /var/local/osd0/
exit其中,需要为不同 ceph 节点指定不同的 osd 编号。
然后从管理节点执行 ceph-deploy 来准备 OSD
1 | ceph-deploy osd prepare node1:/var/local/osd0 node2:/var/local/osd1 node3:/var/local/osd2 |
最后激活 OSD
1 | ceph-deploy osd activate node1:/var/local/osd0 node2:/var/local/osd1 node3:/var/local/osd2 |
把配置文件和 admin 秘钥拷贝到管理节点和 ceph 节点
1
ceph-deploy admin admin-node node1 node2 node3
在所有节点上添加对 ceph.client.admin.keyring 的操作权限
1
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
检查集群健康状况
1
ceph -s
如果想要添加新的 OSD 节点,可以在 ceph 安装好后,重复第6-9步。
安装 cephfs 文件系统
服务器之间的存储共享主要通故宫 cephfs 文件系统实现,有了 ceph 集群,安装和配置 cephfs 文件系统相对来说简单一些。本部分主要参考教程[3]。
创建 MDS 服务器(管理节点)
如果要运行并挂载 cephfs 文件系统,必须至少创建一个元数据服务器(ceph MDS),可以在管理节点上使用 ceph-deploy 命令将 ceph MDS 安装到 OSD 节点上。1
ceph-deploy mds create node1
创建 data pool 和 metadata pool(安装了 MDS 的 ceph 节点)
1
2ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128创建 cephfs 文件系统(安装了 MDS 的 ceph 节点)
1
ceph fs new cephfs cephfs_metadata cephfs_data
其中 cephfs 为文件系统名称,可以自己指定。
检查 MDS 服务器列表和状态(安装了 MDS 的 ceph 节点)
1
2ceph fs ls
ceph mds stat
挂载 cephfs 文件系统
安装好 cephfs 文件系统后,便可以在客户机上挂载 cephfs 文件系统了。一个 cephfs 文件系统可以挂载在很多客户机上,因此这些客户机可以共享 cephfs 指定的存储空间。需要注意的是,ceph 集群中的节点本身也可以作为客户机。
创建 cephfs 目录并远程挂载
1 | sudo mkdir -p /mnt/cephfs |
其中
1 | ceph auth get client.admin |
创建家目录在 cephfs 文件系统上的新用户
为了方便使用,我们可以在每台客户机上创建一个家目录位于 cephfs 文件系统上的新用户。
最简单的方法是在每台客户机上分别创建用户 user-name,方法如下:
1 | sudo useradd -d /mnt/cephfs/user-name -m user-name |
需要注意的是,不同客户机创建的新用户一般有不同的 id,如果某台客户机创建新用户的 id 与 cephfs 文件的 owner id 不一致时,我们是无法使用该新建用户登录的。此时需要修改新用户 id 与 cephfs owner id 一致。
首先用 root 登录服务器,查看挂载 cephfs 的 owner id
1 | cd /mnt/cephfs/ |
然后查看新建用户 id
1 | id user-name |
如果新用户 id 与 cephfs owner id 不一致,修改新用户 id
1 | usermod -u <cephfs-owner-id> user-name |
如果需要管理的用户很多时,可以使用LDAP来集中式管理账户,这样就不需要每次在所有客户机上都创建一个用户了。接下来有时间会部署一个LDAP并出相应的教程,敬请期待。
有用链接
[1] Ceph 官方文档
[2] Ceph/共享存储汇总
[3] 如何在CentOS 7上安装CephFS
[4] CephFS 使用
[5] 搭建一套OpenLDAP系统,实现账号的统一管理