Ceph快速入门


安装ceph-deploy

预安装

Ceph-deploy设置

架构图如下:

CentOS7:

//注册秘钥
sudo subscription-manager repos --enable=rhel-7-server-extras-rpms  
//安装并注册EPEL存储库
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
// 来添加yum仓库文件
cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-{ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
//更新仓库并安装ceph-deploy
sudo yum update
sudo yum install ceph-deploy

Ceph节点设置

CentOS7:

安装时间服务器

1
sudo yum install ntp ntpdate ntp-doc

安装SSH服务器

1
sudo yum install openssh-server

创建Ceph部署用户

1
2
3
4
5
6
7
8
//在每个Ceph节点上创建一个新用户。
ssh user@ceph-server
sudo useradd -d /home/{username} -m {username}
sudo passwd {username}

//对于添加到每个Ceph节点的新用户,请确保该用户具有sudo权限。
echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}

启动无秘钥登陆

 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
//生成SSH密钥,但不要使用sudo或root用户。将密码保留为空
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}替换为您使用Create a Ceph Deploy User创建的用户名。
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3
//推荐修改ceph-deploy管理节点的〜/.ssh/config文件,以便ceph-deploy可以以您创建的用户身份登录到Ceph节点
//而无需在每次执行时指定--username {username}部署。
//这有一个额外的好处,即简化ssh和scp的使用。 将{username}替换为您创建的用户名:
Host node1
   Hostname node1
   User {username}
Host node2
   Hostname node2
   User {username}
Host node3
   Hostname node3
   User {username}

打开网络

编辑/etc/sysconfig/network-scripts/ifcfg-eth0修改ONBOOT=yes

确保连通性

在/etc/hosts中添加各主机名和IP地址的解析

开放端口

Ceph Monitor默认端口6789

Ceph OSDs默认端口在6800-7300端口之间通信

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

更精准配置防火墙

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
//Ceph Mon节点
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
//OSDs and MDSs
sudo firewall-cmd --zone=public --add-service=ceph --permanent
//让配置生效
sudo firewall-cmd --reload
//防火墙规则
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
//保存配置
/sbin/service iptables save

tty

使用visudo配置sudo权限

selinux

1
sudo setenforce 0

依赖包

1
2
sudo yum install yum-plugin-priorities
sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms

概要

这样就完成了安装前配置了。下一步,开始集群部署。

存储集群

搭建此集群之前,请先完成初始化设置。

集群拓扑图如下:

我们将在管理节点上使用ceph-deploy启动Ceph存储集群。创建一个三个Ceph节点集群,以便您可以探索Ceph功能。

第一步:创建一个带有一个Ceph Monitor和三个Ceph OSD守护进程的Ceph存储集群。

第二步:一旦群集达到活动+干净状态,通过添加第四个Ceph OSD,一个元数据服务器和另外两个Ceph监视器守护进程来扩展它。

第三步:为获得最佳结果,请在管理节点上创建一个目录,以维护ceph-deploy为您的集群生成的配置文件和密钥。

1
2
mkdir my-cluster
cd my-cluster

ceph-deploy实用程序将文件输出到当前目录。执行ceph-deploy时,请确保您位于此目录中。

注意:如果您以其他用户身份登录,请不要使用sudo调用ceph-deploy或以root身份运行它,因为它不会发出远程主机上所需的sudo命令。

重置服务器

1
2
3
4
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

创建一个集群

创建集群

1
2
3
ceph-deploy new {initial-monitor-node(s)}
例:
ceph-deploy new node1

配置网络

1
2
3
public network = {ip-address}/{bits}
例:
public network = 10.1.2.0/24

IPv6配置

1
echo ms bind ipv6 = true >> ceph.conf

安装Ceph包

1
2
3
ceph-deploy install {ceph-node} [...]
例:
ceph-deploy install node1 node2 node3

部署初始监视器并收集密钥

1
ceph-deploy mon create-initial

完成此过程后,您的本地目录应具有以下密钥环:

1
2
3
4
5
6
ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring

注意:如果此过程失败并显示类似于“无法找到/etc/ceph/ceph.client.admin.keyring”的消息,请确保ceph.conf中为监视节点列出的IP是公网IP,而不是私有IP。

优化deploy节点

1
2
3
ceph-deploy admin {ceph-node(s)}
例:
ceph-deploy admin node1 node2 node3

部署管理节点

1
ceph-deploy mgr create node1  *Required only for luminous+ builds, i.e >= 12.x builds*

添加三个OSD节点

1
2
3
4
5
6
ceph-deploy osd create –data {device} {ceph-node}

例:
ceph-deploy osd create --data /dev/vdb node1
ceph-deploy osd create --data /dev/vdb node2
ceph-deploy osd create --data /dev/vdb node3

检查集群健康

1
2
3
4
//如果健康会返回OK
ssh node1 sudo ceph health
//更详细的集群状态
ssh node1 sudo ceph -s

至此,如果健康会返回OK,Ceph集群创建完成。

集群扩展

架构拓扑图如下:

添加元数据服务器

1
2
3
ceph-deploy mds create {ceph-node}
例:
ceph-deploy mds create node1

添加监视器

1
2
3
4
//将两个Ceph监视器添加到您的群集:
ceph-deploy mon add {ceph-nodes}
例:
ceph-deploy mon add node2 node3
1
ceph quorum_status --format json-pretty

