草庐IT

Ceph常用操作维护手册

John08 2023-03-28 原文

一、更换磁盘

1、  确认需要更换的磁盘对应的盘符、OSD ID;

root@Ceph-B**A**-04-S2-60:~# df -h |grep 17

/dev/sdp3       1.1T  566G  551G  51% /var/lib/ceph/osd/ceph-17

*sdp为服务器上对应的盘符;

*ceph-17 17OSD对应的ID

 

2、  确认磁盘在服务器上对应的槽位;

root@Ceph-B**A**-04-S2-60:~# ll /dev/disk/by-path/ |grep sdp

lrwxrwxrwx 1 root root    9 Aug 17 19:17 pci-0000:02:00.0-scsi-0:0:18:0 -> ../../sdp

lrwxrwxrwx 1 root root   10 Aug 17 19:17 pci-0000:02:00.0-scsi-0:0:18:0-part1 -> ../../sdp1

lrwxrwxrwx 1 root root   10 Aug 17 19:17 pci-0000:02:00.0-scsi-0:0:18:0-part2 -> ../../sdp2

lrwxrwxrwx 1 root root   10 Aug 17 19:17 pci-0000:02:00.0-scsi-0:0:18:0-part3 -> ../../sdp3

*根据盘符找到服务器上对应的磁盘槽位,scsi-0:0:18:0标识第18号槽位;

 

3、  确认主机的SN;

root@Ceph-B**A**-04-S2-60:~# dmidecode -s system-serial-number

HVNHB**

 

4、  在Crushmap设置故障OSD OUT标志;

ceph osd out 17

*设置OUT标识,告诉集群不要再往这个OSD磁盘上读写数据;

 

5、  查看集群状态;

ceph –s

*确认OSD设置OUT标志后,集群有没有出现异常;

 

6、  关闭OSD对应的实例进程;

stop cep-osd id=17

 

7、  从Crushmap中移除OSD;

ceph osd crush remove osd.17

 

8、  删除集群中OSD认证信息;

ceph auth del osd.17

 *清除旧的认证key信息,新的磁盘加入集群后会重新生产认证密钥;

 

9、  从集群中移除OSD;

ceph osd rm 17

 

10、     卸载OSD磁盘挂载点;

umount /var/lib/ceph/osd/ceph-17

 

11、     IDC维保服务商更换新的磁盘;

 

*根据确认的服务器SN和对应的磁盘槽位,将旧的磁盘取出,更换新的磁盘;

*登入IDRAC将磁盘调整为非RAID模式;

 

12、     初始化新的磁盘;

ceph-deploy disk zap Ceph-BXXAXX-04-S2-60.domain.tld:sdp

 *更换新的磁盘后,有可能磁盘的盘符会变掉,初始化新的磁盘前,最好确认清楚(建议lsblk确认);

 

13、     OSD进程初始化;

ceph-deploy osd create Ceph-BXXAXX-04-S2-60.domain.tld:sdp

 *如果更换的是旧盘,这一步操作有可能失败报错,此时最好用dd(或者分区工具)摧毁磁盘上残留的Raid或分区表信息,然后重新初始化尝试;

 

14、     调整Crushmap;

ceph osd crush add osd.17 1.17 root=sata pod=sata-pod-01 chassis=sata-chassis-01 host=Ceph-B**A**-04-S2-60-sata

*新的OSD权重和位置信息,可以使用ceph osd tree确认服务器上其他OSD的位置和权重做参考;

 

15、     优化挂载参数;

mount -o remount,nobarrier /var/lib/ceph/osd/ceph-17

 *根据需要做优化调整,主要是优化filestore做后端存储引擎时,文件系统层面的提升;

*ceph –s关注集群在数据回填(backfill)中,集群读写IO;

 

16、     完成。

 

 

二、 关机、重启

1、  查看确认Ceph集群状态;

ceph –s

*主要是看Ceph集群当前的状态,有没有pg在做scrub,有没有OSD down、out,数据有没有在做大量的backfill,remap等;

 

2、  设置OSD NOOUT标志;

ceph osd set nooout

 

3、  关闭本机上所有的OSD进程服务;

