# 一、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< $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< [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< [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< [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< [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 [email protected] # 去指定 mgr 节点上执行 sudo systemctl restart [email protected] sudo systemctl restart [email protected] ``` ### 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 [email protected] systemctl start [email protected] ``` 停止 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 [email protected] ``` ## 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 ``` 如果网关实例工作正常,你接收到的返回信息大概如下所示: ``` ``` ### 4.1.5 修改默认端口 Civetweb 默认运行在端口 7480 之上.。如果想修改这个默认端口 (比如使用端口 80),修改你的管理节点的工作目录下的 Ceph 配置文件。 添加一节,以 [client.rgw. >注意: 在 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 对象存储 ......