美文网首页
Ceph 部署

Ceph 部署

作者: 奥特曼de简书 | 来源:发表于2019-05-11 19:33 被阅读0次

    # 一、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 对象存储

    ......

    相关文章

      网友评论

          本文标题:Ceph 部署

          本文链接:https://www.haomeiwen.com/subject/bxdfaqtx.html