stop ceph-osd-all

*等待所有的OSD进程关闭,使用ps aux |grep ceph确认;

 

4、  关机或重启;

sync;sync;shutdown –h now

or

sync;sync;reboot

*如果更换、扩容内存,关机后可以操作;

*如果迁移服务器,关机之后可以迁移(在服务器开启前,网络要保证和迁移前相同);

 

5、  开机或重启后,启动OSD进程服务;

start ceph-osd-all-starter

 

6、  取消OSD NOOUT标志;

ceph osd unset noout

 

7、  查看集群状态;

ceph –s

*确认集群恢复到正常状态;

 

8、  完成。

 

 

三、PG异常状态修复

常见状态说明

状态(state)

说明(description)

Active

Ceph可正常处理此pg请求

Clean

PG内所有的对象都被正确的复制了对应的份数

Down

一个包含必备数据的副本离线,所以PG也离线了

Degraded

PG中的一些对象还没有被复制到规定的份数

Inconsistent

Ceph检测到PG中对象的一份或多份数据不一致

Peering

PG正在互联过程中

Recovering

Ceph正在迁移/同步对象和其副本

Incomplete

Ceph 探测到某一PG可能丢失了写入信息,或者没有健康的副本

Stale

PG状态未知,从PG mapping更新后Monitor一直没有收到更新

 

1、 查找Inconsistent pg并修复

      ceph pg dump | grep insconsistent

      or

      ceph health detail

     ceph pg repair {pgnum}

 

*如果修复不好,可以尝试ceph pg scrub {pgnum}或ceph pg deep-scrub {pgnum}

 

2、 查找stale pg 并修复

     ceph pg dump |grep stale

     

      ceph pg map {pgname}

      ceph pg force_create_pg {pgnum}

 

 

四、对象存储帐户管理

1、 创建帐户;

root@node1:~# radosgw-admin user create --display-name="Johnny wick" --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "S54GYGAB21NYEF765DSV",

            "secret_key": "i6AswOcSF5xaeLm4sahRDpYpClpVTYe6FURWuDrU"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": false,

        "max_size_kb": -1,

        "max_objects": -1

    },

    "temp_url_keys": []

}

 

2、 停用帐户;

root@node1:~# radosgw-admin user suspend --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 1,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "S54GYGAB21NYEF765DSV",

            "secret_key": "i6AswOcSF5xaeLm4sahRDpYpClpVTYe6FURWuDrU"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": false,

        "max_size_kb": -1,

        "max_objects": -1

    },

    "temp_url_keys": []

}

 

3、 启用帐户;

root@node1:~# radosgw-admin user enable --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "S54GYGAB21NYEF765DSV",

            "secret_key": "i6AswOcSF5xaeLm4sahRDpYpClpVTYe6FURWuDrU"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": false,

        "max_size_kb": -1,

        "max_objects": -1

    },

   "temp_url_keys": []

}

 

4、 删除帐户;

root@node1:~# radosgw-admin user rm --uid=Johnny

root@node1:~# radosgw-admin user info --uid=Johnny

could not fetch user info: no user info saved

 

5、 查看帐户;

root@node1:~# radosgw-admin user info --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "B6WXEJ94UG9V68VFD3UK",

            "secret_key": "zaSwdDGSIWtWKYRp5dXQJymGXuzQrYa9pnaK4QxM"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": false,

        "max_size_kb": -1,

        "max_objects": -1

    },

    "temp_url_keys": []

}

6、 设置用户配额;

root@node1:~# radosgw-admin quota set --quota-scope=user --uid=Johnny --max-objects=2048 --max-size=204800

root@node1:~# radosgw-admin user info --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "B6WXEJ94UG9V68VFD3UK",

            "secret_key": "zaSwdDGSIWtWKYRp5dXQJymGXuzQrYa9pnaK4QxM"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

       "enabled": false,

       "max_size_kb": 200,

       "max_objects": 2048

   },

    "temp_url_keys": []

}

 

root@node1:~# radosgw-admin quota enable --quota-scope=user --uid=Johnny