提示:当您使用多个监视器运行Ceph时,您应该在每个监视器主机上安装和配置NTP。确保监视器时间是同步的。

添加管理器

1
2
3
4
//部署其他管理器守护程序
ceph-deploy mgr create node2 node3
//查看备用管理器
ssh node1 sudo ceph -s

添加RGW实例

1
2
3
ceph-deploy rgw create {gateway-node}
例:
ceph-deploy rgw create node1
1
2
[client]
rgw frontends = civetweb port=80
1
2
[client]
rgw frontends = civetweb port=[::]:80

存储/检索对象数据

1
2
//查找对象位置
ceph osd map {poolname} {object-name}

练习找到一个对象

1
2
3
4
echo {Test-data} > testfile.txt
ceph osd pool create mytest 8
rados put {object-name} {file-path} --pool=mytest
rados put test-object-1 testfile.txt --pool=mytest
1
rados -p mytest ls
1
2
ceph osd map {pool-name} {object-name}
ceph osd map mytest test-object-1
1
osdmap e537 pool 'mytest' (1) object 'test-object-1' -> pg 1.d1743484 (1.4) -> up [1,0] acting [1,0]
1
rados rm test-object-1 --pool=mytest
1
ceph osd pool rm mytest

(出于安全原因,您需要根据提示提供其他参数;删除pool会破坏数据。)

随着集群的发展,对象位置可能会动态变化。 Ceph动态重新平衡的一个好处是Ceph使您不必手动执行数据迁移或平移。

CEPH客户端

块设备快速启动

拓扑图如下:

安装Ceph

1
2
lsb_release -a
uname -r
1
ceph-deploy install ceph-client
1
ceph-deploy admin ceph-client

ceph-deploy实用程序将密钥环复制到/etc/ceph目录。确保密钥环文件具有适当的读取权限(例如,sudo chmod +r /etc/ceph/ceph.client.admin.keyring)。

创建块设备pool

1
rbd pool init <pool-name>

配置块设备

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
//在ceph-client节点上,创建块设备映像。
rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
//在ceph-client节点上,将图像映射到块设备。
sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
//通过在ceph-client节点上创建文件系统来使用块设备。
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
This may take a few moments.
//在ceph-client节点上挂载文件系统。
sudo mkdir /mnt/ceph-block-device
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
cd /mnt/ceph-block-device

选项:将块设备配置为自动映射并在引导时挂载(并在关闭时卸载/取消映射) - 请参阅rbdmap联机帮助页。

更多请参阅: block devices

文件系统快速入门

先决条件

1
2
lsb_release -a
uname -r
1
ceph-deploy install ceph-client
1
ceph -s [-m {monitor-ip-address}] [-k {path/to/ceph.client.admin.keyring}]

创建一个文件系统

1
2
3
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs new <fs_name> cephfs_metadata cephfs_data

创建一个秘密文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
//在密钥环文件中标识用户的密钥。例如:
cat ceph.client.admin.keyring
//复制将使用已安装的CephFS文件系统的用户的密钥。它应该看起来像这样:
[client.admin]
   key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
//打开文本编辑器
//将密钥粘贴到空文件中。它应该看起来像这样:
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
//使用用户名作为属性保存文件(例如,admin.secret)。
//确保文件权限适合用户,但对其他用户不可见。

内核驱动程序

1
2
sudo mkdir /mnt/mycephfs
sudo mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs
1
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret

注意在管理节点上安装CephFS文件系统,而不是服务器节点。

用户空间的文件系统(FUSE)

1
2
sudo mkdir ~/mycephfs
sudo ceph-fuse -m {ip-address-of-monitor}:6789 ~/mycephfs
1
sudo ceph-fuse -k ./ceph.client.admin.keyring -m 192.168.0.1:6789 ~/mycephfs

附加信息

有关其他信息,请参阅CephFS。 CephFS不如Ceph Block Device和Ceph Object Storage稳定。如果遇到问题,请参阅故障排除

对象存储快速入门

提示:Civetweb默认使用端口7480。您必须打开端口7480,或将端口设置为Ceph配置文件中的首选端口(例如,端口80)。

要启动Ceph对象网关,请按照以下步骤操作:

安装Ceph对象网关

1
ceph-deploy install --rgw <client-node> [<client-node> ...]

创建Ceph对象网关实例

1
ceph-deploy rgw create <client-node>

网关运行后,您应该能够在端口7480上访问它。(例如,http//client-node:7480)。

配置Ceph对象网关实例

1
2
[client.rgw.client-node]
rgw_frontends = "civetweb port=80"

注意确保在rgw_frontends键/值对中的port = 之间不留空格。

要点:如果您打算使用端口80,请确保Apache服务器未运行,否则将与Civetweb冲突。 我们建议在这种情况下删除Apache。

1
2
3
4
// 在Red Hat Enterprise Linux 7和Fedora上,运行以下命令:
sudo systemctl restart ceph-radosgw.service
//在Red Hat Enterprise Linux 6和Ubuntu上,运行以下命令:
sudo service radosgw restart id=rgw.<short-hostname>
1
2
3
sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --add-port 80/tcp --permanent
sudo firewall-cmd --reload
1
http://<client-node>:80
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Owner>
    <ID>anonymous</ID>
    <DisplayName></DisplayName>
  </Owner>
    <Buckets>
  </Buckets>
</ListAllMyBucketsResult>

有关其他管理和API详细信息,请参阅配置Ceph对象网关指南

comments powered by Disqus