Ceph 部署

# 一、Ceph 部署环境准备

## 1.1 环境节点规划

### 1.1.1 服务器列表

| 节点名  | 主机名  | IP  | 系统  | 角色  | 版本  |

|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|

| node1  | node1  | 10.40.58.62  | CentOS 7.6  | 管理节点、  监视器节点  OSD存储节点  mgr 节点  | luminous  |

| node2  | node2  | 10.40.58.63  | CentOS 7.6  | OSD 存储节点、mgr 节点  | luminous  |

| node3  | node3  | 10.40.58.64  | CentOS 7.6  | OSD 存储节点、mgr 节点  | luminous  |

### 1.1.2 架构图

![图片](https://uploader.shimo.im/f/kntoa4ZZ1NY36FK6.png!thumbnail)

## 1.2 Ceph 所有节点上安装

>所有节点不包括部署(管理)节点,除非部署(管理)节点也做 MON 或者 OSD 节点

### 1.2.1 声明环境变量

```

export username="ceph-admin"

export passwd="ceph-admin"

export admin-node="admin-node"

export node1="node1"

export node2="node2"

export node3="node3"

export admin-node_ip="10.40.58.62"

export node1_ip="10.40.58.62"

export node2_ip="10.40.58.63"

export node3_ip="10.40.58.64"

```

### 1.2.2 配置主机名解析

```

cat >>/etc/hosts<<EOF

$admin-node_ip     ${admin-node}

$node1_ip     ${node1}

$node2_ip     ${node2}

$node3_ip     ${node3}

EOF

```

### 1.2.3 配置 EPEL 源

```

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

cat >/etc/yum.repos.d/epel.repo<<EOF

[epel]

name=Extra Packages for Enterprise Linux 7 - \$basearch

baseurl=http://mirrors.aliyun.com/epel/7/\$basearch

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7


[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - \$basearch - Debug

baseurl=http://mirrors.aliyun.com/epel/7/\$basearch/debug

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0


[epel-source]

name=Extra Packages for Enterprise Linux 7 - \$basearch - Source

baseurl=http://mirrors.aliyun.com/epel/7/SRPMS

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

EOF

yum makecache

```

### 1.2.4 配置 Ceph 源

```

cat >/etc/yum.repos.d/ceph.repo<<EOF

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

gpgcheck=0

priority=1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

gpgcheck=0

priority=1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=0

gpgcheck=1

type=rpm-md

gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

priority=1

EOF

yum makecache

```

### 1.2.5 安装 Ceph

>此步相当于在管理节点执行 ceph-deploy install --no-adjust-repos ${node1} ${node2} ${node3}

```

yum install -y ceph ceph-radosgw

```

### 1.2.6 安装 NTP

建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障。

Ceph 的守护进程会相互传递关键消息,这些消息必须在达到超时阀值前处理掉。如果 Ceph 监视器时钟不同步,就可能出现多种异常情况。例如:

* 守护进程忽略了收到的消息(如时间戳过时了)

* 消息未及时收到时,超时触发得太快或太晚

```

sudo yum install ntp ntpdate ntp-doc

sudo ntpdate cn.ntp.org.cn

sudo systemctl restart ntpd ntpdate && sudo systemctl enable ntpd ntpdate

```

确保在各 Ceph 节点上启动了 NTP 服务,并且要使用同一个 NTP 服务器 。

### 1.2.7 创建部署 Ceph 的用户

ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。

较新版的 ceph-deploy 支持用 --username 选项提供可无密码使用 sudo 的用户名(包括 root ,虽然**不建议**这样做)。使用 ceph-deploy --username {username} 命令时,指定的用户必须能够通过无密码 SSH 连接到 Ceph 节点,因为 ceph-deploy 中途不会提示输入密码。

建议在集群内的**所有** Ceph 节点上给 ceph-deploy 创建一个特定的用户,但**不要**用 “ceph” 这个名字。全集群统一的用户名可简化操作(非必需)

>Note 从 [Infernalis 版](http://docs.ceph.org.cn/release-notes/#v9-1-0-infernalis-release-candidate)起,用户名 “ceph” 保留给了 Ceph 守护进程。如果 Ceph 节点上已经有了 “ceph” 用户,安装前必须先删掉这个用户。

```

useradd ${username}

echo "${passwd}" | passwd --stdin ${username}

echo "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}

chmod 0440 /etc/sudoers.d/${username}

```

### 1.2.8 设置 sudo 不需要终端(TTY)

如果你的 Ceph 节点默认设置了 requiretty,执行 ceph-deploy 命令时可能会报错,因为 ceph-deploy 用之前创建的用户执行 sudo 命令时需要一个终端(TTY)

```

sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers

```

### 1.2.9 关闭 SELINUX

```

sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config

setenforce 0

```

### 1.2.10 配置或关闭防火墙

Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。详情见[网络配置参考](http://docs.ceph.org.cn/rados/configuration/network-config-ref)。 Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。

对于 RHEL 7 上的 firewalld ,要对公共域开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围,并且要配置为永久规则,这样重启后规则仍有效。例如:

```

sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent

sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

sudo firewall-cmd --reload

sudo firewall-cmd --zone=public --list-all

```

若使用 iptables ,要开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围,命令如下:

```

sudo systemctl disable firewalld

sudo systemctl stop firewalld

sudo iptables -A INPUT -i eth0 -p tcp -s 10.40.0.0/16 --dport 6789 -j ACCEPT

sudo iptables -A INPUT -i eth0 -m multiport -p tcp -s 10.40.0.0/16 --dports 6800:7300 -j ACCEPT

sudo /sbin/service iptables save

```

## 1.3 Ceph 管理节点上安装

>你的部署(管理)节点必须能够通过 SSH 无密码地访问各 Ceph 节点。如果 ceph-deploy 以某个普通用户登录,那么这个用户必须有无密码使用 sudo 的权限。

### 1.3.1 安装 EPEL 源

```

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

cat >/etc/yum.repos.d/epel.repo<<EOF

[epel]

name=Extra Packages for Enterprise Linux 7 - $basearch

baseurl=http://mirrors.aliyun.com/epel/7/$basearch

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7


[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug

baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0


[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source

baseurl=http://mirrors.aliyun.com/epel/7/SRPMS

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

1

EOF

yum makecache

```

### 1.3.2 安装 Ceph 源

```

cat >/etc/yum.repos.d/ceph.repo<<EOF

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

gpgcheck=0

priority=1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

gpgcheck=0

priority=1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=0

gpgcheck=1

type=rpm-md

gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

priority=1

EOF

yum makecache

```

### 1.3.3 更新软件库并安装 ceph-deploy

```

sudo yum update && sudo yum install ceph-deploy python-pip

```

### 1.3.4 允许无密码 SSH 登录

```

su - ${username}

ssh-keygen # 生成 SSH 密钥对

ssh-copy-id ${username}@node1 # 把公钥拷贝到各 Ceph 节点

ssh-copy-id ${username}@node2

ssh-copy-id ${username}@node3

```

# 二、Ceph 集群部署

>以下操作在部署(管理)节点上用之前创建的普通用户操作

用 ceph-deploy 从管理节点建立一个 Ceph 存储集群,该集群包含三个节点,它有一个 Monitor 和两个 OSD 守护进程。一旦集群达到 active + clean 状态,再扩展它:增加第三个 OSD 、增加元数据服务器和两个 Ceph Monitors。

![图片](https://uploader.shimo.im/f/kntoa4ZZ1NY36FK6.png!thumbnail)

## 2.1 创建集群

### 2.1.1 创建放置配置文件目录

为获得最佳体验,先在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。ceph-deploy 会把文件输出到当前目录,所以请确保在此目录下执行 ceph-deploy 。

```

su - ${username}

mkdir my-cluster

cd my-cluster

```

>如果你是用另一普通用户登录的,不要用 sudo 或在 root 身份运行 ceph-deploy ,因为它不会在远程主机上调用所需的 sudo命令。

### 2.1.2 创建新的集群

在管理节点上,进入刚创建的放置配置文件的目录,执行 ceph-deploy 的 new 子命令。此操作

会创建一个默认名为 ceph 的新集群,并且生成集群配置文件和 MON 密钥文件。ceph-deploy new 后面跟几个 Mon 节点,作为初始的监视器法定人(至少一个,需使用奇数个,用偶数可能导致脑裂)。

并指定几个主机作为初始监视器法定人

```

ceph-deploy new ${node1}

```

在当前目录下用 ls 和 cat 检查 ceph-deploy 的输出,应该有一个 Ceph 配置文件(ceph.conf)、一个 MON 密钥文件(ceph.mon,keyring)和一个日志文件(ceph-deploy-ceph.log)。

### 2.1.3 修改默认 Ceph 配置文件

```

vim ceph.conf

[global]

......

osd pool default size = 2 # 缺省值是3,达到 active + clean 状态的副本数目

osd pool default min sisz = 1 # 缺省值是0.达到 degraded 状态的副本数目,它应该小于 osd pool default size 的值,为存储池中的object设置最小副本数目来确认写操作。即使集群处于 degraded 状态,如果最小值不匹配,Ceph 将不会确认写操作给客户端。

osd pool default pg num = 333  # 每个存储池默认的pg数

osd pool default pgp num = 333  # PG和PGP的个数应该保持一致。PG和PGP的值很大程度上取决于集群大小。

osd journal size = 1024    # 缺省值为0。你应该使用这个参数来设置日志大小。日志大小应该至少是预期磁盘速度和 filestore 最大同步时间间隔的两倍。如果使用了 SSD 日志,最好创建大于10GB的日志,并调大 filestore 的最小、最大同步时间间隔。

public network = 10.40.58.0/24 # 公网IP地址

cluster network = 10.40.58.0/24 # 内网IP地址

```

### 2.1.4 配置初始 monitor(s)、并收集所有密钥

```

ceph-deploy mon create-initial

```

完成上述操作后,当前目录里应该会出现这些密钥环

* ceph.client.admin.keyring

* ceph.bootstrap-osd.keyring

* ceph.bootstrap-mds.keyring

* ceph.bootstrap-rgw.keyring

### 2.1.5 拷贝配置信息到各节点

用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

```

ceph-deploy admin ${admin-node} ${node1} ${node2} ${node3}

```

>Ceph 各节点 需要对 ceph.client.admin.keyring 有读的权限,才能正常执行 Ceph 命令

>以下命令需要在 Ceph 各节点执行

```

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

```

### 2.1.6 配置(增加) OSD

>这里要注意,老版本的 ceph-deploy prepare/activate 命令已经在 L 版中不能使用了

执行下列命令列举某个节点上的磁盘

```

ceph-deploy disk list node1

```

这里使用 for循环批量配置,也可以单独配置

```

for disk in "/dev/vdc /dev/vdd /dev/vde"

do

  for node in "node1 node2 node3"

  do

    ceph-deploy disk zap ${node} ${disk} # 擦净(删除分区表)磁盘,以用于 Ceph

    ceph-deploy osd create ${node} --data ${disk} # 创建 OSD

  done

done

```

### 2.1.7 检查集群状态

```

ceph health

ceph -s

```

等 peering 完成后,集群应该达到 active + clean 状态

## 2.2  Ceph mgr(Web 界面)

手动部署 ceph mgr (luminous 版) - Terry Tsang - CSDN博客

[https://blog.csdn.net/signmem/article/details/78589724](https://blog.csdn.net/signmem/article/details/78589724)

ceph (luminous 版) zabbix 监控 - Terry Tsang - CSDN博客

[https://blog.csdn.net/signmem/article/details/78667569](https://blog.csdn.net/signmem/article/details/78667569)

>luminous 版本新特色 

>由 mgr 提供的一个 Web 界面

>只能够用于监控显示, 无法进行信息更改

>ceph-mgr 对于当前 ceph 版本十分重要 

>主要用于管理 pg map 作用 

>当 ceph-mgr 发生故障, 相当于整个 ceph 集群都会出现严重问题 

>建议在每个 MON 中都创建独立的 ceph-mgr (至少 3 个 CEPH MON 节点) 

>只需要在每个 MON 节点参考下面方法进行创建即可 (注, 每个 mgr 需要不同的独立的命名)

### 2.2.1 安装 mgr

在管理节点执行如下命令:

```

ceph-deploy install --mgr --no-adjust-repos node1 node2 node3

```

以上命令等同于在 每个 Ceph mgr 节点执行如下命令:

```

yum -y install ceph-mgr

```

### 2.2.2 新建 mgr 实例

```

ceph-deploy mgr create ${node1} ${node2} ${node3}

```

### 2.2.3 开启 dashboard 模块

在任意 MON 节点 上执行

```

ceph mgr module enable dashboard

```

### 2.2.4 修改 dashboard IP 和端口

```

ceph config-key set mgr/dashboard/server_addr 10.40.58.62

ceph config-key set mgr/dashboard/server_port 6666

sudo systemctl restart ceph-mgr@node1.service # 去指定 mgr 节点上执行

sudo systemctl restart ceph-mgr@node2.service

sudo systemctl restart ceph-mgr@node3.service

```

### 2.2.5 访问 Web 界面

获取访问URL

```

ceph mgr services

```

端口默认是7000,如果执行了修改 IP 和端口步骤则使用修改后的 IP 和端口访问

```

http://10.48.58.62:7000

```

M版可设置帐密访问方式,详见:

[https://www.cnblogs.com/weijie0717/p/8383938.html](https://www.cnblogs.com/weijie0717/p/8383938.html)

## 2.3 删除集群

### 2.3.1 清除集群配置

如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:

```

ceph-deploy purgedata ${node1}

ceph-deploy forgetkeys

```

### 2.3.2 卸载并清除集群配置

用下列命令可以连 Ceph 安装包一起清除:

```

ceph-deploy purge ${node1}

```

如果执行了 purge ,你必须重新安装 Ceph 。

### 2.3.3 清理 OSD 磁盘

用于恢复磁盘原始状态,待测试

```

umount /var/lib/ceph/osd/ceph-7

rm -rf /var/lib/ceph/osd/ceph-7

ceph-volume lvm zap /dev/vdj

lvremove /dev/ceph-* 

vgs|grep ceph|awk '{print $1}'|xargs vgremove

pvremove /dev/vdj

reboot

或者

parted -s /dev/vdj mklabel gpt mkpart primary xfs 0% 100% 

reboot

mkfs.xfs /dev/vdj -f

```

# 三、Ceph 集群运维

## 3.1 删除 OSD (手动)

### 3.1.1 把 OSD 踢出集群

删除 OSD 前,它通常是 up 且 in 的,要先把它踢出集群,以使 Ceph 启动重新均衡、把数据拷贝到其他 OSD 。

```

ceph osd out osd.7

```

### 3.1.2 观察数据迁移

一旦把 OSD 踢出( out )集群, Ceph 就会开始重新均衡集群、把归置组迁出将删除的 OSD 。你可以用 [ceph](http://docs.ceph.org.cn/rados/operations/monitoring) 工具观察此过程。

```

ceph -w

```

你会看到归置组状态从 active+clean 变为 active, some degraded objects 、迁移完成后最终回到 active+clean 状态。( Ctrl-c 中止)

>注意: 有时候,(通常是只有几台主机的“小”集群,比如小型测试集群)拿出( out )某个 OSD 可能会使 CRUSH 进入临界状态,这时某些 PG 一直卡在 active+remapped 状态。如果遇到了这种情况,你应该把此 OSD 标记为 in ,用这个命令:

```

ceph osd in osd.7

```

等回到最初的状态后,把它的权重设置为 0 ,而不是标记为 out ,用此命令:

```

ceph osd crush reweight osd.7 0

```

执行后,你可以观察数据迁移过程,应该可以正常结束。把某一 OSD 标记为 out 和权重改为 0 的区别在于,前者,包含此 OSD 的桶、其权重没变;而后一种情况下,桶的权重变了(降低了此 OSD 的权重)。某些情况下, reweight 命令更适合“小”集群。

### 3.1.3 停止 OSD

把 OSD 踢出集群后,它可能仍在运行,就是说其状态为 up 且 out 。删除前要先停止 OSD 进程。

```

sudo systemctl stop ceph-osd@7.service systemctl start ceph-osd@7.service

```

停止 OSD 后,状态变为 down 。

### 3.1.4 将OSD 移出集群 CRUSH 图

删除 CRUSH 图的对应 OSD 条目,它就不再接收数据了

```

ceph osd crush remove osd.7

```

### 3.1.5 删除 OSD 认证密钥

```

ceph auth del osd.7

```

### 3.1.6 删除 OSD

```

ceph osd rm osd.7

```

### 3.1.7 卸载并删除 OSD 挂载目录

通过 mount 命令 查看需要卸载并删除的目录

```

mount

umount /var/lib/ceph/osd/ceph-7

rm -rf /var/lib/ceph/osd/ceph-7

```

### 3.1.8 清理 OSD 磁盘

通过  lsblk 命令 查看需要清理的磁盘

```

ceph-volume lvm zap /dev/vdg

```

### 3.1.9 还原 OSD 磁盘

```

lvremove /dev/ceph-* 

vgs|grep ceph|awk '{print $1}'|xargs vgremove

pvremove /dev/vdg

reboot

或者

parted -s /dev/vdg mklabel gpt mkpart primary xfs 0% 100% 

reboot

mkfs.xfs /dev/vdg -f

```

### 3.1.10 配置文件中删除对应条目

登录到部署(管理)节点,进入放置配置文件的目录(my-cluster),删除 ceph.conf 配置文件对应条目

```

[osd.7]

        host = node2

```

然后拷贝配置信息到各节点

```

ceph-deploy admin ${admin-node} ${node1} ${node2} ${node3}

```

## 3.2 增加 OSD

### 3.2.1 通过 ceph-deploy  增加 OSD

```

ceph-deploy disk zap node1 /dev/vdc # 擦净(删除分区表)磁盘,以用于 Ceph

ceph-deploy osd create node1 --data /dev/vdc # 创建 OSD

```

### 3.2.2 手动增加

删除 OSD(手动)的逆向操作,用于 OSD 异常时恢复(待验证)

```

ceph auth add osd.7

ceph auth add osd.7 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-6/keyring

ceph osd crush add osd.7 0.00999 host=node2

systemctl start ceph-osd@7.service

```

## 3.3 删除 MON

ceph-deploy 方式

```

ceph-deploy mon destroy node2

```

手动方式

```

ceph mon remove node2

```

## 3.4 增加 MON

### 3.4.1 将 MON 节点 添加到现有集群

ceph-deploy 方式(管理节点上执行)

```

ceph-deploy mon add node2

```

手动方式( MON 节点上执行)

```

ceph mon add node2 10.40.58.63

```

### 3.4.2 根据配置文件增加 MON

如果未传递任何参数,则默认使用 ceph.conf 配置中定义的“mon_initial_members”来部署 MON 

```

ceph-deploy mon create node1 node2 node3

```

### 3.4.3 查看 MON quorum 状态信息

```

ceph quorum_status --format json-pretty

```

# 四、Ceph 对象存储

## 4.1 安装 Ceph 对象网关

自从 firefly (v0.80) 版本开始,Ceph 对象网关运行在 Civetweb 上(已经集成进守护进程 ceph-radosgw ),而不再是 Apache 和 FastCGI 之上。使用 Civetweb 简化了Ceph对象网关的安装和配置。

### 4.1.1 准备工作

首先进行 环境检查 并在你的 Ceph 对象网关节点上执行安装前的准备工作。特别的,你需要禁用部署 Ceph 集群所用用户的 requiretty ,同时设置 SELinux 为 Permissive 以及 Ceph 部署用户使用 sudo 时无需密码。对于 Ceph 对象网关,在生产环境下你需要开起 Civetweb 所使用的端口。

>注意: Civetweb默认运行在 7480 端口上。

### 4.1.2 安装 Ceph 对象网关

在管理节点执行如下命令:

```

ceph-deploy install --rgw --no-adjust-repos ${node1} ${node2} ${node3}

```

以上命令等同于在 每个 Ceph 对象网关节点执行如下命令:

```

yum -y install ceph-radosgw

```

### 4.1.3 拷贝配置信息到对象网关节点

用 ceph-deploy 把配置文件和 admin 密钥拷贝到 Ceph 对象网关节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

```

ceph-deploy admin ${node1} ${node2} ${node3}

```

>Ceph 对象网关节点 需要对 ceph.client.admin.keyring 有读的权限,才能正常执行 Ceph 命令

>以下命令需要在 Ceph 对象网关节点执行

```

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

```

### 4.1.4 新建网关实例

在你的管理节点的工作目录下,使用命令在 Ceph 对象网关节点上新建一个 Ceph对象网关实例。举例如下:

```

ceph-deploy rgw create ${node1} ${node2} ${node3}

```

在网关服务成功运行后,你可以使用未经授权的请求来访问端口 7480 ,就像这样:

```

http://10.40.58.62:7480

```

如果网关实例工作正常,你接收到的返回信息大概如下所示:

```

<?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>

```

### 4.1.5 修改默认端口

Civetweb 默认运行在端口 7480 之上.。如果想修改这个默认端口 (比如使用端口 80),修改你的管理节点的工作目录下的 Ceph 配置文件。 添加一节,以 [client.rgw.<gateway-node>] 作为名字, 使用你的 Ceph 对象网关节点的短主机名替换其中的 <gateway-node> (如, hostname -s).

>注意: 在 0.94 版本中,Ceph 对象网关不再支持 SSL。你可以设置一个支持 SSL 的反向代理服务器来将 HTTPS 请求转为HTTP请求发给 CivetWeb。

在管理节点的管理目录下修改,比如, 如果你的主机名是 node1, 在 [global] 节后添加的信息如下:

```

[client.rgw.node1]

rgw_frontends = "civetweb port=80"

```

将该配置文件推送到你的 Ceph 对象网关节点(也包括其他 Ceph 节点):

```

ceph-deploy --overwrite-conf config push ${node1} ${node2} ${node3}

```

为了使新配置的端口生效,需要重启 Ceph 对象网关:

```

sudo systemctl restart ceph-radosgw@rgw.`hostname -s`

```

最后,需要确保你选择的端口在节点的防火墙配置中是开放的 (比如, 端口 80)。 如果它不是开放的,将它设为开放并重启防火墙。 如果你是用的是 firewald,执行下面的命令:

```

sudo firewall-cmd --list-all

sudo firewall-cmd --zone=public --add-port 80/tcp --permanent

sudo firewall-cmd --reload

```

若使用的是iptables ,执行下面的命令:

```

sudo systemctl disable firewalld

sudo systemctl stop firewalld

sudo iptables -A INPUT -i eth0 -p tcp -s 10.40.0.0/16 --dport 80 -j ACCEPT

sudo /sbin/service iptables save

```

### 4.1.6 开启 bucket 索引分片功能

Ceph 对象网关在 index_pool 中存储 bucket 的索引数据,默认情况下是资源池 .rgw.buckets.index 。有时用户喜欢把很多对象(几十万到上百万的对象)存放到同一个 bucket 中。如果你不使用网关的管理接口来为每个 bucket 的最大对象数设置配额,那么当一旦用户存放大量的对象到一个 bucket 中时,bucket 索引的性能会呈现明显的下降。

在0.94版本的 Ceph 中,您可以给 bucket 索引进行分片,这样在你允许 bucket 中有大量对象时,能够有助于防止出现性能瓶颈。设置项的 “rgw_override_bucket_index_max_shards“ 允许您设置一个 bucket 的最大分片数。它的默认值为 0 ,这意味着 bucket 索引分片功能在默认情况下情况下是关闭的,也就是“无数个“”。

开启 bucket 的索引分片功能,只需给 rgw_override_bucket_index_max_shards 设置一个大于 0 的值。

简单的配置,只需要在 Ceph 配置文件中加入 rgw_override_bucket_index_max_shards 。将其添加在 [global] 部分来设置一个系统层面生效的值。你也可以在 Ceph 配置文件中将它设置为某一个实例生效。

在管理节点的管理目录下修改,比如, 如果你的主机名是 node1, 在 [global] 节后添加的信息如下:

```

[global]

rgw_override_bucket_index_max_shards  = "1000"

```

将该配置文件推送到你的 Ceph 对象网关节点(也包括其他 Ceph 节点):

```

ceph-deploy --overwrite-conf config push ${node1} ${node2} ${node3}

```

为了使 bucket 索引分片功能生效,需要重启 Ceph 对象网关:

```

sudo systemctl restart ceph-radosgw@rgw.`hostname -s`

```

>注意:以下命令在L版中不支持,可替代命令待查

态设置bucket_index_max_shards参数 | 奋斗的松鼠 - 谭老师 - blog

[http://www.strugglesquirrel.com/2018/06/27/%E5%8A%A8%E6%80%81%E8%AE%BE%E7%BD%AEbucket-index-max-shards%E5%8F%82%E6%95%B0/](http://www.strugglesquirrel.com/2018/06/27/%E5%8A%A8%E6%80%81%E8%AE%BE%E7%BD%AEbucket-index-max-shards%E5%8F%82%E6%95%B0/)

对于异地场景的配置而言,为了灾备每一个 zone 都有一个不同的 index_pool 设置。为了保持这个参数在一个 region 的所有 zone 中保持一致,你可以在 region 的网关配置中指定 rgw_override_bucket_index_max_shards 。举例如下:

```

radosgw-admin region get > region.json

```

打开 region.json 的文件,为每一个 zone 编辑 bucket_index_max_shards 的设置。保存 region.json 文件并重置 region。举例如下:

```

radosgw-admin region set < region.json

```

一旦你更新了你的 region,你需要更新 region map。举例如下:

```

radosgw-admin regionmap update --name client.rgw.ceph-client

```

其中的 client.rgw.ceph-client 是网关用户的名字。

>注意: 通过 CRUSH 规则集将索引资源池 (如果可以为每一个zone设置) 映射到基于 SSD的 OSD 上也能够提升 bucket 索引的性能。

## 4.2 使用 S3 API 访问 Ceph 对象存储

### 4.2.1 为 S3 访问创建 radosgw 用户

```

radosgw-admin user create --uid=radosgw --display-name=“radosgw"

```

>注意:请把 access_key 和 secret_key 保存下来 ,如果忘记可使用:radosgw-admin user info --uid … -k … --name …

### 4.2.2 安装 s3cmd 客户端

```

yum install s3cmd -y

```

### 4.2.3 配置 s3cmd 客户端

```

s3cmd --configure

```

将会在家目录下创建 .s3cfg 文件 , location 必须使用 US , 不使用 https

编辑 .s3cfg 文件,修改 host_base 和 host_bucket

```

vi .s3cfg

……

host_base = node3:7480

host_bucket = %(bucket).node3:7480

……

```

### 4.2.4 创建存储桶并放入文件

```

s3cmd mb s3://first-bucket

s3cmd ls

s3cmd put /etc/hosts s3://first-bucket

s3cmd ls s3://first-bucket

```

## 4.3 使用 Swift API 访问 Ceph 对象存储

......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335