root@node1:~# radosgw-admin user info --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "B6WXEJ94UG9V68VFD3UK",

            "secret_key": "zaSwdDGSIWtWKYRp5dXQJymGXuzQrYa9pnaK4QxM"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": true,

        "max_size_kb": 200,

        "max_objects": 2048

    },

    "temp_url_keys": []

}

 

7、 设置bucket配额;

root@node1:~# radosgw-admin quota set quota-scope=bucket --uid=Johnny --bucket=bucket-test01 --max-objects=512 --max-size=51200

root@node1:~# radosgw-admin quota set quota-scope=bucket --uid=Johnny --bucket=bucket-test02 --max-objects=1024 --max-size=102400

root@node1:~# radosgw-admin quota enable --quota-scope=bucket --uid=Johnny --bucket=bucket-test01

root@node1:~# radosgw-admin quota enable --quota-scope=bucket --uid=Johnny --bucket=bucket-test02

root@node1:~# radosgw-admin bucket stats --bucket=bucket-test02

{

    "bucket": "bucket-test02",

    "pool": ".rgw.buckets",

    "index_pool": ".rgw.buckets.index",

    "id": "default.124124.2",

    "marker": "default.124124.2",

    "owner": "Johnny",

    "ver": "0#1,1#1,2#1,3#1,4#1,5#1,6#1,7#1,8#1,9#1,10#1,11#1,12#1,13#1,14#1,15#1,16#1,17#1,18#1,19#1,20#1,21#1,22#1,23#1,24#1,25#1,26#1,27#1,28#1,29#1,30#1,31#1,32#1,33#1,34#1,35#1,36#1,37#1,38#1,39#1,40#1,41#1,42#1,43#1,44#1,45#1,46#1,47#1,48#1,49#1,50#1,51#1,52#1,53#1,54#1,55#1,56#1,57#1,58#1,59#1,60#1,61#1,62#1,63#1,64#1,65#1,66#1,67#1,68#1,69#1,70#1,71#1,72#1,73#1,74#1,75#1,76#1,77#1,78#1,79#1,80#1,81#1,82#1,83#1,84#1,85#1,86#1,87#1,88#1,89#1,90#1,91#1,92#1,93#1,94#1,95#1,96#1,97#1,98#1,99#1,100#1,101#1,102#1,103#1,104#1,105#1,106#1,107#1,108#1,109#1,110#1,111#1,112#1,113#1,114#1,115#1,116#1,117#1,118#1,119#1,120#1,121#1,122#1,123#1,124#1,125#1,126#1,127#1",

    "master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0,8#0,9#0,10#0,11#0,12#0,13#0,14#0,15#0,16#0,17#0,18#0,19#0,20#0,21#0,22#0,23#0,24#0,25#0,26#0,27#0,28#0,29#0,30#0,31#0,32#0,33#0,34#0,35#0,36#0,37#0,38#0,39#0,40#0,41#0,42#0,43#0,44#0,45#0,46#0,47#0,48#0,49#0,50#0,51#0,52#0,53#0,54#0,55#0,56#0,57#0,58#0,59#0,60#0,61#0,62#0,63#0,64#0,65#0,66#0,67#0,68#0,69#0,70#0,71#0,72#0,73#0,74#0,75#0,76#0,77#0,78#0,79#0,80#0,81#0,82#0,83#0,84#0,85#0,86#0,87#0,88#0,89#0,90#0,91#0,92#0,93#0,94#0,95#0,96#0,97#0,98#0,99#0,100#0,101#0,102#0,103#0,104#0,105#0,106#0,107#0,108#0,109#0,110#0,111#0,112#0,113#0,114#0,115#0,116#0,117#0,118#0,119#0,120#0,121#0,122#0,123#0,124#0,125#0,126#0,127#0",

    "mtime": "2021-04-14 10:33:46.000000",

    "max_marker": "0#,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#,26#,27#,28#,29#,30#,31#,32#,33#,34#,35#,36#,37#,38#,39#,40#,41#,42#,43#,44#,45#,46#,47#,48#,49#,50#,51#,52#,53#,54#,55#,56#,57#,58#,59#,60#,61#,62#,63#,64#,65#,66#,67#,68#,69#,70#,71#,72#,73#,74#,75#,76#,77#,78#,79#,80#,81#,82#,83#,84#,85#,86#,87#,88#,89#,90#,91#,92#,93#,94#,95#,96#,97#,98#,99#,100#,101#,102#,103#,104#,105#,106#,107#,108#,109#,110#,111#,112#,113#,114#,115#,116#,117#,118#,119#,120#,121#,122#,123#,124#,125#,126#,127#",

    "usage": {},

    "bucket_quota": {

       "enabled": true,

       "max_size_kb": 100,

       "max_objects": 1024

   }

}

