Ceph RGW高可用集群部署

2023年 5月 4日 31.0k 0

RGW 简介

1647335823899.png
Ceph Object Gateway也称为对象网关 ,RGW支持S2协议和SWIFT协议对外提供对象存储,两者的对象访问方式均以HTTP方式访问。用户的对象经由RGW处理后,会最终存放在后端RADOS系统。
1647332737786.png

  • 对象网关对外提供兼容S3和SWIFT的API
  • 存储网关RGW负责客户端接入
  • RADOS协议实现数据存储(Libradio是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFs都是通过librados访问的目前提供PHP、Ruby、Java、Python等支持)
  • Monitor 一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据
  • OSD 存储数据
  • RGW对外提供三种基础数据逻辑实体:

  • 用户
  • 存储桶
  • 对象
  • 1.用户
    RGW兼容aws s3和OpenStack Switft,用户数据包含:

  • 用户认证信息
  • 访问控制权限信息: 包含操作访问权限和访问控制列表ACL
  • 用户配额信息: 防止某些用户占用过多内存空间,根据用户实际情况分配存储空间
  • 2.存储桶(bucket)
    存储桶是对象的容器,为了方便管理和操作具有相同属性的一类对象而引起的一级管理单元存储桶信息包含:

  • 基础信息 (保存在对应RADOS对象的数据部分) RGW关注的信息,包含bucket配额信息 (最大对象数目和对大对象总和),bucket placement rule,bucket中搜索对象数目等等
  • 扩展信息: (保存在对应RADOS对象的扩展属性)对RGW透明的一些信息,如用户自定义的元数据信息
  • 1647334711353.png
    3.对象
    RGW中的应用对象对应RADOS对象。应用对象上传分整体上传和分段上传,不同的方式应用对象对应RADOS对象的方式不同

  • rgw_max_chunk_size: 分块大小,RGW下发至RADOS集群的单个IO大小
  • rgw_obj_stripe_size: 条带大小
  • class RGWObjManifest: 管理应用对象和RADOS对象的对应关系
  • 3.1 整体上传

  • 应用对象大小小于等于分块大小: 用户上传的对象只对应一个RADOS对象,该RADOS对象以应用对象名称命名,应用对象元数据也保存在该RADOS对象的扩展属性中
  • 应用对象大小小于分块大小: 对应对象被分解一个大小等于分块大小的售对象,多个大小等于条带大小的中间对象,和一个大小小于等于条带大小的尾对象。首对象以应用对象命名,在RGW中将该对象称为head_obj,该对象的数据部分保存了应用对象前rgw_max_chunk_size字节的数据,扩展属性部分保存了应用对象的元数据信息和manifest信息。
  • 1647335483197.png
    3.2 分段上传
    RGW依照条带大小将应用对象的每一个分段分成多个RADOS对象,每个分段的第一个 RADOS 对象名称为:

  • “multipart” + “用户上传对象名称” + “分段上传ID” + “分段编号”其余对象的名称为:
  • “shadow” + “用户上传对象名称” + “分段上传ID” + “分段编号” +
 “_” + “条带编号”
  • 当所有的分段上传结束后,RGW 会从 data_extra_pool 中的分段上传临时对象中读取各个分段信息,主要是各分段的 manifest 信息,组成一个 manifest;然后生成一个新的 RADOS 对象,即 head obj,用来保存分段上传的应用对象的元数据信息和各分段的manifest。
    1647335544949.png

    RGW 高可用架构

    1647330779179.png

    RGW 添加节点及配置文件修改

    Ceph集群信息

    IP
    服务
    主机名
    备注
    192.168.31.20 mon、mgr、mds(主)、osd、rgw ceph-01 rgw端口都修改为81
    192.168.31.21 mon、mgr、mds、osd、rgw添加rgw节点 ceph-02 rgw添加节点
    192.168.31.22 mon、mgr(主)、mds、osd ceph-03  
    192.168.31.23 osd ceph-04  
    192.168.31.120     VIP

    Ceph基础知识和基础架构

    新闻联播老司机

  • 22年2月18日
  • 喜欢:0
  • 浏览:1.1k
  • 目前我们ceph集群中rgw节点只有一个,只有一个的ceph-01节点。现在我们需要添加一个ceph-02节点,来配合ceph-01添加高可用。

    [root@ceph-01 ~]# ceph -s
      cluster:
        id:     c8ae7537-8693-40df-8943-733f82049642
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 37h)
        mgr: ceph-03(active, since 3d), standbys: ceph-02, ceph-01
        mds: cephfs-abcdocker:1 {0=ceph-01=up:active} 2 up:standby
        osd: 4 osds: 4 up (since 3d), 4 in (since 3w)
        rgw: 1 daemon active (ceph-01)
    
      task status:
    
      data:
        pools:   9 pools, 384 pgs
        objects: 3.16k objects, 11 GiB
        usage:   36 GiB used, 144 GiB / 180 GiB avail
        pgs:     384 active+clean

    我们ceph-01已经有rgw,目前只需要在ceph-02上安装rgw,并且在ceph-01和ceph-02节点同时安装keeplived和haproxy或者nginx进行代理rgw

    在ceph-02上安装rgw

    #我们ceph-01安装了ceph-deploy,所以需要进入到ceph-deploy节点进行安装配置
    [root@ceph-01 ~]# cd ceph-deploy
    
    #通过ceph-deploy创建rgw节点,这里实际上可以参考创建集群的步骤
    [root@ceph-01 ceph-deploy]# ceph-deploy rgw create ceph-02
    #ceph-02为hostname ceph-02节点

    通过ceph -s已经可以看到rgw节点

    [root@ceph-01 ceph-deploy]# ceph -s
      cluster:
        id:     c8ae7537-8693-40df-8943-733f82049642
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 11h)
        mgr: ceph-03(active, since 4d), standbys: ceph-02, ceph-01
        mds: cephfs-abcdocker:1 {0=ceph-01=up:active} 2 up:standby
        osd: 4 osds: 4 up (since 4d), 4 in (since 3w)
        rgw: 2 daemons active (ceph-01, ceph-02)    #ceph-02已经添加完毕
    
      task status:
    
      data:
        pools:   9 pools, 384 pgs
        objects: 3.16k objects, 11 GiB
        usage:   36 GiB used, 144 GiB / 180 GiB avail
        pgs:     384 active+clean
    
      io:
        client:   3.2 KiB/s rd, 0 B/s wr, 3 op/s rd, 2 op/s wr

    目前我们可以看到rgw默认端口为7480,下面我们需要修改一下默认端口号,将7480修改为81端口
    1647412838796.png
    修改ceph-01 ceph-02端口号

    [root@ceph-01 ceph-deploy]# vim /root/ceph-deploy/ceph.conf  #修改ceph.conf,直接修改ceph-deploy目录下的文件,后面可以通过命令直接分发到各个节点
    [client.rgw.ceph-01]
    rgw_frontends = "civetweb port=81"
    
    [client.rgw.ceph-02]
    rgw_frontends = "civetweb port=81"
    
    #将ceph-01复制为ceph-02,端口都修改为81

    1647413758957.png
    修改完毕后push config文件到ceph-01 ceph-02节点

    [root@ceph-01 ceph-deploy]# ceph-deploy --overwrite-conf config push ceph-01 ceph-02
    
    #接下来手动重启radosgw服务
    #ceph-01节点和ceph-02节点都需要手动重启
    [root@ceph-01 ceph-deploy]# systemctl restart ceph-radosgw.target
    [root@ceph-01 ceph-deploy]# lsof -i:81
    COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    radosgw 12755 ceph   45u  IPv4 1308899      0t0  TCP *:81 (LISTEN)
    
    #ceph-02节点手动重启
    [root@ceph-01 ceph-deploy]# ssh ceph-02
    Last login: Wed Feb 23 15:30:58 2022 from ceph-01
    [root@ceph-02 ~]# systemctl restart ceph-radosgw.target
    [root@ceph-02 ~]# lsof -i:81
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    radosgw 21845 ceph   45u  IPv4 823286      0t0  TCP *:81 (LISTEN)
    [root@ceph-02 ~]# curl 127.0.0.01:81
    <?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

    Keeplived搭建

    在ceph-01和ceph-02节点上安装keeplived

    [root@ceph-01 ~]# yum install -y keepalived
    [root@ceph-02 ~]# yum install -y keepalived

    备份ceph-01和ceph-02默认配置文件

    [root@ceph-01 ~]# mv /etc/keepalived/keepalived.conf{,.bak_2022-03-16}
    [root@ceph-02 ~]# mv /etc/keepalived/keepalived.conf{,.bak_2022-03-16}

    修改ceph-01配置

    VIP:192.168.31.120network:eth0

    cat >>/etc/keepalived/keepalived.conf<<EOF
    
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_haproxy {
        script "killall -0 haproxy"
        interval 2
        weight -2
    
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.31.120
        }
        track_script {
        chk_haproxy
        }
    }
    EOF

    修改ceph-02配置

    cat >>/etc/keepalived/keepalived.conf<<EOF
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_haproxy {
        script "killall -0 haproxy"
        interval 2
        weight -2
    
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.31.120
        }
        track_script {
        chk_haproxy
        }
    }
    EOF

    在ceph-01和ceph-02执行启动命令

    systemctl enable --now keepalived

    启动完成测试keepalived

    [root@ceph-01 ~]# ping 192.168.31.120
    PING 192.168.31.120 (192.168.31.120) 56(84) bytes of data.
    64 bytes from 192.168.31.120: icmp_seq=1 ttl=64 time=0.138 ms
    64 bytes from 192.168.31.120: icmp_seq=2 ttl=64 time=0.134 ms
    64 bytes from 192.168.31.120: icmp_seq=3 ttl=64 time=0.123 ms
    ^C
    --- 192.168.31.120 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 0.123/0.131/0.138/0.014 ms
    [root@ceph-01 ~]#

    Haproxy 代理RGW

    接下来安装haproxy,在ceph-01和ceph-02上执行

     yum install -y haproxy

    覆盖ceph-01 和ceph-02配置具体配置参数根据需求修改,需要修改ip和hostname

    cat >/etc/haproxy/haproxy.cfg<<EOF
    global
        log         127.0.0.1 local2
    
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        haproxy
        group       haproxy
        daemon
        stats socket /var/lib/haproxy/stats
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    frontend  http_web *:80
        mode http
        default_backend          rgw
    backend rgw
        balance     roundrobin
        mode http
        server  ceph-01 192.168.31.20:81
        server  ceph-02 192.168.31.21:81
    EOF

    重启ceph-01和ceph-02上的haproxy

    systemctl enable --now haproxy

    查看服务

    [root@ceph-01 ~]# lsof -i:80
    COMMAND   PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    haproxy 16030 haproxy    5u  IPv4 1330793      0t0  TCP *:http (LISTEN)
    
    [root@ceph-01 ~]# curl 127.0.0.1
    <?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>

    目前haproxy已经配置完成

    [root@ceph-01 ~]# curl 192.168.31.120   #curl vip地址测试
    <?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

    RGW客户端修改

    rgw客户端创建bucket可以参考下面文章

    Ceph-deploy 快速部署Ceph集群

    新闻联播老司机

  • 22年2月18日
  • 喜欢:1
  • 浏览:1.6k
  • 之前我们使用的是s3cmd命令,接下来修改rgw地址

    sed -i 's/192.168.31.10/192.168.31.120/g' /root/.s3cfg

    执行查看bucket

    eph-01 ~]#  sed -i 's/192.168.31.20/192.168.31.120/g' /root/.s3cfg
    [root@ceph-01 ~]# vim .s3cfg 
    [root@ceph-01 ~]# s3cmd ls 
    2022-01-27 07:31  s3://ceph-s3-bucket
    2022-01-27 10:07  s3://s3cmd-abcdocker-demo

    相关文章:

    1. Ceph-deploy 快速部署Ceph集群
    2. Ceph集群日常使用命令
    3. Ceph OSD扩容与缩容
    4. Ceph RBD 备份与恢复

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论