root@node1:~# radosgw-admin bucket stats --bucket=bucket-test01

{

    "bucket": "bucket-test01",

    "pool": ".rgw.buckets",

    "index_pool": ".rgw.buckets.index",

    "id": "default.124118.1",

    "marker": "default.124118.1",

    "owner": "Johnny",

    "ver": "0#1,1#1,2#1,3#1,4#1,5#1,6#1,7#1,8#1,9#1,10#1,11#1,12#1,13#1,14#1,15#1,16#1,17#1,18#1,19#1,20#1,21#1,22#1,23#1,24#1,25#1,26#1,27#1,28#1,29#1,30#1,31#1,32#1,33#1,34#1,35#1,36#1,37#1,38#1,39#1,40#1,41#1,42#1,43#1,44#1,45#1,46#1,47#1,48#1,49#1,50#1,51#1,52#1,53#1,54#1,55#1,56#1,57#1,58#1,59#1,60#1,61#1,62#1,63#1,64#1,65#1,66#1,67#1,68#1,69#1,70#1,71#1,72#1,73#1,74#1,75#1,76#1,77#1,78#1,79#1,80#1,81#1,82#1,83#1,84#1,85#1,86#1,87#1,88#1,89#1,90#1,91#1,92#1,93#1,94#1,95#1,96#1,97#1,98#1,99#1,100#1,101#1,102#1,103#1,104#1,105#1,106#1,107#1,108#1,109#1,110#1,111#1,112#1,113#1,114#1,115#1,116#1,117#1,118#1,119#1,120#1,121#1,122#1,123#1,124#1,125#1,126#1,127#1",

    "master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0,8#0,9#0,10#0,11#0,12#0,13#0,14#0,15#0,16#0,17#0,18#0,19#0,20#0,21#0,22#0,23#0,24#0,25#0,26#0,27#0,28#0,29#0,30#0,31#0,32#0,33#0,34#0,35#0,36#0,37#0,38#0,39#0,40#0,41#0,42#0,43#0,44#0,45#0,46#0,47#0,48#0,49#0,50#0,51#0,52#0,53#0,54#0,55#0,56#0,57#0,58#0,59#0,60#0,61#0,62#0,63#0,64#0,65#0,66#0,67#0,68#0,69#0,70#0,71#0,72#0,73#0,74#0,75#0,76#0,77#0,78#0,79#0,80#0,81#0,82#0,83#0,84#0,85#0,86#0,87#0,88#0,89#0,90#0,91#0,92#0,93#0,94#0,95#0,96#0,97#0,98#0,99#0,100#0,101#0,102#0,103#0,104#0,105#0,106#0,107#0,108#0,109#0,110#0,111#0,112#0,113#0,114#0,115#0,116#0,117#0,118#0,119#0,120#0,121#0,122#0,123#0,124#0,125#0,126#0,127#0",

    "mtime": "2021-04-14 10:33:45.000000",

    "max_marker": "0#,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#,26#,27#,28#,29#,30#,31#,32#,33#,34#,35#,36#,37#,38#,39#,40#,41#,42#,43#,44#,45#,46#,47#,48#,49#,50#,51#,52#,53#,54#,55#,56#,57#,58#,59#,60#,61#,62#,63#,64#,65#,66#,67#,68#,69#,70#,71#,72#,73#,74#,75#,76#,77#,78#,79#,80#,81#,82#,83#,84#,85#,86#,87#,88#,89#,90#,91#,92#,93#,94#,95#,96#,97#,98#,99#,100#,101#,102#,103#,104#,105#,106#,107#,108#,109#,110#,111#,112#,113#,114#,115#,116#,117#,118#,119#,120#,121#,122#,123#,124#,125#,126#,127#",

    "usage": {},

    "bucket_quota": {

       "enabled": true,

       "max_size_kb": 50,

       "max_objects": 512

   }

}

8、 禁用配额

root@node1:~# radosgw-admin quota disable --quota-scope=user --uid=Johnny

root@node1:~# radosgw-admin user info --uid=Johnny

{

    "user_id": "Johnny",

    "display_name": "Johnny wick",

    "email": "",

    "suspended": 0,

    "max_buckets": 1000,

    "auid": 0,

    "subusers": [],

    "keys": [

        {

            "user": "Johnny",

            "access_key": "B6WXEJ94UG9V68VFD3UK",

            "secret_key": "zaSwdDGSIWtWKYRp5dXQJymGXuzQrYa9pnaK4QxM"

        }

    ],

    "swift_keys": [],

    "caps": [],

    "op_mask": "read, write, delete",

    "default_placement": "",

    "placement_tags": [],

    "bucket_quota": {

        "enabled": true,

        "max_size_kb": -1,

        "max_objects": 100

    },

    "user_quota": {

        "enabled": false,

        "max_size_kb": 200,

        "max_objects": 2048

    },

    "temp_url_keys": []

}

 

 

root@node1:~# radosgw-admin quota disable --quota-scope=bucket --uid=Johnny --bucket=bucket-test02

root@node1:~# radosgw-admin bucket stats --bucket=bucket-test02

{

    "bucket": "bucket-test02",

    "pool": ".rgw.buckets",

    "index_pool": ".rgw.buckets.index",

    "id": "default.124124.2",

    "marker": "default.124124.2",

    "owner": "Johnny",

    "ver": "0#1,1#1,2#1,3#1,4#1,5#1,6#1,7#1,8#1,9#1,10#1,11#1,12#1,13#1,14#1,15#1,16#1,17#1,18#1,19#1,20#1,21#1,22#1,23#1,24#1,25#1,26#1,27#1,28#1,29#1,30#1,31#1,32#1,33#1,34#1,35#1,36#1,37#1,38#1,39#1,40#1,41#1,42#1,43#1,44#1,45#1,46#1,47#1,48#1,49#1,50#1,51#1,52#1,53#1,54#1,55#1,56#1,57#1,58#1,59#1,60#1,61#1,62#1,63#1,64#1,65#1,66#1,67#1,68#1,69#1,70#1,71#1,72#1,73#1,74#1,75#1,76#1,77#1,78#1,79#1,80#1,81#1,82#1,83#1,84#1,85#1,86#1,87#1,88#1,89#1,90#1,91#1,92#1,93#1,94#1,95#1,96#1,97#1,98#1,99#1,100#1,101#1,102#1,103#1,104#1,105#1,106#1,107#1,108#1,109#1,110#1,111#1,112#1,113#1,114#1,115#1,116#1,117#1,118#1,119#1,120#1,121#1,122#1,123#1,124#1,125#1,126#1,127#1",

    "master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0,8#0,9#0,10#0,11#0,12#0,13#0,14#0,15#0,16#0,17#0,18#0,19#0,20#0,21#0,22#0,23#0,24#0,25#0,26#0,27#0,28#0,29#0,30#0,31#0,32#0,33#0,34#0,35#0,36#0,37#0,38#0,39#0,40#0,41#0,42#0,43#0,44#0,45#0,46#0,47#0,48#0,49#0,50#0,51#0,52#0,53#0,54#0,55#0,56#0,57#0,58#0,59#0,60#0,61#0,62#0,63#0,64#0,65#0,66#0,67#0,68#0,69#0,70#0,71#0,72#0,73#0,74#0,75#0,76#0,77#0,78#0,79#0,80#0,81#0,82#0,83#0,84#0,85#0,86#0,87#0,88#0,89#0,90#0,91#0,92#0,93#0,94#0,95#0,96#0,97#0,98#0,99#0,100#0,101#0,102#0,103#0,104#0,105#0,106#0,107#0,108#0,109#0,110#0,111#0,112#0,113#0,114#0,115#0,116#0,117#0,118#0,119#0,120#0,121#0,122#0,123#0,124#0,125#0,126#0,127#0",

    "mtime": "2021-04-14 10:42:23.000000",

    "max_marker": "0#,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#,26#,27#,28#,29#,30#,31#,32#,33#,34#,35#,36#,37#,38#,39#,40#,41#,42#,43#,44#,45#,46#,47#,48#,49#,50#,51#,52#,53#,54#,55#,56#,57#,58#,59#,60#,61#,62#,63#,64#,65#,66#,67#,68#,69#,70#,71#,72#,73#,74#,75#,76#,77#,78#,79#,80#,81#,82#,83#,84#,85#,86#,87#,88#,89#,90#,91#,92#,93#,94#,95#,96#,97#,98#,99#,100#,101#,102#,103#,104#,105#,106#,107#,108#,109#,110#,111#,112#,113#,114#,115#,116#,117#,118#,119#,120#,121#,122#,123#,124#,125#,126#,127#",

    "usage": {},

    "bucket_quota": {

        "enabled": false,

        "max_size_kb": 100,

        "max_objects": 1024

    }

}

 

 

五、对象存储bucket管理

1、 创建bucket;

root@node1:~# s3cmd ls

root@node1:~# s3cmd mb s3://bkt-a01

Bucket 's3://bkt-a01/' created

root@node1:~# s3cmd ls

2021-04-14 03:01 s3://bkt-a01

 

2、 删除bucket;

root@node1:~# s3cmd ls

2021-04-14 03:01  s3://bkt-a01

root@node1:~# s3cmd rb s3://bkt-a01

Bucket 's3://bkt-a01/' removed

root@node1:~# s3cmd ls

 

3、 上传文件到bucket;

root@node1:~# s3cmd put ceph_0.94.10-1trusty_amd64.deb s3://bkt-a02/

upload: 'ceph_0.94.10-1trusty_amd64.deb' -> 's3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb' [1 of 1]

 10931302 of 10931302   100% in   0s    30.35 MB/s  done

root@node1:~# s3cmd ls s3://bkt-a02/

2021-04-14 03:14 10.4249019623M d43b24ab71fb36c6626b2d243e5a03bd s3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb

 

4、 下载bucket里面文件;

root@node1:/tmp# s3cmd get s3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb /tmp/

download: 's3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb' -> '/tmp/ceph_0.94.10-1trusty_amd64.deb'  [1 of 1]

 10931302 of 10931302   100% in  14s   712.42 kB/s  done

root@node1:/tmp# ls /tmp/

ceph_0.94.10-1trusty_amd64.deb

 

5、 删除bucket里面文件;

root@node1:/tmp# s3cmd rm s3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb

delete: 's3://bkt-a02/ceph_0.94.10-1trusty_amd64.deb'

root@node1:/tmp# s3cmd ls s3://bkt-a02/

 

6、 查看bucket里面文件;

root@node1:~/my-cluster# s3cmd info s3://bkt-a02/ceph-deploy_1.5.35_all.deb

s3://bkt-a02/ceph-deploy_1.5.35_all.deb (object):

   File size: 96446

   Last mod: Wed, 14 Apr 2021 03:23:22 GMT

   MIME type: application/x-debian-package

   Storage:  STANDARD

   MD5 sum:  05c4b861386a5b18ad008731ba7bf3d7

   SSE:      none

   Policy:   <?xml version="1.0" encoding="UTF-8"?><ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>bkt-a02</Name><Prefix></Prefix><Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>ceph-deploy_1.5.35_all.deb</Key><LastModified>2021-04-14T03:23:22.000Z</LastModified><ETag>&quot;05c4b861386a5b18ad008731ba7bf3d7&quot;</ETag><Size>96446</Size><StorageClass>STANDARD</StorageClass><Owner><ID>Johnny</ID><DisplayName>Johnny wick</DisplayName></Owner></Contents></ListBucketResult>

   CORS:     none

   ACL:      Johnny wick: FULL_CONTROL

   x-amz-meta-s3cmd-attrs: atime:1560760630/ctime:1560498948/gid:0/gname:root/md5:05c4b861386a5b18ad008731ba7bf3d7/mode:33188/mtime:1560498933/uid:0/uname:root

 

7、拷贝bucket里面文件;

root@node1:~/my-cluster# s3cmd ls s3://bkt-a02

2021-04-14 03:23 94.185546875k 05c4b861386a5b18ad008731ba7bf3d7 s3://bkt-a02/ceph-deploy_1.5.35_all.deb

root@node1:~/my-cluster# s3cmd ls s3://bkt-a03

root@node1:~/my-cluster# s3cmd cp s3://bkt-a02/ceph-deploy_1.5.35_all.deb s3://bkt-a03

remote copy: 's3://bkt-a02/ceph-deploy_1.5.35_all.deb' -> 's3://bkt-a03/ceph-deploy_1.5.35_all.deb'

root@node1:~/my-cluster# s3cmd ls s3://bkt-a03

2021-04-14 05:28 94.185546875k 05c4b861386a5b18ad008731ba7bf3d7 s3://bkt-a03/ceph-deploy_1.5.35_all.deb

 

8、移动bucket里面文件;

root@node1:~/my-cluster# s3cmd mb s3://bkt-a04

Bucket 's3://bkt-a04/' created

root@node1:~/my-cluster# s3cmd mv s3://bkt-a02/ceph-deploy_1.5.35_all.deb s3://bkt-a04/

move: 's3://bkt-a02/ceph-deploy_1.5.35_all.deb' -> 's3://bkt-a04/ceph-deploy_1.5.35_all.deb'

root@node1:~/my-cluster# s3cmd ls s3://bkt-a02/

root@node1:~/my-cluster# s3cmd ls s3://bkt-a04

2021-04-14 05:34 94.185546875k 05c4b861386a5b18ad008731ba7bf3d7 s3://bkt-a04/ceph-deploy_1.5.35_all.deb

root@node1:~/my-cluster#

 

9、 查看bucket使用容量;

root@node1:~/my-cluster# s3cmd du s3://bkt-a04

94.185546875k 1 objects s3://bkt-a04/

 

10、     设置bucket文件权限

root@node1:~/my-cluster# s3cmd modify s3://bkt-a04/ --acl-public --recursive

modify: 's3://bkt-a04/ceph-deploy_1.5.35_all.deb'

 

六、结束

有关Ceph常用操作维护手册的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  4. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. ruby - 我可以使用 RVM 为所有用户维护单一版本的 Ruby 吗? - 2

    我喜欢RVM。我意识到它的主要用例是让不同的用户在不同版本的Ruby之间切换。但是假设我正在将Rails应用程序部署到服务器,并且我只想运行单个版本的Ruby。特别是,我想要1.9.2,用RVM安装它很容易,但没有它就很痛苦。有没有一种方法可以让我说“我希望这是所有用户的规范Ruby安装”(连同它的所有gem),而不必手动创建一堆符号链接(symboliclink)并在每次更新到更新时更改它们Ruby版本? 最佳答案 以root身份安装RVM并执行sudorvmuse1.9.2--default。任何采购/usr/local/rvm

  9. 电脑怎么截图?进来看(8种常用截图方法) - 2

    电脑上可以截取图片吗?如果可以,该如何操作呢?相信很多小伙伴都只知道一两种截图的方式,知道的并不全面。其实,电脑上有多种方式截图的,而且非常方便。电脑怎么截图?今天我们就来教大家如何使用电脑截取图片的8种常用方式!操作环境:演示机型:Delloptiplex7050系统版本:Windows10方法一:系统自带截图具体操作:同时按下电脑的自带截图键【Windows+shift+S】,可以选择其中一种方式来截取图片:截屏有矩形截屏、任意形状截屏、窗口截屏和全屏截图。 方法二:QQ截图具体操作:在电脑登录QQ,然后同时按下【Ctrl+Alt+A】,可以任意截图你需要的界面,可以把截图的页面直接下载,

  10. Postman测试简单操作 - 2

    1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri

随机推荐